123 DBMS_PRIVILEGE_CAPTURE

DBMS_PRIVILEGE_CAPTUREパッケージは、データベース権限分析へのインタフェースを提供します。

参照:

付与された権限の使用状況を分析する方法については、『Oracle Database Vault管理者ガイド』を参照してください。

この章のトピックは、次のとおりです:

123.1 DBMS_PRIVILEGE_CAPTUREの概要

データベース権限分析では、システムの使用方法とユーザーに付与されたオブジェクト権限を記録するポリシーを作成できます。さらに、ユーザーが使用している権限と使用していない権限を判別できます。ここでは、使用されていないすべての権限を取り消すことで、ユーザーに付与された余分な権限の数を減らすことができます。

特定のタスクを実行するためにユーザーの所有が必要な権限を分析することによって、権限分析ポリシーによるユーザーの最小権限モデルが実現できるようになります。

123.2 DBMS_PRIVILEGE_CAPTUREのセキュリティ・モデル

デフォルトでは、権限分析管理者ロールCAPTURE_ADMINに、DBMS_PRIVILEGE_CAPTUREパッケージのEXECUTE権限が付与されます。

データベースのインストール中、CAPTURE_ADMINロールがDBAロールに付与されます。

123.3 DBMS_PRIVILEGE_CAPTUREの定数

DBMS_PRIVILEGE_CAPTUREパッケージは、パラメータ値の指定に使用するいくつかの列挙定数を定義します。

表123-1 DBMS_PRIVILEGE_CAPTUREの定数

定数 タイプ 説明

G_DATABASE

1

NUMBER

SYSユーザーが使用する権限を除いたすべての権限の使用状況を分析します。

G_ROLE

2

NUMBER

指定されたロールの権限の使用状況を分析します。

G_CONTEXT

3

NUMBER

conditionパラメータがtrueに評価された場合の権限の使用状況を分析します。

G_ROLE_AND_CONTEXT

4

NUMBER

conditionパラメータがtrueに評価された場合に、指定されたロールの権限の使用状況を分析します。

123.4 DBMS_PRIVILEGE_CAPTUREの例

次の例では、DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTUREプロシージャを使用して、データベース分析、ロール分析およびコンテキスト固有の分析などの様々な種類の権限分析を作成する例が示されています。この例では、コンテキスト固有の分析で異なる条件を組み合せる例も示されています。

--Create a database privilege analysis policy
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
        name         => 'all_priv_analysis_pol',
        description  => 'database-wide policy to analyze all privileges',
        type         => DBMS_PRIVILEGE_CAPTURE.G_DATABASE);
END;

--Create a privilege analysis policy to analyze privileges from the role PUBLIC
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
       name         => 'pub_analysis_pol',
       description  => 'Policy to record privilege use by PUBLIC',
       type         => DBMS_PRIVILEGE_CAPTURE.G_ROLE,
       roles        => role_name_list('PUBLIC'));
END;

-- Create a policy to analyze privileges from the application module, "Account
-- Payable"
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name         => 'acc_pay_analysis_pol',
  type         => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
  condition    => 'SYS_CONTEXT(''USERENV'', ''MODULE'') = ''Account Payable''');
END;

