oracle存储过程授权
‘壹’ 怎样授权存储过程给另外一个用户
一般是对于存储过程授执行权权
Grant execute on procere_name to user1;
如果要求被授权用户也能够授权给其它用户:
grant execute on procere_name to user1 with grant option;
数据存储是数据流在加工过程中产生的临时文件或加工过程中需要查找的信息。数据以某种格式记录在计算机内部或外部存储介质上。数据存储要命名,这种命名要反映信息特征的组成含义。
‘贰’ 如何在Oracle的存储过程中拥有role权限
很多人都有这样的了解,用户拥有的role权限在存储过程是不可用的。示例:
SQL> select * from dba_role_privs where grantee='SUK';
GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE
--------- ------------ ------------ ------------
SUK DBA NO YES
SUK CONNECT NO YES
SUK RESOURCE NO YES
用户SUK拥有DBA这个role.
下面我们继续创建一个测试存储过程:
create or replace procere p_create_table
is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
测试:
SQL> exec p_create_table;
begin p_create_table; end;
ORA-01031: 权限不足
ORA-06512: 在"SUK.P_CREATE_TABLE", line 3
ORA-06512: 在line 1
可以看到,即使拥有DBA role,也不能创建表。role在存储过程中不可用。
遇到
这种情况,我们一般需要显式进行系统权限,如grant create table to suk;
但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储过程
实际上,oracle给我们提供了在存储过程中使用role权限的方法:
修改存储过程,加入Authid Current_User时存储过程可以使用role权限。
create or replace procere p_create_table
Authid Current_User is
begin
Execute Immediate 'create table create_table(id int)';
end p_create_table;
然后继续尝试执行:
SQL> exec p_create_table;
PL/SQL procere successfully completed
至此即可以执行了。
‘叁’ 如何在oracle中指定某个存储过程的修改、执行权限给另一用户
不能调用存储过程,调用存储过程需要execute any procere 权限才行。
CONNECT角色: --是授予最终用户的典型权利,最基本的
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
‘肆’ oracle怎么只给存储过程授权执行权限不给看的权限
存储过程的相关权限一共只有两个,一个是excute权限,还有一个是debug权限。
按照你的说法就是只给excute的权限,不给debug权限,因为没试过这样能不能查看,所以你要自己试验下才行。
‘伍’ oracle怎么给存储过程赋增加表的权限
GRANT说明:
名称
GRANT — 赋予一个用户,一个组或所有用户访问权限
GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username }
输入
privilege 可能的权限有:
SELECT:访问声明的表/视图的所有列/字段.
INSERT:向声明的表中插入所有列字段.
UPDATE:更新声明的所有列/字段.
DELETE:从声明的表中删除所有行.
RULE: 在表/视图上定义规则 (参见 CREATE RULE 语句).
ALL: 赋予所有权限.
object 赋予权限的对象名.可能的对象是:
* table (表)
* view (视图)
* sequence (序列)
* index (索引)
PUBLIC:
代表是所有用户的简写.
GROUP group:
将要赋予权限的组 group .目前的版本中,组必须是用下面方法显式创建的.
username:
将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.
输出
CHANGE: 如果成功,返回此信息.
ERROR: ChangeAcl: class "object" not found
如果所声明的对象不可用或不可能对声明的组或用户赋予权限.
‘陆’ oracle中如何给用户赋予在存储过程里查询所有表的权限
不要通过角色来获得select any table的权限,直接给用户授予select any table的权限。
‘柒’ oracle怎么存储过程赋权修改
DROP ANY PROCEDURE
EXECUTE ANY PROCEDURE
ALTER ANY PROCEDURE
CREATE ANY PROCEDURE
CREATE PROCEDURE
DEBUG ANY PROCEDURE
‘捌’ oracle存储过程执行权限和表修改权限无关
不能!
除非你的存储过程中定义了
CREATE OR REPLACE procere XXXXX AUTHID CURRENT_USER AS.
你可以这样去想,如果存储过程是张三的,表也是张三的,那么李四进去后,修改的是李四下面的table001还是张三下面的table001呢?所以,除非他有张三的权限才行
‘玖’ oracle赋权调用存储过程
首先,需要resource,connect
grant resource,connect to guest;
然后赋予 执行权限(对每一个存储过程授权):
grant execute on cache.xxxxxx to guest
‘拾’ oracle 测试存储过程 是哪个权限
Oracle规定,在默认的情况下,在调用存储过程用户的角色不起作用,即在执行存储过程时只有Public权限。所以在调用Create table时,会有权限不足的提示。
只需要使用IR Procere就能很快解决问题啦,把代码修改为如下:
CREATE OR REPLACE PROCEDURE TestProc AUTHID current_user
IS
flag number;
BEGIN
select count(*) into flag from all_tables where table_name='TEMP3';
if (flag=0) then
execute immediate 'create global temporary table TEMP3 on commit preserve rows as select * from BUSI_ECONTRACT';
else
execute immediate 'insert into TEMP3 select * from BUSI_ECONTRACT';
end if;
END ;
执行存储过程,顺利通过。