如何列出所有获得赠款的用户


9

我正在寻找一些查询,以列出对某个软件包有资助的所有用户。

例如,已授予用户Schema_A执行包:B.MyPackage。

我正在查询视图或表,例如:role_tab_privs,role_sys_privs,sys.dba_sys_privs,dba_role_privs ...,但找不到所需的内容。

Answers:


15

如果特权是直接授予或授予角色的,则授予将显示在 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安全性方面的领先专家,因此,与我试图解决的所有问题相比,这些问题更有可能解决所有可能的极端情况。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.