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 grantee
trata de un rol, deberá mirar dba_role_privs
para 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.