我在同一个实例中有两个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的权限 .
问题:当我从SCHEMA1触发命令'insert into SCHEMA2.TABLE_DEF ..'时,它正常工作 . 但是当从过程PROC_ABC的主体内部触发相同的插入命令时,它会抛出错误 . 请注意,SCHMA1的过程PROC_ABC由Schema2的Trigger TRIG_DEF调用 .
错误:ORA-01031:权限不足
1 回答
在Oracle中,您可以选择是在 definer rights 或 user rights 下运行过程 . 在定义者权限下,该过程使用模式所有者的权限执行(这是默认值) .
要么
如果已使用AUTHID CURRENT_USER声明PROC_ABC,则它将以调用它的任何人的权限运行 . 指定AUTHID DEFINER以使其以SCHEMA1权限运行 .
另请注意,触发器作为触发器的定义器执行 .