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 触发命令“插入 SCHEMA2.TABLE_DEF..”时,它工作正常。但是,当从过程 PROC_ABC 的主体内部触发相同的插入命令时,它会引发错误。请注意,SCHEMA1 的过程 PROC_ABC 正在由 Schema2 的触发器 TRIG_DEF 调用。

错误:ORA-01031:权限不足

4

1 回答 1

1

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

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

或者

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

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

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

于 2015-09-12T17:46:36.440 回答