Comment répertorier tous les utilisateurs qui ont des autorisations sur un package

9

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.

Delmonte
la source

Réponses:

15

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 granteec'est un rôle, vous devrez alors regarder dba_role_privspour 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.

Justin Cave
la source