プライマリ・コンテンツに移動
Oracle® Database Vault管理者ガイド
12cリリース1 (12.1)
B71286-08
目次へ移動
目次
索引へ移動
索引

前
次

4 権限分析を実行した権限の使用の確認

権限分析では、ユーザーが使用中および未使用の権限とロールが動的に分析されます。

内容は次のとおりです。

権限分析とは

Oracle Database Vault with Oracle Database Release 12cには、権限分析と呼ばれる機能が組み込まれており、アプリケーションおよびデータベース操作のセキュリティを向上させることができます。

内容は次のとおりです。

権限分析について

権限分析では、ユーザー・アカウントまたはデータベースが長期にわたって使用する権限およびロールの動的(静的ではない)分析が実行されます。

動的分析であるため、実際に使用された、実際の権限およびロールが取得されます。

権限分析は、実行時にデータベース・ユーザーおよびアプリケーションによって使用される権限を取得します。これにより、使用されていない権限付与およびその他の変更を取り消して、ユーザーに必要なアクセスをより効果的に反映することができます。権限分析は、最小限の権限履行を実装するために必要となる作業を簡略化します。

Oracle Databaseカーネル内で実行され、使用されている権限と使用されていない権限を特定することによってアプリケーションの攻撃面を縮小し、操作のセキュリティを強化できるようにします。権限分析は、Oracle Database Release 12cをインストールした後、追加の構成手順を実行しなくても使用できます。

権限分析サポートは、Oracle Enterprise Manager Cloud Control 12cリリース3プラグイン・アップデート1 (12.1.0.3)から利用できます。

権限分析でのプリコンパイル済データベース・オブジェクトの処理

権限分析は、プリコンパイル済データベース・オブジェクトに使われた権限を取得するために使用できます。

これらのオブジェクトの例としては、PL/SQLパッケージ、プロシージャ、ファンクション、ビュー、トリガ、Javaクラスおよびデータなどがあります。

このような権限は、ストアド・プロシージャがコールされると実行時に使用されないことがあるため、データベース全体の取得について結果を生成するときに、実行時に取得された権限とともに収集されます。権限は、プリコンパイル済データベース・オブジェクトまたは実行時取得で使用されていない場合、使用されていない権限として扱われ、実行時取得名の下に保存されます。権限がプリコンパイル済データベース・オブジェクトに使用されている場合は、取得名ORA$DEPENDENCYの下に保存されます。権限が実行時に取得された場合は、実行時取得名の下に保存されます。プリコンパイル済データベース・オブジェクトと実行時使用の両方について使用されている権限を把握する場合は、ORA$DEPENDENCYと実行時の両方の取得を問い合せる必要があります。使用されていない権限の場合、実行時取得名で問い合せるだけです。

権限分析を使用できるプリコンパイル済オブジェクトの詳細なリストを確認するには、ALL_DEPENDENCIESデータ・ディクショナリ・ビューのTYPE列を問い合せます。

権限分析を実行できるユーザー

権限分析を使用するには、CAPTURE_ADMINロールが付与されている必要があります。

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用して、権限取得を管理します。権限分析から提供されるデータ・ディクショナリ・ビューを使用して、権限の使用を分析します。

権限分析のタイプ

様々なタイプの権限分析ポリシーを作成して、特定の目的を実現できます。

  • ロールベースの権限使用の取得。ロールのリストを提供する必要があります。リストのロールがデータベース・セッションで有効な場合、そのセッションの使用されている権限が取得されます。

  • コンテキストベースの権限使用の取得。SYS_CONTEXT関数でのみ、ブール式を指定する必要があります。条件がTRUEと評価されると、使用されている権限が取得されます。

  • ロールおよびコンテキストベースの権限使用の取得。有効なロールのリストと条件のSYS_CONTEXTブール式の両方を指定する必要があります。このようなロールのいずれかがセッションで有効であり、指定されたコンテキスト条件が満たされると、権限分析によって権限の使用の取得が開始されます。

  • データベース全体の権限の取得。権限分析ポリシーにタイプを指定しない場合、ユーザーSYSの権限を除いて、データベースの使用されている権限が取得されます。(条件なしで有効であるため、無条件の分析とも呼ばれます。)

次の制約に注意してください:

  • 一度に有効にできる権限分析ポリシーは1つのみです。唯一の例外は、ロールやコンテキスト属性ドリブン分析ポリシーなどのデータベース全体以外の権限分析ポリシーと同時にデータベース全体の権限分析ポリシーを有効化できることです。

  • SYSユーザーの権限は分析できません。

  • 権限分析には権限への付与パスが表示されますが、どの付与パスを維持するかは推奨されません。

  • ロール、ユーザーまたはオブジェクトが削除されると、権限分析データ・ディクショナリ・ビューでこれらについての権限取得を反映する値も削除されます。

権限分析の利点およびユースケース

権限の分析は、使われていない付与権限を見つけるのに有効です。

内容は次のとおりです。

アプリケーションに不必要に付与された権限

データベースにアクセスするアカウントの権限は、アプリケーションに絶対に必要な権限だけに制限する必要があります。

ただし、特にサード・パーティがアプリケーションを開発する場合、必要以上の権限が便宜上アプリケーション接続プール・アカウントに付与される可能性があります。さらに、一部の開発者は、システム権限およびアプリケーションのオブジェクト権限をPUBLICロールに付与します。

たとえば、アプリケーション・データから選択してアプリケーション・プロシージャを実行するには、システム権限SELECT ANY TABLEおよびEXECUTE ANY PROCEDUREをアプリケーション・アカウントappsysに付与します。これで、appsysは、意図しない場合でもアプリケーション以外のデータにアクセスできます。この状況で、ユーザーappsysで権限の使用状況を分析し、結果に基づき必要に応じて権限を取り消したり付与できます。

セキュアなアプリケーションの開発

アプリケーションの開発段階では、いくつもの強力なシステム権限とロールをアプリケーション開発者に付与する管理者もいます。

管理者がこのような形で権限を付与するのは、開発段階ではアプリケーション開発者にどのような権限が必要か分からないことがあるからです。

アプリケーションが開発されて稼働すると、アプリケーション開発者に必要な権限とそうでない権限が明確になります。この時点で、セキュリティ管理者は不必要な権限の取消しを開始できます。ただし、アプリケーションが現在問題なく稼働しているため、アプリケーション開発者がこの考えに抵抗する場合があります。管理者は、権限分析を使用して、アプリケーションで使用されている各権限を調べることで、権限を取り消した場合に、アプリケーションの稼働を継続できるかを確認できます。

たとえば、app_ownerは、データベースに接続するアプリケーションのアプリケーション・データベース・ユーザーです。ユーザーapp_ownerは、OESHおよびPMスキーマの表を問い合せる必要があります。これらのスキーマの各表のSELECTオブジェクト権限を付与するかわりに、セキュリティ管理者は、SELECT ANY TABLE権限をapp_ownerに付与します。しばらくしてから、新しいスキーマHRが作成され、機密データがHR.EMPLOYEES表に挿入されます。ユーザーapp_ownerにはSELECT ANY TABLE権限があるため、この表を問い合せて機密データにアクセスできますが、これはセキュリティ上問題があります。システム権限(特にANY権限)を付与するかわりに、特定の表に対するオブジェクト権限を付与する方がはるかによい方法です。

