web-dev-qa-db-ja.com

ストアドプロシージャの権限を検索するoracleクエリ

ユーザーがストアドプロシージャを実行する特権を持っているかどうかを確認するために実行できるクエリはどれですか。

ユーザーがUserAで、ストアドプロシージャ名がmy_stored_procだとしましょう

UserAmy_stored_procの実行権限があるかどうかを知りたい

UserAは、storedprocの所有者ではありません。他の所有者が彼に許可を与えています。

11
Omnipresent

役割を介して付与を説明するには:

  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'
           )
        )
12
dpbradley

あなたは試すことができます

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'
2
Omnipresent

これは私にとってうまくいきました、私がアクセスできるすべてのSPを見つけたかったのです。

gRANTEE = '______'およびPRIVILEGE = 'EXECUTE'であるUSER_TAB_PRIVSから*を選択します

USER_TAB_PRIVSの列には、GRANTEE、OWNER、GRANTOR、TABLE_NAME(この場合は、SP name))とPRIVILEGEが含まれているため、私の意見ではこれは完璧です。

私の理解では、dpbradleyとOmnipresentの回答は、DBA_ *テーブルにアクセスできないため、通常のユーザーには機能しません。

0
stone1343