Se o privilégio foi concedido diretamente ou a uma função, a concessão aparecerá em DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
Se grantee
for uma função, você precisará dba_role_privs
verificar quais usuários (ou funções) receberam essa função e seguir a cadeia se você tiver funções concedidas a outras funções. Se você precisar dar conta de usuários que tenham concessões por causa das concessões (muito perigosas) ANY
(ou seja EXECUTE ANY PROCEDURE
), isso exigiria uma consulta separada.
dba_tab_privs
Porém, se você deseja se sofisticar mais do que simplesmente fazer uma consulta direta , provavelmente é melhor usar os scripts de Pete Finnigan como o who_has_priv.sql
(ou who_has_priv_procedure.sql
). Pete é provavelmente o principal especialista em segurança da Oracle, portanto, é muito mais provável que isso represente todos os casos possíveis do que qualquer coisa que eu tentaria reunir.