ORA-01031:通过程序插入时权限不足

时间:2015-09-12 17:07:00

标签: oracle ora-01031

我在同一个实例中有两个Oracle DB模式SCHEMA1和SCHEMA2。

SCHEMA1中的对象: 1.程序PROC_ABC。

SCHEMA2中的对象: 1.表TABLE_DEF。 2.触发器TRIG_DEF。

补助金: 1.授予SYSTEM用户向SCHEMA1插入任何表格。 2.由SCHEMA2用户将TABLE_DEF上的插入授予SCHEMA1。 3.由SCHEMA1用户授予PROC_ABC到SCHEMA2的执行权。

问题: 当我触发命令'插入SCHEMA2.TABLE_DEF ..'从SCHEMA1它正常工作。 但是当从过程PROC_ABC的主体内部触发相同的插入命令时,它会抛出错误。请注意,SCHMA1的过程PROC_ABC由Schema2的Trigger TRIG_DEF调用。

错误: ORA-01031:权限不足

1 个答案:

答案 0 :(得分:1)

在Oracle中,您可以选择是否在定义权限用户权限下运行某个过程。在definer权限下,该过程使用模式所有者的权限执行(这是默认设置)。

CREATE OR REPLACE PRODECURE schema.procedure_name () AUTHID CURRENT_USER AS ...

CREATE OR REPLACE PRODECURE schema.procedure_name () AUTHID DEFINER AS ...

如果已使用AUTHID CURRENT_USER声明PROC_ABC,则它将以调用它的任何人的权限运行。指定AUTHID DEFINER以使其以SCHEMA1权限运行。

另请注意,触发器作为触发器的定义器执行。