マルチテナント環境による権限分析への影響について

マルチテナント環境での権限分析ポリシーの作成および使用が可能です。

マルチテナント環境を使用している場合は、ルートか個々のPDBのどちらかで権限分析ポリシーを作成できます。権限分析ポリシーは、そのポリシーが作成されたコンテナのルートで使用される権限、またはPDB内で使用される権限のどちらかにのみ適用されます。マルチテナント環境全体にグローバルに適用することはできません。

関連項目:

マルチテナント・コンテナ・データベース(CDB)の詳細は、『Oracle Database管理者ガイド』

権限分析ポリシーの作成および管理

SQL*PlusまたはEnterprise Manager Cloud Controlのいずれかで権限分析ポリシーの作成および管理を行うことができます。

内容は次のとおりです。

権限分析ポリシーの作成および管理について

Oracle Enterprise Manager Cloud ControlまたはDBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用して、権限を分析できます。

そのためには、CAPTURE_ADMINロールが付与されている必要があります。DBMS_PRIVILEGE_CAPTUREパッケージでは、権限分析ポリシーを作成、有効化、無効化および削除できます。DBA_*ビューで表示できる権限の使用状況を示すレポートも生成します。

関連項目:

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

権限分析の管理の一般手順

権限分析の一般的な一連の手順に従う必要があります。

  1. 権限分析ポリシーを定義します。
  2. 権限分析ポリシーを有効化します。

    このステップでポリシーが定義した権限使用の記録が始まります。

  3. データの収集に十分な期間が経過したら、権限分析ポリシーの権限使用記録を無効にします。

    この手順でポリシーの権限使用の取得が終了します。

  4. 権限分析の結果を生成します。

    この手順では、「権限分析ポリシーおよびレポート・データ・ディクショナリ・ビュー」で説明するデータ・ディクショナリ・ビューに結果が書き込まれます。

  5. オプションで、権限分析ポリシーを無効化してから削除します。

    権限分析ポリシーを削除すると、ポリシーによって取得されたデータが削除されます。

権限分析ポリシーの作成

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシーを作成できます。

内容は次のとおりです。

権限分析ポリシーの作成について

ポリシーが作成されると、Oracleデータ・ディクショナリおよびSYSスキーマに配置されます。

ただし、それを削除できるのは、ポリシーを作成したユーザーとユーザーSYSです。権限使用の分析を開始できるように、ポリシー作成後に手動で有効にする必要があります。Oracle Enterprise Manager Cloud Controlを使用する場合は、Enterprise Managerリリース12.1.0.3以上を使用する必要があります。

Enterprise Manager Cloud Controlの権限分析ポリシーの作成

Cloud Controlで権限分析ポリシーを作成します。

  1. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 「セキュリティ」メニューから、「権限分析」を選択します。
  3. 「権限分析」ページで、「ポリシー」から「作成」を選択します。

    「権限分析: ポリシーの作成」ページが表示されます。

  4. 次の情報を入力します。
    • ポリシー: 権限分析ポリシーの一意の名前を入力します。DBA_PRIV_CAPTURESビューのNAME列を問い合せて、既存のポリシーの名前を確認できます。名前には空白を使用でき、最大128文字で指定します。

    • 説明: オプションとして、ポリシーの説明を最大1024文字で入力します。

    • スコープ: 次のタイプから選択します。

      • データベース: ユーザーSYSの権限を除いて、データベース全体で使用されている権限がすべて取得されます。

      • ロール: 指定する1つ以上のロールの権限が取得されます。リストのロールがデータベース・セッションで有効な場合、そのセッションの使用されている権限が取得されます。このオプションを選択すると、「ポリシーの作成」ページに「使用可能なロール」リストが表示されます。

      • コンテキスト: 指定した条件がTRUEと評価された場合に権限が取得されます。このオプションを選択すると、「ポリシーの取得」ページに「条件」フィールドが表示されます。条件を構築するには、このフィールドの右にある編集アイコンを選択して「ポリシー式ビルダー」ダイアログ・ボックスを表示します。

      • ロールとコンテキスト: コンテキスト条件がTRUEと評価された場合に指定されたロールのいずれかの権限が取得されます。このオプションを選択すると、使用可能なロールのリストと「条件」フィールドの両方が表示されます。

  5. 「OK」をクリックします。

    新しいポリシーが「権限分析」ページの「ポリシー」領域に表示されます。

  6. 権限使用の取得を開始できるようにポリシーを有効にするには、「権限分析ポリシー」メイン・ページに戻り、「ポリシー」でポリシーを選択して「取得の開始」をクリックします。

DBMS_PRIVILEGE_CAPTUREによる権限分析ポリシーの作成

DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャは、権限分析ポリシーを作成します。

権限分析ポリシーを作成した後、DBA_PRIV_CAPTURESデータ・ディクショナリ・ビューのリストで確認できます。

  • DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャに次の構文を使用します。

    DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
       name              VARCHAR2, 
       description       VARCHAR2 DEFAULT NULL, 
       type              NUMBER DEFAULT DBMS_PRIVILEGE_CAPTURE.G_DATABASE, 
       roles             ROLE_NAME_LIST DEFAULT ROLE_NAME_LIST(), 
       condition         VARCHAR2 DEFAULT NULL);
    

