2016-04-25 3 views
0

Als Systembenutzer zu wählen, ich einen neuen Benutzer erstellt und gewähren ihm dBA Privilegien: GRANT dba TO user_bdda_adminProjetPL/SQL Impossible eine Tabelle in einem Trigger

Ich versuche, in einen Trigger in die DBA_ROLE_PRIVS Tabelle zu suchen (I didn ‚t alle meinen Code einfügen, fühlen sie sich frei, mir zu sagen, wenn es notwendig ist):

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; 
/

Aber wenn ich versuche, dieses Skript auszuführen, habe ich die folgenden Fehler:

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

bei unterschiedlichen Blick Foren, habe ich festgestellt, dass das Problem im Allgemeinen ist, dass der Benutzer keine Rechte an der Tabelle haben.

Aber wenn ich ausführen, wie mein Benutzer die folgende Zeile allein user_bdda_adminProjet (aus einem Trigger), es funktioniert perfekt

SELECT COUNT(*) FROM DBA_ROLE_PRIVS; 

Außerdem, wenn ich die Zeile in meinem Stecher nur kommentieren, führt sie ohne Fehler, so denke ich, der Fehler ist speziell in dieser Zeile.

Vielen Dank im Voraus für Ihre Hilfe und fühlen Sie sich frei, mir zu sagen, wenn Sie weitere Informationen benötigen.

+0

Warum muss Ihr Auslöser das Datenwörterbuch abfragen? –

Antwort

1

dba ist eine Rolle, kein Privileg.

Berechtigungen, die über eine Rolle erhalten werden, sind in PL/SQL nicht "aktiv". Sie müssen dem Benutzer die Select-Berechtigung für die DBA_ROLE_PRIVS direkt erteilen.

+0

Ich wusste das nicht, danke für die Erklärung! Ich tat dies, wie mein Benutzersystem: 'GRANT SELECT ON DBA_ROLE_PRIVS TO user_bdda_adminProjet;' bekam aber den Fehler „ORA-01031: Unzureichende Berechtigungen“ Ich glaube nicht, dass ich andere Benutzer, die mehr privilegiert bekam als System ... – KrazyMonkey

+0

@KrazyMonkey Sie müssen 'SYSTEM' oder' SYS' sein, um das Privileg zu gewähren –

+0

Ich habe 'GRANT SELECT ON DBA_ROLE_PRIVS TO user_bdda_adminProjet;' als System, aber einen unzureichenden Privilegienfehler erhalten:/ – KrazyMonkey

Verwandte Themen