2016-04-25 27 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

相关问题