次のように指定します。

  • name: 作成する権限分析ポリシーの名前を指定します。この名前は必ず一意にし、128文字以下にしてください。名前には空白を使用できますが、参照するときは必ず一重引用符でその名前を囲む必要があります。既存のポリシーの名前を確認するには、DBA_PRIV_CAPTURESビューのNAME列を問い合せます。

  • description: 大/小文字混在で最大1024文字で権限分析ポリシーの目的を説明します。オプションです。

  • type: 取得条件のタイプを指定します。typeパラメータを省略する場合、デフォルトはDBMS_PRIVILEGE_CAPTURE.G_DATABASEとなります。オプションです。

    次のいずれかのタイプを入力します。

    • DBMS_PRIVILEGE_CAPTURE.G_DATABASE: ユーザーSYSの権限を除いて、データベース全体で使用されている権限をすべて取得します。

    • DBMS_PRIVILEGE_CAPTURE.G_ROLE: ロールが有効になっているセッションの権限を取得します。typeパラメータのDBMS_PRIVILEGE_CAPTURE.G_ROLEを入力する場合、rolesパラメータも指定する必要があります。ロールが複数の場合、各ロール名をカンマで分けます。

    • DBMS_PRIVILEGE_CAPTURE.G_CONTEXT: conditionパラメータで指定された条件がTRUEと評価されているセッションの権限を取得します。typeパラメータのDBMS_PRIVILEGE_CAPTURE.G_CONTEXTを入力する場合、conditionパラメータも指定する必要があります。

    • DBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXT: ロールが有効になっており、コンテキスト条件がTRUEと評価されているセッションの権限を取得します。typeパラメータのDBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXTを入力する場合、rolesconditionの両方のパラメータも指定する必要があります。

  • roles: 使用された権限が分析されるロールを指定します。つまり、指定されたロールのいずれかの権限が使用される場合、権限が分析されます。type引数にDBMS_PRIVILEGE_CAPTURE.G_ROLEまたはDBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXTを指定する場合、この引数を指定する必要があります。入力する各ロールは、データベースに存在する必要があります。(DBA_ROLESデータ・ディクショナリ・ビューを問い合せて、既存のロールを確認できます。)複数のロールでは、可変長配列型role_name_listを使用してロール名を入力します。最大10のロールを指定できます。

    たとえば、2つのロールを指定するには、次のようにします。

    roles => role_name_list('role1', 'role2'),
    
  • condition: 最大4000文字でブール式を指定します。type引数にDBMS_PRIVILEGE_CAPTURE.G_CONTEXTまたはDBMS_PRIVILEGE_CAPTURE.G_ROLE_AND_CONTEXTを指定する場合、この引数を指定する必要があります。関係演算子(==、>、>=<<=<>BETWEENおよびIN)を使用したSYS_CONTEXT式のみがこのブール式で許可されます。

    condition式の構文は次のとおりです。

    predicate::= SYS_CONTEXT(namespace, attribute) relop constant_value |
                 SYS_CONTEXT(namespace, attribute)
                 BETWEEN 
                 constant_value 
                 AND constant_value | SYS_CONTEXT(namespace, attribute) 
                 IN {constant_value (,constant_value)* }
    
    relop::= = | < | <= | > | >= | <>
    
    context_expression::= predicate | (context_expression) 
                 AND (context_expression) | (context_expression) 
                 OR (context_expression )
    

    たとえば、conditionを使用してIPアドレス192.0.2.1を指定するには、次のようにします。

    condition => 'SYS_CONTEXT(''USERENV'', ''IP_ADDRESS'')=''192.0.2.1''';
    

* 必要な数の定数値を追加できます(たとえば、IN {constant_value1}IN {constant_value1, constant_value2, constant_value3}など)。

「権限分析ポリシーの有効化」の説明に従って、権限分析ポリシーを作成した後に有効化する必要があります。

権限分析ポリシーの例

様々な権限分析ポリシーを作成できます。

内容は次のとおりです。

例: データベース全体の権限の権限分析

DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREは、データベース全体の権限を分析するために使用できます。

例4-1は、データベースのすべての権限の使用を記録するために、DBMS_PRIVILEGE_CAPTUREパッケージを使用して権限分析ポリシーを作成し、有効化する方法を示しています。

例4-1 データベース全体の権限の権限分析

BEGIN
 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name          => 'db_wide_capture_pol',
  description   => 'Captures database-wide privileges',
  type          => DBMS_PRIVILEGE_CAPTURE.G_DATABASE);
END;
/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('db_wide_capture_pol');

例: 2つのロールの権限の使用状況の権限分析

DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャは、複数ロールの権限の使用状況の分析に使用できます。

例4-2は、2つのロールの権限の使用状況の分析方法を示しています。

例4-2 2つのロールの権限の使用状況の権限分析

BEGIN
 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name          => 'dba_roles_capture_pol',
  description   => 'Captures DBA and LBAC_DBA role use',
  type          => DBMS_PRIVILEGE_CAPTURE.G_ROLE,
  roles         => role_name_list('dba', 'lbac_dba'));
END;
/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('dba_roles_capture_pol');

例: SQL*Plus使用中の権限の権限分析

DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャは、分析用に権限を取得するために使用できます。

例4-3は、SQL*Plusの実行に使用される権限の分析方法を示しています。

例4-3 SQL*Plus使用中の権限の権限分析

BEGIN
 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name             => 'sqlplus_capture_pol',
  description      => 'Captures privilege use during SQL*Plus use',
  type             => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
  condition        => 'SYS_CONTEXT(''USERENV'', ''MODULE'')=''sqlplus''');
END;
/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('sqlplus_capture_pol');

例: SQL*Plusアクセス中のPSMITH権限の権限分析

DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREは、ユーザーがSQL*Plusを実行している時のユーザー・アクセス分析に使用できます。

例4-4は、SQL*Plusの実行時にセッション・ユーザーPSMITHが使用する権限の分析方法を示しています。

例4-4 SQL*Plusアクセス中のPSMITH権限の権限分析

