Je recherche une requête pour répertorier tous les utilisateurs qui ont des subventions sur un package.
Par exemple, l'utilisateur Schema_A a été autorisé à exécuter le package: B.MyPackage.
J'interroge des vues ou des tables comme: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... mais je ne trouve pas ce que je cherche.
Si le privilège a été accordé directement ou à un rôle, l'octroi apparaîtra dans DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
Si le grantee
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 subventions en raison des subventions (très dangereuses) ANY
(c'est-à-dire EXECUTE ANY PROCEDURE
), cela nécessiterait une requête distincte.
Si vous voulez devenir plus sophistiqué que de simplement effectuer une requête directe sur dba_tab_privs
, cependant, vous feriez probablement mieux d'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 d'angle possibles que tout ce que j'essaierais de bricoler ensemble.