Ich muss herausfinden, welche Schemata bereits Ausführungsberechtigung für ein bestimmtes Objekt in einer Oracle 10g db (in diesem Fall ein Paket) gewährt haben. Was ist der einfachste Weg für mich? Gibt es eine eingebaute Funktion, um diese Informationen zur Verfügung zu stellen?Wie überprüfe ich, welche Schemata die EXECUTE-Berechtigung für ein Oracle-Objekt erhalten haben?
6
A
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>';
Ich war eigentlich nach entweder etwas allgemeinere oder ein Paket speziellen Fall ... – MPritchard
Alles ist vergeben! Gutes altes Orakel und seine no-nonsense Benennung von Systemtabellen :) – MPritchard
lol, all_tab_privs ist ein schrecklicher Name für diese Tabelle – Reimius