我是靠谱客的博主 传统月亮,最近开发中收集的这篇文章主要介绍oracle创建触发器权限不足,创建触发器时,报告错误:ORA-01031: insufficient privileges...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

〖现象(Symptom)〗

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

Step01:system的身份登陆数据库

SQL> connect system@wm

Enter password:

Connected.

Step02:创建触发器trigger_autoadd

SQL> CREATE OR REPLACE TRIGGER trigger_autoadd

2before insert

3on test.autoadd

4for each row

5begin

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

7end;

8/

Warning: Trigger created with compilation errors

SQL> show error

Errors for TRIGGER SYSTEM.TRIGGER_AUTOADD:

LINE/COL ERROR

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

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

2/4PL/SQL: SQL Statement ignored

在表autoadd上创建触发器trigger_autoadd。

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

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

Step03:system用户也能往表autoadd中也能插入数据库。

SQL> insert into test.autoadd

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

1 row inserted

Step04:序列也可以正常访问。

SQL> select test.SEQ_id.nextval from dual;

NEXTVAL

----------

205

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

〖原理(Cause)〗

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

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

Grant CREATE TRIGGER to tt;

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

Grant CREATE ANY TRIGGER to tt;

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

〖方法(Action)〗

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

SQL> grant select on test.seq_id to system;

Grant succeeded.

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

SQL> CREATE OR REPLACE TRIGGER trigger_autoadd3

2before insert

3on test.autoadd

4for each row

5begin

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

7end;

8/

Trigger created

触发器创建成功。

最后

以上就是传统月亮为你收集整理的oracle创建触发器权限不足,创建触发器时,报告错误:ORA-01031: insufficient privileges...的全部内容,希望文章能够帮你解决oracle创建触发器权限不足,创建触发器时,报告错误:ORA-01031: insufficient privileges...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部