Answers:
如果特权是直接授予或授予角色的,则授予将显示在 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
,最好使用Pete Finnigan的脚本(如who_has_priv.sql
(或who_has_priv_procedure.sql
))。皮特(Pete)可能是Oracle安全性方面的领先专家,因此,与我试图解决的所有问题相比,这些问题更有可能解决所有可能的极端情况。