パッケージに対する権限を持つすべてのユーザーを一覧表示するクエリを探しています。
たとえば、ユーザーSchema_Aは、パッケージB.MyPackageの実行を許可されています。
Role_tab_privs、role_sys_privs、sys.dba_sys_privs、dba_role_privs ...などのビューまたはテーブルをクエリしていますが、探しているものが見つかりません。
特権が直接またはロールに付与されている場合、付与は_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セキュリティの主要な専門家であるため、私が一緒に考え出そうとしているものよりも、起こりうるあらゆる隅々の問題を説明する可能性がはるかに高いです。