-- Create a policy that records privileges for session user APPS when running the
-- application module "Account Payable"
BEGIN
DBMS_PRIVILEGE_CAPTURE.CREATE_CAPTURE(
  name         => 'acc_pay_analysis_pol',
  type         => DBMS_PRIVILEGE_CAPTURE.G_CONTEXT,
  condition    => 'SYS_CONTEXT(''USERENV'', ''MODULE'') = ''Account Payable'' AND
                   SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''APPS''');
END;

123.5 DBMS_PRIVILEGE_CAPTUREサブプログラムの要約

この表では、DBMS_PRIVILEGE_CAPTUREパッケージのサブプログラムをリストし、簡単に説明します。

表123-2 DBMS_PRIVILEGE_CAPTUREパッケージのサブプログラム

サブプログラム 説明

CAPTURE_DEPENDENCY_PRIVSプロシージャ

定義者権限および実行者権限PL/SQLプログラム・ユニットで比較のために使用される権限を取得します。

CREATE_CAPTUREプロシージャ

権限の使用状況を分析するための条件を指定するポリシーを作成します。

DELETE_RUNプロシージャ

権限分析の取得実行を削除します。

DISABLE_CAPTUREプロシージャ

指定された権限分析ポリシーに対する権限の使用状況の記録を停止します。

DROP_CAPTUREプロシージャ

権限分析ポリシーを記録されたデータとともに削除します。

ENABLE_CAPTUREプロシージャ

指定された権限分析ポリシーに対して権限分析の記録を開始します。

GENERATE_RESULTプロシージャ

権限分析のデータ・ディクショナリ・ビューにデータを移入します。

123.5.1 CAPTURE_DEPENDENCY_PRIVSプロシージャ

このプロシージャは、定義者権限および実行者権限PL/SQLプログラム・ユニットで比較のために使用される権限を取得します。

構文

DBMS_PRIVILEGE_CAPTURE.CAPTURE_DEPENDENCY_PRIVS ();

パラメータ

このプロシージャのパラメータはありません。

使用上のノート

DBMS_PRIVILEGE_CAPTURE.CAPTURE_DEPENDENCY_PRIVSプロシージャの再実行のたびに、権限分析のデータ・ディクショナリ・ビューから既存のレコードを削除します。その後、既存のPL/SQLプログラム・ユニットに基づいてレコードを再取得します。

123.5.2 CREATE_CAPTUREプロシージャ

このプロシージャは、権限の使用状況を分析するための条件を指定するポリシーを作成します。また、オプションで、権限の使用状況の分析対象となるロールと、その分析に使用する条件も指定します。

構文

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

パラメータ

表123-3 CREATE_CAPTUREプロシージャのパラメータ

パラメータ 説明

name

権限分析ポリシーの名前です。最大30文字の文字列です。

description

ポリシーの説明(最大1024文字)です。

type

権限分析ポリシーのタイプです。使用可能な値は次のとおりです。

  • G_DATABASE: SYSユーザーが使用する権限を除く、データベース内のすべての権限の使用状況を取得します。

  • G_ROLE: 指定したロールまたはロールのリストに権限が含まれる場合、その権限の使用状況を取得します。

  • G_CONTEXT: conditionパラメータに指定されたコンテキストがtrueと評価された場合、権限の使用状況を取得します。

  • G_ROLE_AND_CONTEXT: 指定したロールのリストに権限が含まれ、conditionパラメータに指定された条件がtrueの場合、その権限の使用状況を取得します。

roles

権限が分析対象であるロール。typeG_ROLEまたはG_ROLE_AND_CONTEXTである場合に必要です。

condition

最大4000文字を含むPL/SQLブール式。typeG_CONTEXTまたはG_ROLE_AND_CONTEXTである場合に必要です。ブール式に含めることができるのはSYS_CONTEXTのみであり、他のファンクションを含めることはできません。

使用上のノート

  • CREATE_CAPTUREプロシージャにロールベースの分析を使用するときは、指定されたロールに権限が間接的に付与された場合でも権限の使用状況が分析されます。

    たとえば、ロールR2にロールR1が含まれ、R1に権限P1が含まれるとします。権限ポリシーにロールR2のみが含まれる場合でも、P1権限のすべての使用状況が分析されます。これは、P1が間接的にロールR2の一部になっているためです。

  • conditionパラメータを使用する場合、PL/SQL式には次の構文を使用します。

    condition::= predicate | (predicate1) AND (predicate2)
    | (predicate1) OR (predicate2)
    

    内容は次のとおりです。

    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::= = | < | <= | > | >= | <>
    
  • 権限分析ポリシーでは、SYSユーザー権限の使用状況は分析できません。

123.5.3 DELETE_RUNプロシージャ

このプロシージャは、権限分析の取得実行を削除します。

構文

DBMS_PRIVILEGE_CAPTURE.DELETE_RUN (
   name      IN VARCHAR2,
   run_name  IN VARCHAR2);

パラメータ

表123-4 DELETE_RUNプロシージャのパラメータ

パラメータ 説明

name

取得実行を関連付ける権限分析ポリシーの名前。

run_name

取得実行の名前。

使用上のノート

  • DBA_PRIV_CAPTURESデータ・ディクショナリ・ビューを問い合せて、既存の権限取得ポリシーの名前を確認できます。

  • 取得実行を削除するもう1つの方法は、取得実行が関連付けられたポリシーを削除することです。ポリシーを削除すると、関連付けられた取得実行が自動的に削除されます。

  • 取得実行を削除すると、権限取得のデータ・ディクショナリ・ビューからアクセスできなくなります。

123.5.4 DISABLE_CAPTUREプロシージャ

このプロシージャは、指定された権限分析ポリシーに対する権限の使用状況の記録を停止します。ポリシーが無効化されている場合は、ポリシーの条件を満たす権限の使用状況が記録されなくなります。

構文

DBMS_PRIVILEGE_CAPTURE.DISABLE_CAPTURE (
   name        IN VARCHAR2);

パラメータ

表123-5 DISABLE_CAPTUREプロシージャのパラメータ

パラメータ 説明

name

無効にする権限分析ポリシーの名前です。

使用上のノート

権限分析ポリシーが最初に作成されるときは、そのポリシーはデフォルトで無効になっています。

123.5.5 DROP_CAPTUREプロシージャ

このプロシージャは、権限分析ポリシーを記録されたデータとともに削除します。ポリシーが削除されている場合は、以前に記録された権限の使用状況のデータでそのポリシーに関連付けられたものがすべて削除されます。

構文

DBMS_PRIVILEGE_CAPTURE.DROP_CAPTURE (
   name      IN VARCHAR2);

パラメータ

表123-6 DROP_CAPTUREプロシージャのパラメータ

パラメータ 説明

name

削除する権限分析ポリシーの名前です。

使用上のノート

  • 権限分析ポリシーを削除する前に、そのポリシーを無効にする必要があります。有効なポリシーは削除できません。

  • ポリシーに関連付けられている取得実行がある場合、ポリシーを削除するとそれらの取得実行は自動的に削除されます。

123.5.6 ENABLE_CAPTUREプロシージャ

このプロシージャは、指定された権限分析ポリシーに対して権限分析の記録を開始し、オプションで、そのポリシーの取得実行を提供します。ポリシーが有効化されると、ポリシーの条件を満たすすべての権限の使用状況が記録されます。

構文

DBMS_PRIVILEGE_CAPTURE.ENABLE_CAPTURE (
   name      IN VARCHAR2,
   run_name  IN VARCHAR2 DEFAULT NULL);

パラメータ

表123-7 ENABLE_CAPTUREプロシージャのパラメータ

パラメータ 説明

name

有効にする権限分析ポリシーの名前。

run_name

このポリシーに関連付ける取得実行の名前(128文字未満)。特殊文字は二重引用符で囲みます。

使用上のノート

次の使用上のノートが適用されます。

  • 権限分析ポリシーが最初に作成されるときは、そのポリシーはデフォルトで無効になっています。権限分析ポリシーを有効にするには、ENABLE_CAPTUREを実行する必要があります。

  • 一度に有効にできる権限分析ポリシーは1つのみです。ただし、G_DATABASEタイプにおけるデータベース全体の権限分析は、G_DATABASE以外のもう1つの権限分析とともに有効化できます。

  • 同じ実行を複数回有効にすることはできません。たとえば、run_01の取得を再度有効にする場合、run_01を再度使用することはできません。かわりに、新しい実行を作成します。

123.5.7 GENERATE_RESULTプロシージャ

このプロシージャは、権限分析のデータ・ディクショナリ・ビューにデータを移入します。

参照:

権限分析ビューの詳細は、『Oracle Database Vault管理者ガイド』を参照してください。

構文

DBMS_PRIVILEGE_CAPTURE.GENERATE_RESULT (
   name        IN VARCHAR2,
   run_name    IN VARCHAR2 DEFAULT NULL,
   DEPENDENCY  IN BOOLEAN DEFAULT NULL);

パラメータ

表123-8 GENERATE_RESULTプロシージャのパラメータ

パラメータ 説明

name

ビューにデータを移入する権限分析ポリシーの名前。

run_name

権限分析ポリシーに関連付ける取得実行の名前。このパラメータを省略した場合、作成されたすべての実行のレコードが分析されます。run_nameパラメータを指定した場合、その実行のレコードのみが分析され、他のすべての実行は影響を受けません。

dependency

Y (yes)またはN (no)を入力して、DBMS_PRIVILEGE_CAPTURE.CAPTURE_DEPENDENCY_PRIVSプロシージャによって設定されたPL/SQLコンパイル権限をレポートに含めるかどうかを指定します。

使用上のノート

権限分析ポリシーの権限分析ビューにデータを移入する前に、そのポリシーを無効にする必要があります。有効な権限分析ポリシーに対しては、このサブプログラムを起動できません。