BEGIN
 DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name         => 'psmith_sqlplus_analysis_pol',
  description  => 'Analyzes PSMITH role priv use for SQL*Plus module',
  type         => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
  condition    => 'SYS_CONTEXT(''USERENV'', ''MODULE'')=''sqlplus'' 
                  AND SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''PSMITH''');
END;
/
EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('psmith_sqlplus_analysis_pol');

権限分析ポリシーの有効化

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシーを有効化できます。

内容は次のとおりです。

権限分析ポリシーの有効化について

権限分析ポリシーを作成したら、そのポリシーを有効化する必要があります。

有効にすると、条件を満たす場合に権限分析ポリシーが権限の使用状況の記録を開始します。任意の時点で、データベースの1つの権限分析ポリシーのみ有効化できます。唯一の例外は、タイプDBMS_PRIVILEGE_CAPTURE.G_DATABASEの権限分析ポリシーを異なるタイプの権限分析と同時に有効化できることです。

データベースの再起動は、権限分析のステータスを変更しません。たとえば、データベースの停止前に権限分析ポリシーを有効化すると、このポリシーは、データベースの停止後および再起動後に継続して有効です。

Cloud Controlによる権限分析ポリシーの有効化

Cloud Controlを使用して権限分析ポリシーを有効化します。

  1. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、Oracle Database 2日でデータベース管理者を参照してください。

  2. 「セキュリティ」メニューから、「権限分析」を選択します。
  3. ポリシーから、有効化したいポリシーを選択します。
  4. 「取得の開始」ボタンを選択します。
  5. 「権限分析: 取得の開始」ダイアログ・ボックスで、権限分析ポリシーを開始する時間を指定します。

    ポリシーを今すぐに実行する場合は、「即時」を選択します。ポリシーを後で実行するには、「後で」を選択してから、ポリシーを開始する時、分、秒およびタイムゾーンを指定します。

  6. 「OK」をクリックします

DBMS_PRIVILEGE_CAPTUREによる権限分析ポリシーの有効化

DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTUREプロシージャは、権限ポリシーを有効にして、その取得実行名を作成します。

実行名では、取得が行われる期間を定義します。
  1. 既存の権限分析ポリシーおよびそれらが現在有効かどうかを確認するために、DBA_PRIV_CAPTURESデータ・ディクショナリ・ビューのNAMEおよびENABLED列に問い合せます。
  2. DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTUREプロシージャを実行して、ポリシーを有効にし、必要に応じて取得実行の名前を作成します。

    たとえば、権限分析ポリシーlogon_users_analysisを有効にするには、次のようにします。

    BEGIN
      DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (
        name     => 'logon_users_analysis_pol',
        run_name => 'logon_users_04092016');
    END;
    /

権限分析ポリシーの無効化

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシーを無効化できます。

内容は次のとおりです。

権限分析ポリシーの無効化について

権限分析レポートを生成する前に、権限分析ポリシーを無効化する必要があります。

ポリシーを無効化すると、権限は記録されなくなります。権限分析ポリシーの無効化は、権限分析ポリシーの無効化の前後にログオンしたユーザーに対して直接有効になります。

Cloud Controlによる権限分析ポリシーの無効化

Cloud Controlを使用して権限分析ポリシーを無効化できます。

  1. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、Oracle Database 2日でデータベース管理者を参照してください。

  2. 「セキュリティ」メニューから、「権限分析」を選択します。
  3. 「ポリシー」から、無効化したいポリシーを選択します。
  4. 「取得の停止」ボタンを選択します。
  5. 「権限分析」:「取得の停止」ダイアログ・ボックスで、権限分析ポリシーを停止する時間を指定します。

    ポリシーを今すぐに停止する場合は、「即時」を選択します。ポリシーを後で停止するには、「後で」を選択してから、ポリシーを停止する時、分、秒およびタイムゾーンを指定します。

  6. 「OK」をクリックします

DBMS_PRIVILEGE_CAPTUREによる権限分析ポリシーの無効化

DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTUREプロシージャは、権限分析ポリシーを無効にします。

  1. 既存の権限分析ポリシーおよびそれらが現在無効かどうかを確認するために、DBA_PRIV_CAPTURESデータ・ディクショナリ・ビューのNAMEおよびENABLED列に問い合せます。
  2. DBMS_PRIVILEGE_CAPTURE.DISBLE_CAPTUREプロシージャを実行して、ポリシーを有効にします。

    たとえば、権限分析ポリシーlogon_users_analysisを無効にするには、次のようにします。

    EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('logon_users_analysis_pol');

権限分析レポートの生成

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシー・レポートを生成できます。

内容は次のとおりです。

権限分析レポートの生成について

権限分析ポリシーが無効になると、レポートを生成できます。

Enterprise Manager Cloud Controlでは、「権限分析」ページの「アクション」メニューからレポートを参照でき、ここから、必要に応じてロールおよび権限の取消しと再付与を行います。レポート結果をSQL*Plusに表示するには、「権限分析ポリシーおよびレポート・データ・ディクショナリ・ビュー」のデータ・ディクショナリ・ビューを問い合せます。権限分析プロセス中に権限を使用してレポートを生成する前に取り消す場合、権限付与パスなしで権限が使用された権限として引き続きレポートされます。

Cloud Controlによる権限分析レポートの生成

Cloud Controlを使用すると、権限分析レポートを生成できます。

  1. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、Oracle Database 2日でデータベース管理者を参照してください。

  2. 「セキュリティ」メニューから、「権限分析」を選択します。
  3. 「ポリシー」から、レポートを生成するポリシーを選択します。
  4. 「レポートの生成」を選択します。
  5. 「権限分析: レポートの生成」ダイアログ・ボックスで、レポートを生成する時間を指定します。

    レポートを今すぐに生成する場合は、「即時」を選択します。レポートを後で生成するには、「後で」を選択してから、レポートを生成する時、分、秒およびタイムゾーンを指定します。

  6. 「OK」をクリックします。

    「権限分析」ページに確認メッセージ表示されて、レポートが送信されたことを通知します。このページは、ジョブが完了するまでリフレッシュできます。レポートを表示するには、ポリシー名を選択してから「レポートの表示」をクリックします。

Cloud Controlによる権限分析レポートへのアクセス

権限分析レポートは、使われた権限と使われなかった権限に関する情報を提供します。

  1. 権限分析レポートの生成。

    詳細は、「Cloud Controlによる権限分析レポートの生成」を参照してください。

  2. 「権限分析」ページで、レポートを生成したポリシーを選択します。
  3. 「アクション」メニューから、「レポート」を選択します。

    「権限分析レポート」ページが表示されます。次の図に、「検索」フィールドを展開した状態の「使用頻度サマリー」タブを示します。使用されていないシステム権限の数も表示されています。

  4. 「使用頻度サマリー」タブ、「未使用」タブ、および「使用済」タブから選択して、ポリシーによって発見された権限使用に関する詳細情報を表示します。

    ここから、必要に応じてユーザーに対して取消しや再付与を行うロールを選択できます。そうするには、ロールを選択して「取消」または「再付与」をクリックします。

DBMS_PRIVILEGE_CAPTUREによる権限分析レポートの生成

DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULTプロシージャは、権限の取得結果を示すレポートを作成します。

  1. 既存の権限分析ポリシーおよびそれらが現在無効かどうかを確認するために、DBA_PRIV_CAPTURESデータ・ディクショナリ・ビューのNAMEおよびENABLED列に問い合せます。

    権限分析ポリシーは、それに関する権限分析レポートを生成する前に無効化する必要があります。

  2. DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULTプロシージャを実行します。

    たとえば、権限分析ポリシーlogon_users_analysisのレポートを生成するには、次のようにします。

    EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ('logon_users_analysis');
    
  3. 権限付与パスを持つDBA_USED_*データ・ディクショナリ・ビューで、使用された権限を問い合せます。

権限分析ポリシーの削除

DBMS_PRIVILEGE_CAPTURE PL/SQLパッケージを使用すると、Enterprise Manager Cloud ControlまたはSQL*Plusのいずれかで、権限分析ポリシー・レポートを削除できます。

内容は次のとおりです。

権限分析ポリシーの削除について

権限分析ポリシーを削除するには、そのポリシーを無効にする必要があります。

権限分析ポリシーの削除は、この権限分析に関連付けられているすべての使用されたおよび使用されていない権限レコードも削除します。

Cloud Controlによる権限分析ポリシーの削除

Cloud Controlを使用して権限分析ポリシーを削除します。

  1. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  2. 「セキュリティ」メニューから、「権限分析」を選択します。
  3. 「ポリシー」から、削除するポリシーを選択します。
  4. 「削除」を選択します。
  5. 「確認」ダイアログ・ボックスで、「はい」をクリックします。

DBMS_PRIVILEGE_CAPTUREパッケージによる権限分析ポリシーの削除

DBMS_PRIVILEGE_CAPTURE.DROP_CAPTUREプロシージャは、権限分析ポリシーを削除します。

  1. ポリシーおよびポリシーが有効か無効かを確認するために、DBA_PRIV_CAPTURESデータ・ディクショナリ・ビューのNAMEおよびENABLE列に問い合せます。
  2. ポリシーが有効な場合、無効にします。

    次に例を示します。

    EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('logon_users_analysis_pol');
    
  3. DBMS_PRIVILEGE_CAPTURE.DROP_CAPTUREプロシージャを実行して、ポリシーを削除します。

    次に例を示します。

    EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE ('logon_users_analysis_pol');

Cloud Controlによるロールの作成および権限の管理

権限分析レポートの中にある権限を使って新しいロールを作成し、そのロールをユーザーに付与することができます。

内容は次のとおりです。

Cloud Controlでの権限分析レポートからのロールの作成

レポート・サマリーを使用して、アプリケーションで必要な最低限の権限を検索し、これらの権限をロールにカプセル化できます。

  1. 「権限分析」ページにアクセスします。
  2. 「権限分析」ページで、ポリシー名を選択してから、「アクション」メニューの「ロールの作成」をクリックします。
  3. 「ロールの作成」ページで、次の詳細情報を入力してから、「OK」をクリックします。
    • 新しいロールの作成元となるポリシーを選択します。

    • 作成する新しいロールの一意の名前を入力します。

    • ロールで何をカプセル化するかに応じて、「使用済」または「未使用」チェック・ボックスを選択します。ロールには、使用中または未使用のシステムおよびオブジェクトの権限およびロールを使用できます。

    • 「直接付与されたシステム権限」「直接付与されたオブジェクト権限」および「直接付与されたロール」の対応するラジオ・ボタンを選択します。

      たとえば、「使用済」チェック・ボックスを選択し、次を選択します。

      • すべてのシステム権限: 取得されたシステム権限のうち使用中のものすべてが、作成する新しいロールに含まれます。

      • ロールなし: ポリシーで取得されたロールはどれも、新しいロールでは使用されません。

      • オブジェクト権限のカスタマイズ: 取得された使用中のオブジェクト権限が一覧表示されるので、ロールに割り当てる権限をこのリストから選択する必要があります。

Cloud Controlによるロールおよび権限の取消しおよび再付与

Enterprise Manager Cloud Controlを使用して、ロールおよび権限をユーザーに対して取り消したり、再付与したりできます。

  1. Oracle Database Vaultが有効な場合、Oracleシステム権限およびロール管理レルムの所有者として認可されていることを確認します。

    SQL*Plusでは、DV_OWNERロールを付与されているユーザーがDVSYS.DBA_DV_REALM_AUTHデータ・ディクショナリ・ビューを問い合せて認可を確認できます。ユーザーに認可を付与するには、DBMS_MACADM.ADD_AUTH_TO_REALMプロシージャを使用します。

  2. 「権限分析: レポート」ページにアクセスします。

    「権限分析」ページで、レポートに関連付けられているポリシーを選択し、「アクション」メニューから「レポート」を選択します。

  3. 「権限分析: レポート」ページで、権限の取消しまたは再付与を行う対象の権限受領者を展開します。

    次の図に、取消し可能なEXP_FULL_DATABASEロールを示します。

  4. 特定のロールや、「システム権限」または「オブジェクト権限」フォルダにリストされている権限などのカテゴリを、このユーザー名の下から選択します。

    現在、ロールまたは権限がユーザーに付与されている場合は、「取消」ボタンが有効になります。付与されていない場合は、「再付与」ボタンが有効になります。

  5. ロールまたは権限を取り消すには「取消」を選択し、再付与するには「再付与」を選択します。
  6. 「確認」ウィンドウで、「はい」を選択します。

Cloud Controlによる取消しまたは再付与スクリプトの生成

権限分析レポートの結果に基づいて、ユーザーに対して権限を取り消したり、再付与するスクリプトを生成できます。

内容は次のとおりです。

取消しおよび再付与スクリプトの生成について

システムやオブジェクトに対する未使用の権限およびロールの一括取消しを実行するためのスクリプトを、権限分析の生成後にダウンロードできます。

後で、これらの権限をユーザーに再付与することが必要になった場合は、再付与スクリプトを生成できます。再付与スクリプトを生成するには、対応する取消しスクリプトが必要です。

開発環境またはテスト環境で取消スクリプトを実行します。Oracleによって提供されているアカウントおよびロールから権限およびロールを取り消すことはできないということを知っておいてください。

取消しスクリプトの生成

Enterprise Manager Cloud Controlを使用すると、ユーザーから権限を取り消すスクリプトを生成できます。

  1. Oracle Database Vaultが有効な場合、Oracleシステム権限およびロール管理レルムの所有者として認可されていることを確認します。

    SQL*Plusでは、DV_OWNERロールを付与されているユーザーがDVSYS.DBA_DV_REALM_AUTHデータ・ディクショナリ・ビューを問い合せて認可を確認できます。ユーザーに認可を付与するには、DBMS_MACADM.ADD_AUTH_TO_REALMプロシージャを使用します。

  2. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。

  3. 「セキュリティ」メニューから、「権限分析」を選択します。
  4. 目的のレポートが生成済であることを確認します。

    詳細は、Cloud Controlによる権限分析レポートの生成を参照してください。

  5. 「権限分析」ページの「アクション」メニューで「取消スクリプト」を選択します。
  6. 「取消スクリプト」ページで、「生成」をクリックします。

    取消しスクリプトの詳細を生成するためのウィザードが表示されます。

  7. 「スクリプトの詳細」ページで、取消しスクリプトを準備する必要のあるポリシー名をメニューから選択します。
  8. スクリプトの一意の名前および説明を入力します。

    たとえば、未使用の権限をすべて取り消す場合は、すべての権限およびロールを表す「すべて」オプションを選択して、「次へ」をクリックします。

    選択内容に基づいて、取消し対象の使用可能な権限、未使用のすべての権限、オブジェクト権限、およびロールがそれぞれのページに表示されます。

  9. 「次へ」をクリックします。

    「確認」ページで、取消しスクリプトに含めるすべての権限のリストを表示できます。

  10. 「保存」をクリックします

    確認ウィンドウが表示されます。

  11. 「取消スクリプト」ページで、新規作成されたSQLスクリプトを見つけてから、「取消スクリプト」をクリックしてこのスクリプトをダウンロードします。

再付与スクリプトの生成

Enterprise Manager Cloud Controlを使用すると、ユーザーから取り消した権限を再付与するスクリプトを生成できます。

  1. Oracle Database Vaultが有効な場合、Oracleシステム権限およびロール管理レルムの所有者として認可されていることを確認します。

    SQL*Plusでは、DV_OWNERロールを付与されているユーザーがDVSYS.DBA_DV_REALM_AUTHデータ・ディクショナリ・ビューを問い合せて認可を確認できます。ユーザーに認可を付与するには、DBMS_MACADM.ADD_AUTH_TO_REALMプロシージャを使用します。

  2. Enterprise Managerで、CAPTURE_ADMINロールおよびSELECT ANY DICTIONARY権限が付与されているユーザーとしてターゲット・データベースのホームページにアクセスします。

    詳細は、Oracle Database 2日でデータベース管理者を参照してください。

  3. 「セキュリティ」メニューから、「権限分析」を選択します。
  4. 目的のレポートが生成済であることを確認します。

    詳細は、「Cloud Controlによる権限分析レポートの生成」を参照してください。

  5. 「権限分析」ページの「アクション」メニューで「取消スクリプト」を選択します。
  6. 「取消スクリプト」ページで、生成済の取消しスクリプトに対応する再付与スクリプトを見つけてから、「再付与スクリプト」をクリックしてこのスクリプトをダウンロードします。

チュートリアル: ANY権限の使用の分析

このチュートリアルでは、権限分析を使用してREAD ANY TABLEシステム権限の使用を分析する方法を示します。

内容は次のとおりです。

手順1: ユーザー・アカウントの作成

2つのユーザーを作成する必要があります。1つはポリシーを作成するユーザーで、もう1つはその権限の使用が分析対象となるユーザーです。

  1. DV_ACCTMGRロールを付与されているユーザーとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus bea_dvacctmgr
    Enter password: password
    

    マルチテナント環境で、適切なプラガブル・データベース(PDB)に接続する必要があります。

    次に例を示します。

    sqlplus bea_dvacctmgr@hrpdb
    Enter password: password
    

    利用可能なPDBを検索するには、DBA_PDBSデータ・ディクショナリ・ビューを問い合せます。現在のPDBを確認するには、show con_nameコマンドを実行します。

    Oracle Database Vaultが有効ではない場合、CREATE USERシステム権限を持つユーザーとして、データベース・インスタンスにログインします。

  2. 次のユーザーを作成します。
    CREATE USER pa_admin IDENTIFIED BY password;
    CREATE USER app_user IDENTIFIED BY password;
    
  3. ロールおよびシステム権限を他のユーザーに付与する権限を持ち、Oracleシステム権限およびロール管理レルムの所有者認可を付与されているユーザーとして接続します。(ユーザーSYSはデフォルトでこれらの権限を持っています。)

    次に例を示します。

    CONNECT dba_psmith -- Or, CONNECT dba_psmith@hrpdb
    Enter password: password
    

    SQL*Plusでは、DV_OWNERロールを付与されているユーザーがDVSYS.DBA_DV_REALM_AUTHデータ・ディクショナリ・ビューを問い合せて認可を確認できます。ユーザーに認可を付与するには、DBMS_MACADM.ADD_AUTH_TO_REALMプロシージャを使用します。

  4. 次のロールおよび権限をユーザーに付与します。
    GRANT CREATE SESSION, CAPTURE_ADMIN TO pa_admin;
    GRANT CREATE SESSION, READ ANY TABLE TO app_user;
    

    ユーザーpa_adminは、ユーザーapp_userが実行するREAD ANY TABLE問合せを分析する権限分析ポリシーを作成します。

手順2: 権限分析ポリシーの作成および有効化

ユーザーpa_adminは権限分析ポリシーを作成して有効にする必要があります。

  1. ユーザーpa_adminとして接続します。
    CONNECT pa_admin -- Or, CONNECT pa_admin@hrpdb
    Enter password: password
    
  2. 次の権限分析ポリシーを作成します。
    BEGIN
     DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
      name           => 'ANY_priv_analysis_pol',
      description    => 'Analyzes system privilege use',
      type           => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
      condition      => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''APP_USER''');
    END;
    /
    

    この例では、次のようになります。

    • typeは、次に説明するconditionパラメータで定義される取得条件のタイプを指定します。このポリシーでは、タイプはコンテキスト・ベースの条件です。

    • conditionは、ポリシーを有効にするためにTRUEに評価する必要があるBoolean式を使用して条件を指定します。この場合、セッション・ユーザーがapp_userかどうかを条件でチェックします。

  3. ポリシーを有効にします。
    EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('ANY_priv_analysis_pol');
    

    この時点で、ポリシーはユーザーapp_userのアクションの記録を開始できます。

