您的位置:首页 > 数据库

PLSQL中执行DDL语句的时候出现权限不足问题

2010-07-30 14:10 309 查看
今天发布脚本的时候出现权限不足的问题 查了一下 主要是因为 当前用户系统权限只有Unlimited tablespace,但角色是dba角色,

通过查询发现是由于PLSQL执行的时候只是检查当前的系统权限,角色的权限不管用,所以有两种方法可以解决这个问题:

1 手动直接加系统权限

2 在procedure头部 添加 create or replace procedure xxx authid current_user is xxxx

下面来做实验

--查看角色 以及系统权限 发现没有create any table 的系统权限
SQL> select *
2  from dba_role_privs t
3  where t.grantee = 'C_GD'
4  /

GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE
------------------------------ ------------------------------ ------------ ------------
C_GD                           DBA                            NO           YES
C_GD                           CONNECT                        NO           YES

SQL> select *
2  from user_sys_privs t
3  /

USERNAME                       PRIVILEGE                                ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
C_GD                           UNLIMITED TABLESPACE                     NO

--建立procedure
SQL> create or replace procedure test_priv_proc as
2  begin
3     execute immediate 'create table test_tb(id number)';
4  end;
5  /

Procedure created
--调用procedure

SQL> begin
2    test_priv_proc;
3  end;
4  /

begin
test_priv_proc;
end;
--发现报权限不足
ORA-01031: insufficient privileges
ORA-06512: at "C_GD.TEST_PRIV_PROC", line 3
ORA-06512: at line 3
--手动授权
SQL> grant create any table to c_gd;

Grant succeeded
--成功
SQL> begin
2    test_priv_proc;
3  end;
4  /

PL/SQL procedure successfully completed
--回收权限
SQL> revoke create any table from c_gd;

Revoke succeeded
--添加authid current_user权限
SQL> create or replace procedure test_priv_proc authid current_user as
2  begin
3    execute immediate 'create table test_tb(id number)';
4  end;
5  /

Procedure created
--删除以前生成的table
SQL> drop table test_tb;

Table dropped
--可以成功运行
SQL> begin
2    test_priv_proc;
3  end;
4  /

PL/SQL procedure successfully completed

SQL>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