2015-09-12 20 views
0

我在同一個實例中有兩個Oracle DB模式SCHEMA1和SCHEMA2。ORA-01031:通過過程插入時權限不足

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

SCHEMA2中的對象: 1.表TABLE_DEF。 2.觸發器TRIG_DEF。

授予: 1. Grant通過SYSTEM用戶向SCHEMA1插入任何表。 2.通過SCHEMA2用戶將TABLE_DEF的插入授予SCHEMA1。 3.通過SCHEMA1用戶將PROC_ABC上的執行授予SCHEMA2。

問題: 當我從SCHEMA1發出'insert into SCHEMA2.TABLE_DEF ..'命令時,它工作正常。 但是,當相同的插入命令從PROC_ABC過程體內被觸發時,它會拋出一個錯誤。請注意SCHEMA1的過程PROC_ABC正在被Schema2的觸發器TRIG_DEF調用。

錯誤: ORA-01031:權限不夠

回答

0

在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權限運行。

還要注意觸發器作爲觸發器的定義者執行。