ユーザーがストアドプロシージャを実行する特権を持っているかどうかを確認するために実行できるクエリはどれですか。
ユーザーがUserA
で、ストアドプロシージャ名がmy_stored_proc
だとしましょう
UserA
にmy_stored_proc
の実行権限があるかどうかを知りたい
UserAは、storedprocの所有者ではありません。他の所有者が彼に許可を与えています。
役割を介して付与を説明するには:
select grantee, table_name, privilege
from dba_tab_privs
where
table_name = 'my_stored_proc'
and
owner = 'ownerOfObject'
and
(grantee = 'userA'
or
grantee in
(select granted_role
from dba_role_privs
where grantee = 'userA'
)
)
あなたは試すことができます
select ap.*
from All_Procedures ap
where ap.owner = 'UserA'
これは、UserAが所有者であるかどうかを通知するだけです。所有者でなくても、UserAは引き続き権限を持つことができると思います。それを確認する方法がわかりません。
編集:チェックする他のテーブルは
USER_SYS_PRIVS USER_TAB_PRIVS USER_ROLE_PRIVS ROLE_SYS_PRIVS ROLE_TAB_PRIVS
私はめったにこれらを照会したことがないので、あなたが探しているものを見つける方法を正確にわかりませんが、私はこれらから始めます。
とった...
SELECT * FROM DBA_TAB_PRIVS A WHERE GRANTEE = 'UserA' AND GRANTOR = 'someoneelse' and privilege = 'EXECUTE'
これは私にとってうまくいきました、私がアクセスできるすべてのSPを見つけたかったのです。
gRANTEE = '______'およびPRIVILEGE = 'EXECUTE'であるUSER_TAB_PRIVSから*を選択します
USER_TAB_PRIVSの列には、GRANTEE、OWNER、GRANTOR、TABLE_NAME(この場合は、SP name))とPRIVILEGEが含まれているため、私の意見ではこれは完璧です。
私の理解では、dpbradleyとOmnipresentの回答は、DBA_ *テーブルにアクセスできないため、通常のユーザーには機能しません。