Si le privilège a été accordé directement ou à un rôle, la subvention apparaîtra dans DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
Si grantee
c'est un rôle, vous devrez alors regarder dba_role_privs
pour voir quels utilisateurs (ou rôles) ont reçu ce rôle et suivre la chaîne si vous avez des rôles accordés à d'autres rôles. Si vous devez tenir compte des utilisateurs qui ont des autorisations en raison des octrois (très dangereux) ANY
(c.-à-d. EXECUTE ANY PROCEDURE
), Cela nécessiterait une requête distincte.
Si vous voulez devenir plus sophistiqué que simplement faire une simple requête contre dba_tab_privs
, cependant, il vaut probablement mieux utiliser l'un des scripts de Pete Finnigan comme le who_has_priv.sql
(ou who_has_priv_procedure.sql
). Pete est probablement le principal expert en matière de sécurité Oracle, ils sont donc beaucoup plus susceptibles de prendre en compte tous les cas de coin possibles que tout ce que j'essaierais de bricoler ensemble.