创建触发器时,报告错误:ORA-01031: insufficient privileges

〖现象(Symptom)   

创建触发器时,报告权限不足,具体过程如下。

Step01system的身份登陆数据库

SQL> connect system@wm

Enter password:

Connected.

 

Step02创建触发器trigger_autoadd

SQL> CREATE OR REPLACE TRIGGER trigger_autoadd

  2     before insert

  3       on test.autoadd

  4       for each row

  5  begin

  6     select test.SEQ_id.nextval into :new.id from dual;

  7  end;

  8  /

Warning: Trigger created with compilation errors

 

SQL> show error

Errors for TRIGGER SYSTEM.TRIGGER_AUTOADD:

LINE/COL ERROR

-------- ------------------------------------------

2/16     PL/SQL: ORA-01031: insufficient privileges

2/4      PL/SQL: SQL Statement ignored

在表autoadd上创建触发器trigger_autoadd

 

用户system有角色(roleDBA权限,DBA已经就有CREATE ANY TRIGGER

的权限,因此,system就有create any trigger的权限。

 

Step03system用户也能往表autoadd中也能插入数据库。

SQL> insert into test.autoadd

  2  values(4,'sdfds','sdfsdf');

1 row inserted

 

Step04序列也可以正常访问。

SQL> select test.SEQ_id.nextval from dual;

 

   NEXTVAL

----------

       205

 

这就非常奇怪,用户systemCREATE ANY TRIGGER的权限,system有访问触发器中所引用的对象(表)上的权限,为什么还报告“权限不足”呢?

 

〖原理(Cause    

要想创建触发器,必须要有CREATE TRIGGERCREATE ANY TRIGGER的权限。如:

要想使用户tt有创建触发器的权限,则执行命令:

Grant CREATE TRIGGER to tt;

 

要想使用户tt有在其他模式(any schema)创建触发器的权限,则执行命令:

Grant CREATE ANY TRIGGER to tt;

 

本例中,用户system已经有了CREATE ANY TRIGGER和访问任何对象的权限。那么,用户System自然也有访问序列(sequenceseq_id的权限,但是这个权限是从角色(roleDBA继承而来的权限。创建触发器(trigger)时,ORACLE有一个限制,触发器(trigger)的拥有者必须被显示(explicitly)授予访问触发器(trigger)中涉及到的对象的权限(也就是说这些权限不能由角色继承而来)

 

〖方法(Action    

Step01显示(explicitly)授予触发器的拥有者(system)访问序列(sequenceseq_id的权限。

SQL> grant select on test.seq_id to system;

Grant succeeded.

 

Step02再次执行创建触发器trigger_autoadd3的脚本。

SQL> CREATE OR REPLACE TRIGGER trigger_autoadd3

  2   before insert

  3        on test.autoadd

  4         for each row

  5    begin

  6       select test.SEQ_id.nextval into :new.id from dual;

  7    end;

  8  /

 

Trigger created

触发器创建成功。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13804621/viewspace-351814/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13804621/viewspace-351814/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值