手順3: READ ANY TABLEシステム権限の使用

ユーザーapp_userとして、READ ANY TABLEシステム権限を使用します。

  1. ユーザーapp_userとして接続します。
    CONNECT app_user -- Or, CONNECT app_user@hrpdb
    Enter password: password
    
  2. HR.EMPLOYEES表を問い合せます。
    SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES WHERE SALARY > 12000 ORDER BY SALARY DESC;
    
    FIRST_NAME           LAST_NAME                     SALARY
    -------------------- ------------------------- ----------
    Steven               King                           24000
    Neena                Kochhar                        17000
    Lex                  De Haan                        17000
    John                 Russell                        14000
    Karen                Partners                       13500
    Michael              Hartstein                      13000
    Shelley              Higgins                        12008
    Nancy                Greenberg                      12008

手順4: 権限分析ポリシーの無効化

ユーザーapp_userのアクションを取得するレポートを生成するには、ポリシーを無効にする必要があります。

  1. ユーザーpa_adminとして接続します。
    CONNECT pa_admin -- Or, CONNECT pa_admin@hrpdb
    Enter password: password
    
  2. ANY_priv_analysis_pol権限ポリシーを無効にします。
    EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('ANY_priv_analysis_pol');

手順5: 権限分析レポートの生成および表示

