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 grantee
es sich um eine Rolle handelt, müssen Sie überprüfen, dba_role_privs
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 (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_privs
durchzufü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.