web-dev-qa-db-ja.com

パッケージに対する権限を持つすべてのユーザーを一覧表示する方法

パッケージに対する権限を持つすべてのユーザーを一覧表示するクエリを探しています。

たとえば、ユーザーSchema_Aは、パッケージB.MyPackageの実行を許可されています。

Role_tab_privs、role_sys_privs、sys.dba_sys_privs、dba_role_privs ...などのビューまたはテーブルをクエリしていますが、探しているものが見つかりません。

9
Delmonte

特権が直接またはロールに付与されている場合、付与は_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_)のように。ピートはおそらくOracleセキュリティの主要な専門家であるため、私が一緒に考え出そうとしているものよりも、起こりうるあらゆる隅々の問題を説明する可能性がはるかに高いです。

15
Justin Cave