権限分析ポリシーを無効にすると、ユーザーpa_adminは権限分析レポートの生成および表示を行うことができます。

  1. ユーザーpa_adminとして、権限分析の結果を生成します。
    EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ('ANY_priv_analysis_pol');
    

    生成された結果は、権限分析ポリシーおよびレポート・データ・ディクショナリ・ビューで説明する権限分析データ・ディクショナリ・ビューに格納されます。

  2. 次のコマンドを入力して、データ・ディクショナリ・ビューの出力の書式を設定します。
    col username format a10
    col sys_priv format a16
    col object_owner format a13
    col object_name format a23
    
  3. app_userで使用されるシステム権限と、権限分析中に使用されるオブジェクトを確認します。
    SELECT USERNAME, SYS_PRIV, OBJECT_OWNER, OBJECT_NAME FROM DBA_USED_PRIVS WHERE USERNAME = 'APP_USER';
    

    次のような出力結果が表示されます。最初の行は、app_userHR.EMPLOYEES表に対するREAD ANY TABLE権限を使用したことを示します。

    USERNAME   SYS_PRIV             OBJECT_OWNER  OBJECT_NAME
    ---------- ---------------- ------------- -----------------------
    APP_USER                    SYSTEM        PRODUCT_PRIVS
    APP_USER                    SYS           DUAL
    APP_USER                    SYS           DUAL
    APP_USER   CREATE SESSION
    APP_USER                    SYS           DBMS_APPLICATION_INFO
    APP_USER   READ ANY TABLE   HR            EMPLOYEES
    

手順6: このチュートリアルのコンポーネントの削除

コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。

  1. ユーザーpa_adminとして、ANY_priv_analysis_pol権限分析ポリシーを削除します。
    EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE ('ANY_priv_analysis_pol');
    

    pa_adminユーザーのスキーマに作成されたオブジェクトはSYSスキーマにあるため、次の手順で、このユーザー(このオブジェクトを含む)を削除する場合でも、ANY_priv_analysis_pol権限分析ポリシーを手動で削除する必要があります。

  2. ユーザー・アカウントを作成したユーザーとして接続します。Oracle Database Vaultが有効な場合は、Oracle Database Vaultアカウント・マネージャとして接続します。

    次に例を示します。

    CONNECT bea_dvacctmgr -- Or, CONNECT bea_dvacctmgr@hrpdb
    Enter password: password
    
  3. ユーザーpa_adminおよびapp_userを削除します。
    DROP USER pa_admin;
    DROP USER app_user;

チュートリアル: DBAロールを持つユーザーによる権限の使用の分析

このチュートリアルでは、DBAロールを持ち、データベースのチューニング操作を行うユーザーの権限使用を分析する方法を示します。

内容は次のとおりです。

手順1: ユーザー・アカウントの作成

2つのユーザーを作成する必要があります。1つは権限分析ポリシーを作成するユーザーで、もう1つはその権限の使用が分析対象となるユーザーです。

  1. DV_ACCTMGRロールを付与されているユーザーとして、データベース・インスタンスにログインします。

    次に例を示します。

    sqlplus bea_dvacctmgr
    Enter password: password
    

    マルチテナント環境で、適切なプラガブル・データベース(PDB)にログインする必要があります。

    次に例を示します。

    sqlplus bea_dvacctmgr@hrpdb
    Enter password: password
    

    利用可能なPDBを検索するには、DBA_PDBSデータ・ディクショナリ・ビューを問い合せます。現在のPDBを確認するには、show con_nameコマンドを実行します。

    Oracle Database Vaultが有効ではない場合、CREATE USERシステム権限を持つユーザーとして、データベース・インスタンスにログインします。

  2. 次のユーザーを作成します。
    CREATE USER pa_admin IDENTIFIED BY password;
    CREATE USER tjones IDENTIFIED BY password;
    
  3. ロールおよびシステム権限を他のユーザーに付与する権限を持ち、Oracleシステム権限およびロール管理レルムの所有者認可を付与されているユーザーとして接続します。(ユーザーSYSはデフォルトでこれらの権限を持っています。)

    次に例を示します。

    CONNECT dba_psmith -- Or, CONNECT dba_psmith@hrpdb
    Enter password: password
    

    SQL*Plusでは、DV_OWNERロールを付与されているユーザーがDVSYS.DBA_DV_REALM_AUTHデータ・ディクショナリ・ビューを問い合せて認可を確認できます。ユーザーに認可を付与するには、DBMS_MACADM.ADD_AUTH_TO_REALMプロシージャを使用します。

  4. 次のロールおよび権限をユーザーに付与します。
    GRANT CREATE SESSION, CAPTURE_ADMIN TO pa_admin;
    GRANT CREATE SESSION, DBA TO tjones;
    

    ユーザーpa_adminは、ユーザーtjonesが実行するデータベースのチューニング操作を分析する権限分析ポリシーを作成します。

手順2: 権限分析ポリシーの作成および有効化

