首页 文章

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

提问于
浏览
1

我在同一个实例中有两个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 回答

  • 1

    在Oracle中,您可以选择是在 definer rightsuser rights 下运行过程 . 在定义者权限下,该过程使用模式所有者的权限执行(这是默认值) .

    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权限运行 .

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

相关问题