Cómo enumerar todos los usuarios que tienen subvenciones sobre un paquete

9

Estoy buscando alguna consulta para enumerar todos los usuarios que tienen subvenciones para un paquete.

Por ejemplo, al usuario Schema_A se le ha concedido ejecutar el paquete: B.MyPackage.

Estoy consultando vistas o tablas como: role_tab_privs, role_sys_privs, sys.dba_sys_privs, dba_role_privs ... pero no puedo encontrar lo que estoy buscando.

Delmonte
fuente

Respuestas:

15

Si el privilegio se ha otorgado directamente o a un rol, la concesión aparecerá en DBA_TAB_PRIVS

SELECT grantee, privilege
  FROM dba_tab_privs
 WHERE owner = 'B'
   AND table_name = 'MYPACKAGE'
   AND privilege = 'EXECUTE'

Si se granteetrata de un rol, deberá mirar dba_role_privspara ver qué usuarios (o roles) han recibido ese rol y seguir la cadena si tiene roles otorgados a otros roles. Si necesita tener en cuenta a los usuarios que tienen subvenciones debido a las subvenciones (muy peligrosas) ANY(es decir EXECUTE ANY PROCEDURE), eso requeriría una consulta por separado.

Sin embargo, si desea ser más sofisticado que simplemente hacer una consulta directa dba_tab_privs, probablemente sea mejor que use los scripts de Pete Finnigan como who_has_priv.sql(o who_has_priv_procedure.sql). Es probable que Pete sea el experto líder en seguridad de Oracle, por lo que es mucho más probable que representen cada posible caso de esquina que cualquier cosa que intente improvisar.

Justin Cave
fuente