ユーザーpa_adminは権限分析ポリシーを作成して有効にする必要があります。

  1. ユーザーpa_adminとして接続します。
    CONNECT pa_admin -- Or, CONNECT pa_admin@hrpdb
    Enter password: password
    

    Oracle Database Vaultが有効な場合は、DV_ACCTMGRロールを持つDatabase Vaultアカウント・マネージャとしてログインします。Oracleシステム権限およびロール管理レルムの所有者であることを確認します。

  2. 次の権限分析ポリシーを作成します。
    BEGIN
     DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
      name             => 'dba_tuning_priv_analysis_pol',
      description      => 'Analyzes DBA tuning privilege use',
      type             => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
      condition        => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'')=''TJONES''');
    END;
    /
    

    この例では、次のようになります。

    • typeは、次に説明するconditionパラメータで定義される取得条件のタイプを指定します。このポリシーでは、タイプはコンテキスト・ベースの条件です。

    • conditionは、ポリシーを有効にするためにTRUEに評価する必要があるBoolean式を使用して条件を指定します。この場合、セッション・ユーザーがtjonesかどうかを条件でチェックします。

  3. ポリシーを有効にします。
    EXEC DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE ('dba_tuning_priv_analysis_pol');
    

    この時点で、ポリシーはユーザーtjonesのアクションの記録を開始できます。

手順3: データベース・チューニング操作の実行

ユーザーtjonesは、DBAロールを使用して、データベースのチューニング操作を実行します。

  1. ユーザーtjonesとして接続します。
    CONNECT tjones -- Or, CONNECT tjones@hrpdb
    Enter password: password
    
  2. 次のスクリプトを実行して、PLAN_TABLE表を作成します。
    @$ORACLE_HOME/rdbms/admin/utlxplan.sql
    

    このスクリプトの場所は、オペレーティング・システムによって異なる場合があります。このスクリプトでは、PLAN_TABLE表をtjonesスキーマに作成します。

  3. 次のEXPLAIN PLAN SQL文をHR.EMPLOYEES表で実行します。
    EXPLAIN PLAN
     SET STATEMENT_ID = 'Raise in Tokyo' 
     INTO PLAN_TABLE
     FOR UPDATE HR.EMPLOYEES
     SET SALARY = SALARY * 1.10
     WHERE DEPARTMENT_ID = 
      (SELECT DEPARTMENT_ID FROM HR.DEPARTMENTS WHERE LOCATION_ID = 110);
    

    次に、ユーザーtjonesHR.EMPLOYEES表を分析します。

  4. 次のいずれかのスクリプトを実行して、CHAINED_ROWS表を作成します。
    @$ORACLE_HOME/rdbms/admin/utlchain.sql
    

    または

    @$ORACLE_HOME/rdbms/admin/utlchn1.sql
    
  5. ANALYZE TABLE文をHR.EMPLOYEES表で実行します。
    ANALYZE TABLE HR.EMPLOYEES LIST CHAINED ROWS INTO CHAINED_ROWS;

手順4: 権限分析ポリシーの無効化

ユーザーtjonesのアクションを取得するレポートを生成するには、ポリシーを無効にする必要があります。

  1. ユーザーpa_adminとして接続します。
    CONNECT pa_admin -- Or, CONNECT pa_admin@hrpdb
    Enter password: password
    
  2. dba_tuning_priv_analysis_pol権限ポリシーを無効にします。
    EXEC DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE ('dba_tuning_priv_analysis_pol');

手順5: 権限分析レポートの生成および表示

権限分析ポリシーを無効にすると、ユーザーpa_adminは権限分析レポートの生成および表示を行うことができます。

  1. ユーザーpa_adminとして、権限分析の結果を生成します。
    EXEC DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT ('dba_tuning_priv_analysis_pol');
    

    生成された結果は、「権限分析ポリシーおよびレポート・データ・ディクショナリ・ビュー」で説明する権限分析データ・ディクショナリ・ビューに格納されます。

  2. 次のコマンドを入力して、データ・ディクショナリ・ビューの出力の書式を設定します。
    col username format a8
    col sys_priv format a18
    col used_role format a20
    col path format a150
    col obj_priv format a10
    col object_owner format a10
    col object_name format a10
    col object_type format a10
    
  3. 権限分析中にtjonesで使用されるシステム権限とロールを確認します。
    SELECT USERNAME, SYS_PRIV, USED_ROLE, PATH
     FROM DBA_USED_SYSPRIVS_PATH
     WHERE USERNAME = 'TJONES'
     ORDER BY 1, 2, 3;
    

    次のような出力が表示されます。

    USERNAME SYS_PRIV           USED_ROLE
    -------- ------------------ --------------------
    PATH
    -------------------------------------------------------------------------------
    TJONES   ANALYZE ANY        IMP_FULL_DATABASE
    GRANT_PATH('TJONES', 'DBA')
    
    TJONES   ANALYZE ANY        IMP_FULL_DATABASE
    GRANT_PATH('TJONES', 'DBA', 'IMP_FULL_DATABASE')
    
    TJONES   ANALYZE ANY        IMP_FULL_DATABASE
    GRANT_PATH('TJONES', 'DBA', 'DATAPUMP_IMP_FULL_DATABASE', 'IMP_FULL_DATABASE')
    ...
    
    
  4. 権限分析中にtjonesで使用されるオブジェクト権限とロールを確認します。
    col username format a9
    col used_role format a10
    col object_name format a22
    col object_type format a12
    
    SELECT USERNAME, OBJ_PRIV, USED_ROLE,
     OBJECT_OWNER, OBJECT_NAME, OBJECT_TYPE
     FROM DBA_USED_OBJPRIVS 
     WHERE USERNAME = 'TJONES'
     ORDER BY 1, 2, 3, 4, 5, 6;
    

    次のような出力が表示されます。

    USERNAME  OBJ_PRIV   USED_ROLE  OBJECT_OWN OBJECT_NAME            OBJECT_TYPE
    --------- ---------- ---------- ---------- ---------------------- ------------
    TJONES    EXECUTE    PUBLIC     SYS        DBMS_APPLICATION_INFO  PACKAGE
    TJONES    SELECT     PUBLIC     SYS        DUAL                   TABLE
    TJONES    SELECT     PUBLIC     SYS        DUAL                   TABLE
    TJONES    SELECT     PUBLIC     SYSTEM     PRODUCT_PRIVS          VIEW
    ...
    
  5. ユーザーtjonesの未使用の権限を確認します。
    col username format a9
    col sys_priv format a35
    
    SELECT USERNAME, SYS_PRIV
     FROM DBA_UNUSED_SYSPRIVS
     WHERE USERNAME = 'TJONES'
     ORDER BY 1, 2;
    
    USERNAME SYS_PRIV
    -------- ------------------------------
    TJONES   ADMINISTER ANY SQL TUNING SET
    TJONES   ADMINISTER DATABASE TRIGGER
    TJONES   ADMINISTER RESOURCE MANAGER
    TJONES   ADMINISTER SQL TUNING SET
    TJONES   ALTER ANY ASSEMBLY
    TJONES   ON COMMIT REFRESH
    ...

手順6: このチュートリアルのコンポーネントの削除

コンポーネントが不要になった場合、このチュートリアルで作成したコンポーネントを削除できます。

  1. ユーザーpa_adminとして、dba_tuning_priv_analysis_pol権限分析ポリシーを削除します。
    EXEC DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE ('dba_tuning_priv_analysis_pol');
    

    pa_adminユーザーのスキーマに作成されたオブジェクトはSYSスキーマにあるため、次の手順で、このユーザー(このオブジェクトを含む)を削除する場合でも、dba_tuning_priv_analysis_pol権限分析ポリシーを手動で削除する必要があります。

  2. ユーザー・アカウントを作成したユーザーとして接続します。Oracle Database Vaultが有効な場合は、Oracle Database Vaultアカウント・マネージャとして接続します。

    次に例を示します。

    CONNECT bea_dvacctmgr -- Or, CONNECT bea_dvacctmgr@hrpdb
    Enter password: password
    
  3. ユーザーpa_adminおよびtjonesを削除します。
    DROP USER pa_admin;
    DROP USER tjones CASCADE;

権限分析ポリシーおよびレポート・データ・ディクショナリ・ビュー

Oracle Databaseには、分析した権限に関する情報を示すデータ・ディクショナリ・ビューが用意されています。

表4-1に、これらのデータ・ディクショナリ・ビューを示します。

表4-1 権限分析情報を表示するデータ・ディクショナリ・ビュー

ビュー 説明

DBA_PRIV_CAPTURES

既存の権限分析ポリシーの情報をリストします

DBA_USED_PRIVS

レポートされた権限分析ポリシーに使用された権限をリストします

DBA_UNUSED_PRIVS

レポートされた権限分析ポリシーに使用されていない権限をリストします

DBA_USED_OBJPRIVS

レポートされた権限分析ポリシーに使用されたオブジェクト権限をリストします。オブジェクト付与パスを含みません。

DBA_UNUSED_OBJPRIVS

レポートされた権限分析ポリシーに使用されていないオブジェクト権限をリストします。オブジェクト権限付与パスを含みません。

DBA_USED_OBJPRIVS_PATH

レポートされた権限分析ポリシーに使用されたオブジェクト権限をリストします。オブジェクト権限付与パスを含みます。

DBA_UNUSED_OBJPRIVS_PATH

レポートされた権限分析ポリシーに使用されていないオブジェクト権限をリストします。オブジェクト権限付与パスを含みます。

DBA_USED_SYSPRIVS

レポートされた権限分析ポリシーに使用されたシステム権限をリストします。システム権限付与パスを含みません。

DBA_UNUSED_SYSPRIVS

レポートされた権限分析ポリシーに使用されていないシステム権限をリストします。システム権限付与パスを含みません。

DBA_USED_SYSPRIVS_PATH

レポートされた権限分析ポリシーに使用されたシステム権限をリストします。システム権限付与パスを含みます。

DBA_UNUSED_SYSPRIVS_PATH

レポートされた権限分析ポリシーに使用されていないシステム権限をリストします。システム権限付与パスを含みます

DBA_USED_PUBPRIVS

レポートされた権限分析ポリシーに使用されたPUBLICロールの権限をすべてリストします。

DBA_USED_USERPRIVS

レポートされた権限分析ポリシーに使用されたユーザー権限をリストします。ユーザー権限付与パスを含みません。

DBA_UNUSED_USERPRIVS

レポートされた権限分析ポリシーに使用されていないユーザー権限をリストします。ユーザー権限付与パスを含みません。

DBA_USED_USERPRIVS_PATH

レポートされた権限分析ポリシーに使用されたユーザー権限をリストします。ユーザー権限付与パスを含みます。

DBA_UNUSED_USERPRIVS_PATH

レポートされた権限分析ポリシーに使用されていない権限をリストします。ユーザー権限付与パスを含みます。

関連項目:

これらのデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください