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オブジェクトの名前(テーブル、インデックス、シーケンスなど)です。 -
PRIVILEGEGRANTEEに割り当てられた特権です 関連するオブジェクトの場合。
最後に、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をご覧ください。