2010-11-29 81 views

回答

20

存儲過程XYZ所有權的權利編寫SQL命令,我不知道,我明白你的「所有權的權利」的意思。

如果用戶B擁有一個存儲過程,用戶B可以授予用戶運行存儲過程

GRANT EXECUTE ON b.procedure_name TO a 

然後,用戶A將使用完全限定名調用過程A權限,即

BEGIN 
    b.procedure_name(<<list of parameters>>); 
END; 

或者,用戶A可以創建同義詞,以避免必須使用完全限定的過程名稱。

CREATE SYNONYM procedure_name FOR b.procedure_name; 

BEGIN 
    procedure_name(<<list of parameters>>); 
END; 
4

你不能做我認爲你要做的事。

您可以授予程序的唯一權限是EXECUTE和DEBUG。

如果您想允許用戶B在用戶A架構中創建過程,那麼用戶B必須具有CREATE ANY PROCEDURE特權。更改任何程序和刪除任何程序是爲用戶B更改或刪除用戶A程序所需的其他適用權限。所有權限都是廣泛的,因爲它不會將用戶B限制爲任何特定模式。如果授予這些權限,用戶B應該高度信任。

編輯:

賈斯汀提到的,給予執行權,一種通過B所擁有的程序的方式:

GRANT EXECUTE ON b.procedure_name TO a; 
+1

+1一種比CREATE ANY PROCEDURE更爲激烈的方法,但也有缺陷是給用戶B使用用戶B密碼給用戶A,允許他們以該用戶身份登錄。這聽起來像你想授予模式級特權,但這些特權在Oracle中不可用。 – 2010-11-29 19:06:41

0

包和Oracle存儲過程使用的權利默認執行包/程序OWNER,而不是當前登錄的用戶。

因此,如果您調用一個創建用戶的包,例如它的包所有者,而不是需要創建用戶特權的調用用戶。調用者只需要在包上具有執行權限。

如果您希望該包應使用主叫用戶的權限下運行,創造了包,那麼當你需要指定AUTHID CURRENT_USER

Oracle文檔「祈求權利VS定義者權限」提供了更多信息http://docs.oracle.com/cd/A97630_01/appdev.920/a96624/08_subs.htm#18575

希望這有助於。

0
SQL> grant create any procedure to testdb; 

這是一個命令,當我們要給「testdb」用戶創建特權時。

1

在你的DBA帳號,給USERB使用撥款,以創建一個過程的權利grant create any procedure to USERB

的過程看起來

CREATE OR REPLACE PROCEDURE USERB.USERB_PROCEDURE 
--Must add the line below 
AUTHID CURRENT_USER AS 
    BEGIN 
    --DO SOMETHING HERE 
    END 
END 

GRANT EXECUTE ON USERB.USERB_PROCEDURE TO USERA

我知道這是一個非常古老的問題,但我我希望我能把它打碎一點。