Если привилегия была предоставлена непосредственно или роли, грант появится в DBA_TAB_PRIVS
SELECT grantee, privilege
FROM dba_tab_privs
WHERE owner = 'B'
AND table_name = 'MYPACKAGE'
AND privilege = 'EXECUTE'
Если granteeэто роль, вам нужно будет посмотреть, dba_role_privsкакие пользователи (или роли) получили эту роль, и следовать цепочке, если у вас есть роли, предоставленные другим ролям. Если вам нужно учитывать пользователей, которые имеют гранты из-за (очень опасных) ANYгрантов (то есть EXECUTE ANY PROCEDURE), для этого потребуется отдельный запрос.
Если вы хотите стать более сложным, чем просто выполнять простой запрос dba_tab_privs, вам, вероятно, лучше использовать сценарии Пита Финнигана, такие как who_has_priv.sql(или who_has_priv_procedure.sql). Пит, вероятно, является ведущим экспертом в области безопасности Oracle, поэтому они с большей вероятностью будут учитывать все возможные варианты, чем все, что я пытался бы объединить.