Oracle内のすべてのユーザー特権の取得は、主にサーバー内での役割と特権の構成に応じて、基本的なSQLクエリを使用する単純なタスクから高度なスクリプトまでさまざまです。
この簡単なチュートリアルでは、基本的なSQLクエリメソッドと高度なスクリプトメソッドの両方について説明するため、セットアップの複雑さに関係なく問題は発生しません。
DBA/USER特権ビューのクエリ
Oracleのデータベース管理者(DBA)は、クエリを実行するだけで、DBA_SYS_PRIVS
の行を表示できます。 、DBA_TAB_PRIVS
、およびDBA_ROLE_PRIVS
system
に関連するユーザー権限に関する情報を取得する 、tables
、およびroles
それぞれ。
たとえば、すべてのsystem
を表示したいDBA すべてのユーザーに付与された特権は、次のクエリを発行します:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS
ビューには3列のデータが含まれています:
-
GRANTEE
特権が割り当てられた名前、役割、またはユーザーです。 -
PRIVILEGE
割り当てられる特権です。 -
ADMIN_OPTION
付与された特権にADMIN
も含まれるかどうかを示します オプション。
直接を使用しているユーザーを特定する table
へのアクセスを許可する DBA_TAB_PRIVS
を使用します ビュー:
SELECT
*
FROM
DBA_TAB_PRIVS;
このクエリから返される列の詳細については、公式ドキュメントを確認できますが、重要な列は次のとおりです。
-
GRANTEE
アクセスが許可されているユーザーの名前です。 -
TABLE_NAME
オブジェクトの名前(テーブル、インデックス、シーケンスなど)です。 -
PRIVILEGE
GRANTEE
に割り当てられた特権です 関連するオブジェクトの場合。
最後に、DBA_ROLE_PRIVS
にクエリを実行します ビューにはほとんど同じ情報がありますが、roles
に適用できます 代わりに、GRANTED_ROLE
列は問題の役割を指定します:
SELECT
*
FROM
DBA_ROLE_PRIVS;
DBAアクセスが不可能または必要でない場合は、上記のクエリを少し変更して、現在のユーザーのみの権限を表示することもできます。 。
これは、代わりにUSER_
をクエリすることによって行われます。 上記のDBA_
のバージョン ビュー。したがって、DBA_SYS_PRIVS
を見る代わりに USER_SYS_PRIVS
にクエリを実行します 、そのように:
SELECT
*
FROM
USER_SYS_PRIVS;
USER_
以降 特権ビューは、実質的にDBA_
と同じです。 対応するものですが、現在のユーザーにのみ固有であり、返されるデータのタイプと列名はすべて、DBA_
をクエリする場合と同じです。 内観。
上記の方法は基本的なシステム構成では機能しますが、多くのロールが存在し、他のロールにロール権限を付与する場合など、Oracleでは問題が発生し始めます。 DBA_
以降 およびUSER_
特権ビューにはGRANTEES
のみが表示されます 直接割り当て アクセス、多くの場合、他の役割を通じて継承された特権は簡単には表示されません。
これを解決するには、PeteFinniganの信頼できる作業や彼のfind_all_privs.sql
などの高度なスクリプトを使用することをお勧めします。 脚本。また、DavidArthurによる修正バージョンfind_all_privs2.sql
を選択することもできます。 。
いずれの場合も、これらのスクリプトの目的は、再帰的にできるようにすることです。 特定のユーザーに付与されているすべての特権を見つけます。スクリプトがrole
を見つけたとき ユーザーの場合、他のロールとそのロールに付与されている特権を再帰的に検索し、チェーンの最後までプロセスを繰り返します。スクリプトの結果は、必要に応じて画面またはファイルに出力できます。
これらのスクリプトとその使用法の詳細については、petefinnigan.comをご覧ください。