So listen Sie alle Benutzer auf, die Berechtigungen für ein Paket haben

9

Ich suche nach einer Abfrage, um alle Benutzer aufzulisten, die Berechtigungen für ein Paket haben.

Beispielsweise wurde dem Benutzer Schema_A die Berechtigung erteilt, das Paket B.MyPackage auszuführen.

Ich frage Ansichten oder Tabellen ab wie: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... aber ich kann nicht finden, wonach ich suche.

Del monte
quelle

Antworten:

15

Wenn das Privileg direkt oder einer Rolle gewährt wurde, wird die Berechtigung in angezeigt DBA_TAB_PRIVS

SELECT grantee, privilege
  FROM dba_tab_privs
 WHERE owner = 'B'
   AND table_name = 'MYPACKAGE'
   AND privilege = 'EXECUTE'

Wenn granteees sich um eine Rolle handelt, müssen Sie überprüfen, dba_role_privswelchen Benutzern (oder Rollen) diese Rolle zugewiesen wurde, und der Kette folgen, wenn Ihnen Rollen für andere Rollen zugewiesen wurden. Wenn Sie Benutzer berücksichtigen müssen, die aufgrund der (sehr gefährlichen) ANYZuschüsse (dh EXECUTE ANY PROCEDURE) Zuschüsse haben, ist eine separate Abfrage erforderlich.

Wenn Sie jedoch anspruchsvoller werden möchten, als nur eine direkte Abfrage dba_tab_privsdurchzuführen, ist es wahrscheinlich besser, eines von Pete Finnigans Skripten wie das who_has_priv.sql(oder who_has_priv_procedure.sql) zu verwenden. Pete ist wahrscheinlich der führende Experte für Oracle-Sicherheit, daher sind diese für jeden möglichen Eckfall viel wahrscheinlicher als alles, was ich versuchen würde, zusammenzuschustern.

Justin Cave
quelle