1. ホーム
  2. sql

[解決済み] あるユーザーが受けたすべてのグラントを一覧表示するにはどうすればよいですか?

2022-10-05 06:08:46

質問

Oracle DB上のすべてのグラントを確認する必要があります。

TOADの機能を使ってスキーマを比較しましたが、魅力的なグラントなどは表示されないので質問させていただきました。

Oracle DBのすべてのグラントを一覧表示するにはどうしたらよいでしょうか。

どのように解決するのですか?

テーブルへの直接のグラントだけでなく(例:ロール経由のグラント、select any tableなどのシステム特権)、それ以上のものが必要な場合は、以下の追加クエリーをご利用ください。

あるユーザーのシステム特権。

SELECT PRIVILEGE
  FROM sys.dba_sys_privs
 WHERE grantee = <theUser>
UNION
SELECT PRIVILEGE 
  FROM dba_role_privs rp JOIN role_sys_privs rsp ON (rp.granted_role = rsp.role)
 WHERE rp.grantee = <theUser>
 ORDER BY 1;

テーブル/ビューへの直接グラント。

SELECT owner, table_name, select_priv, insert_priv, delete_priv, update_priv, references_priv, alter_priv, index_priv 
  FROM table_privileges
 WHERE grantee = <theUser>
 ORDER BY owner, table_name;

テーブル/ビューへの間接的なグラントです。

SELECT DISTINCT owner, table_name, PRIVILEGE 
  FROM dba_role_privs rp JOIN role_tab_privs rtp ON (rp.granted_role = rtp.role)
 WHERE rp.grantee = <theUser>
 ORDER BY owner, table_name;