2009-08-10 8 views

Antwort

6
SELECT grantee 
    FROM all_tab_privs 
WHERE table_name = '<your object name>' 
    AND privilege = 'EXECUTE' 
    AND grantor = '<object owner>'; 

Ja, ich weiß, es sagt "table_name", aber es gilt auch für ausführbare Objekte. Die Tabelle DBA_TAB_PRIVS funktioniert ebenfalls. Sie benötigen entsprechende Berechtigungen (z. B. DBA-Rolle, SELECT ANY TALBE), um aus diesen Ansichten auszuwählen und alle Daten anzuzeigen.

Als Antwort auf Martins Kommentar ... Das oben genannte ist der einfachste Weg, um das zu tun, wonach Sie gefragt haben. Wenn Sie es Pakete beschränken möchten, dies versuchen:

SELECT * FROM all_tab_privs JOIN all_objects ON (table_name = object_name) 
WHERE table_name = '<your object name>' 
    AND object_type = 'PACKAGE' 
    AND privilege = 'EXECUTE' 
    AND grantor = '<object owner>'; 
+0

Ich war eigentlich nach entweder etwas allgemeinere oder ein Paket speziellen Fall ... – MPritchard

+1

Alles ist vergeben! Gutes altes Orakel und seine no-nonsense Benennung von Systemtabellen :) – MPritchard

+0

lol, all_tab_privs ist ein schrecklicher Name für diese Tabelle – Reimius