it-swarm.com.de

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

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.

9
Delmonte

Wenn das Privileg direkt oder einer Rolle gewährt wurde, wird das Stipendium in DBA_TAB_PRIVS Angezeigt.

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

Wenn grantee eine Rolle ist, müssen Sie sich dba_role_privs Anschauen, um festzustellen, welchen 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) ANY-Zuschüsse (d. H. EXECUTE ANY PROCEDURE) Berechtigungen haben, ist eine separate Abfrage erforderlich.

Wenn Sie jedoch anspruchsvoller werden möchten, als nur eine direkte Abfrage für dba_tab_privs Durchzuführen, ist es wahrscheinlich besser, eines von Pete Finnigans Skripte wie das who_has_priv.sql ( oder who_has_priv_procedure.sql). 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.

15
Justin Cave