標籤:
原文地址:http://blog.itpub.net/4227/viewspace-69049/
今天晚上升級,有個預存程序死活編譯不過去,提示許可權不足,但是使用者是具有dba許可權的,網上一查才知道,oracle預存程序分兩種,DR(Definer‘s Rights ) Procedure和IR(Invoker‘s Rights ) Procedure。
1、定義者許可權:定義者許可權PL/SQL程式單元是以這個程式單元擁有者的特權來執行它的,也就是說,任何具有這個PL/SQL程式單元執行權的使用者都可以訪問程式中的對象。所有具有執行權的使用者都有相同的存取權限,在定義者許可權下,執行的使用者操作的schema為定義者,所操作的對象是定義者在編譯時間指定的對象。在定義者(definer)許可權下,目前使用者的許可權為角色無效情況下所擁有的許可權。 2、調用者許可權:調用者許可權是指目前使用者(而不是程式的建立者)執行PL/SQL程式體的許可權。這意味著不同的使用者對於某個對象具有的許可權很可能是不同的,這個思想的提出,解決了不同使用者更新不同表的方法。在調用者許可權下,執行的使用者操作的schema為目前使用者,所操作的對象是當前模式下的對象。在調用者(invoker)許可權下,目前使用者的許可權為當前所擁有的許可權(含角色)。 3、ORACLE預設為定義者許可權,定義者許可權在預存程序中ROLE無效,需要顯示授權,例如在預存程序中調用其他使用者的表,但是定義預存程序的目前使用者沒有顯示訪問該表的許可權,即使目前使用者具有dba角色,編譯過程中也會出現許可權不足的問題,因為role無效。
定義預存程序時,通過指定AUTHID 屬性,定義DR Procedure 和IR ProcedureDR Procedure 1、定 義 CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID DEFINER as ... BEGIN ... END DEMO;IR Procedure1、定 義 CREATE OR REPLACE procedure DEMO(ID in NUMBER) AUTHID CURRENT_USER as ... BEGIN ... END DEMO;
【轉】關於Oracle預存程序執行許可權問題的解決