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 granteefor uma função, você precisará dba_role_privsverificar 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_privsPoré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.