2016-04-25 29 views
0

隨着系統的用戶,我創建了一個新的用戶,並授予他DBA權限:GRANT dba TO user_bdda_adminProjetPL/SQL不可能選擇一個表到觸發器

我試圖尋找到DBA_ROLE_PRIVS表到觸發器(我沒「T粘貼我所有的代碼,隨時告訴我,如果有必要):

CREATE OR REPLACE TRIGGER my_trigger 
INSTEAD OF 
    INSERT ON vueEnquete 
    FOR EACH ROW 
DECLARE 
    tmp int; 
BEGIN 
    SELECT COUNT(*) INTO tmp FROM DBA_ROLE_PRIVS; 
    ... 
    ... 
END; 
/

但是當我嘗試執行該腳本,我得到了以下錯誤:

Erreur(6,3): PL/SQL: SQL Statement ignored 
Erreur(6,39): PL/SQL: ORA-00942: table or view does not exist 

看着不同論壇上,我發現問題一般是用戶沒有權利表。

但是,當我執行,因爲我的用戶user_bdda_adminProjet以下行單獨(一個觸發的),它完美

SELECT COUNT(*) FROM DBA_ROLE_PRIVS; 

而且,如果我只是發表意見線下了扳機,它的執行沒有任何錯誤,所以我想這個錯誤是專門在這一行。

在此先感謝您的幫助,並隨時告訴我您是否需要更多信息。

+0

爲什麼你的觸發器需要查詢數據字典? –

回答

1

dba是一個角色,而不是一個特權。

通過角色獲得的特權在PL/SQL中不是「活動的」。您需要直接向用戶授予DBA_ROLE_PRIVS的選擇特權。

+0

我不知道,謝謝你的解釋! 我這樣做是因爲我的用戶系統: 'GRANT SELECT ON DBA_ROLE_PRIVS TO user_bdda_adminProjet;' 但得到的錯誤「ORA-01031:權限不夠」 我不認爲我有誰得到更多特權的任何其他用戶比系統... – KrazyMonkey

+0

@KrazyMonkey你需要'系統'或'SYS'爲了授予這個特權 –

+0

我做過'授予SELECT DBA_ROLE_PRIVS到user_bdda_adminProjet;'作爲系統,但得到的權限不足:/ – KrazyMonkey

相關問題