web-dev-qa-db-fra.com

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

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.

9
Delmonte

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.

15
Justin Cave