9 Oracle Database Vaultポリシーの構成

Oracle Database Vaultポリシーを使用して、よく使用されるレルムおよびコマンド・ルール設定を実装できます。

9.1 Database Vaultポリシーの概要

Oracle Database Vaultポリシーにより、ローカルのレルムおよびコマンド・ルールが、必要に応じて有効または無効にできる、名前付きポリシーにグループ化されます。

9.1.1 Oracle Database Vaultポリシーについて

Oracle Database Vaultポリシーを使用してレルムおよびコマンド・ルールの定義を1つのポリシーにグループ化でき、その後、まとめて有効または無効にできます。

Database Vaultポリシーにより、DVADMロールおよびDVOWNERロールで提供される強力な権限を付与することなく、限定されたレルム管理権限をデータベース・ユーザーに委任できます。Oracle Database Vaultには、デフォルト・ポリシーが用意されています。

たとえば、レルムおよびいくつかのコマンド・ルールなど、特定のアプリケーションに関連する一連のOracle Database Vaultオブジェクトがあるとします。Database Vaultポリシーを使用して、これらのオブジェクトを1つのポリシーにグループ化できます。その後、このアプリケーションのためとポリシーの有効化または無効化のためにレルムへのユーザーの追加を管理するポリシー管理者を指定できます。プライマリ・アプリケーションが1つのみの場合は、含まれているDatabase Vaultオブジェクトごとにコマンドを発行するのではなく、ユーザーがすべての関連オブジェクトを1つのコマンドで有効化、無効化またはシミュレート(シミュレーション・モードを使用)できるという、管理容易性のためにそれを使用できます。

ポリシーのポリシー状態の設定内容に応じて個々のレルムおよびコマンド・ルールの有効化がどのように機能するかを、次に示します。

  • 完全有効化モード(DBMS_MACADM.G_ENABLED)では、関連付けられたレルムおよびコマンド・ルールの個々の有効化設定より優先されるよう、ポリシーが設定されます。たとえば、ポリシーの関連オブジェクトが個別に無効にされている場合、それらは、ポリシーが有効になると有効になります。(反対に、埋込みのセキュリティ・オブジェクトでそれら固有の有効化、無効化またはシミュレーション・モードを設定できるよう、DBMS_MACADM.G_PARTIALを設定できます)。

  • 部分有効化モード(DBMS_MACADM.G_PARTIAL)では、関連付けられたレルムおよびコマンド・ルールを様々なステータス設定(ENABLEDDISABLEDおよびSIMULATION)にできます。他のポリシー・ステータスを選択すると、関連するすべての制御が、強制的に、ポリシーによって決定された同じステータスになります。ポリシー・ステータスを部分にすると、各レルムおよびコマンド・ルールで、必要に応じてステータスを変更できます。

  • シミュレーション・モード(DBMS_MACACM.G.SIMULATION)では、ポリシーが有効になりますが、レルムまたはコマンド・ルールに対する違反が、ユーザー名や使用されたSQL文など、違反のタイプに関する情報とともに、指定したログ表に書き込まれます。シミュレーションにより、ポリシー内のすべてのセキュリティ・オブジェクトが強制的にシミュレーション・モードになります。

  • 無効化モード(DBMS_MACADM.G_DISABLED)では、ポリシーはその作成後に無効になります。

通常、Database Vaultポリシーを作成するには、次のステップを実行します。

  1. ポリシー内で使用する、必要なレルムおよびコマンド・ルールを作成します。

  2. Database Vaultポリシーを作成します。

    DBMS_MACADM.CREATE_POLICYプロシージャを使用してポリシーを作成できます。

  3. 1つ以上のレルムをポリシーに追加します。

    DBMS_MACADM.ADD_REALM_TO_POLICYプロシージャを使用してレルムをポリシーに追加できます。

  4. 1つ以上のコマンド・ルールをポリシーに追加します。

    DBMS_MACADM.ADD_CMD_TO_POLICYプロシージャを使用してコマンド・ルールをポリシーに追加できます。

  5. 1人以上のデータベース・ユーザーをポリシーの所有者として追加します。

    DBMS_MACADM.ADD_OWNER_TO_POLICYプロシージャを使用してユーザーをポリシーに追加できます。その後、このユーザーにDV_POLICY_OWNERロールを付与します。このユーザーは、ポリシー状態の変更、レルムでの認可の追加または削除、および一連のDVSYS.POLICY_OWNER*データ・ディクショナリ・ビューに対するSELECT権限の保持といった、限定された一連の作業を実行できます。デフォルトでは、DVOWNERユーザーがポリシーを所有します。

ポリシーは、作成後すぐに使用できます。

9.1.2 マルチテナント環境におけるOracle Database Vaultポリシー

Oracle Database Vaultポリシーは、それらが作成されたプラガブル・データベース(PDB)に対してのみローカルとなります。

つまり、PDBでポリシーを作成した場合は、ローカルのレルムおよびコマンド・ルールのみをそれに追加できます。

9.2 デフォルトのOracle Database Vaultポリシー

Oracle Database Vaultには、ユーザー・アカウントとシステム権限をよりしっかりと保護するために使用できる、2つのデフォルト・ポリシーが用意されています。

独自のセキュリティ構成でデフォルトのポリシーを使用できます。それらは、Oracle Database Vaultによる内部使用には必要ないため、不要な場合は削除できます。

デフォルト・ポリシーは、次のとおりです。

  • Oracleアカウント管理コントロールは、Oracle Database Vault内のユーザー関連の操作を強制的に制御します。権限のない特権ユーザーによるその場かぎりのユーザー・アカウント作成、ユーザー削除、およびその他のユーザー・アカウント関連操作を防ぐために使用されます。それには、CREATE USERなどのSQL文のためのDatabase Vaultアカウント管理レルムおよびユーザー・アカウント管理コマンド・ルールが含まれています。

  • Oracleシステム保護コントロールは、デフォルトのOracle Database環境に関連付けられている、重要なデータベース・スキーマ、権限およびロールを強制的に制御します。それには、システム管理SQL文ALTER SYSTEMのための、Oracleデフォルト・スキーマ保護レルムなどのレルム、およびコマンド・ルールが含まれています。

関連トピック

9.3 Oracle Databaseポリシーの作成

Oracle Database Vaultポリシーを作成するには、そのポリシーを取り巻くレルムおよびコマンド・ルールを指定する、コンテナ・ポリシーを作成します。

ポリシーは作成時に有効にすることも、その後で有効にすることもできます。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. DBMS_MACADM.CREATE_POLICYプロシージャを実行してポリシーを作成します
    たとえば:
    BEGIN
     DBMS_MACADM.CREATE_POLICY(
      policy_name  => 'OE Policy',
      description  => 'Policy to protect the OE schema',
      policy_state => DBMS_MACADM.G_ENABLED,
      pl_sql_stack => TRUE);
    END;
    /
  3. Database Vaultポリシー所有者にポリシーに関連するビューの問合せと許可されたプロシージャの実行が可能になるよう、このユーザーにDV_POLICY_OWNERロールを付与します。
    このロールを複数のユーザーに付与できます。
    たとえば:
    GRANT DV_POLICY_OWNER TO psmith, pfitch;
  4. データベース・ユーザーをポリシーの所有者として追加する場合は、DBMS_MACADM.ADD_OWNER_TO_POLICYプロシージャを実行します。
    ポリシー所有者は、ポリシーを変更できます。
    たとえば:
    BEGIN
     DBMS_MACADM.ADD_OWNER_TO_POLICY(
      policy_name    => 'OE Policy',
      owner_name     => 'PSMITH');
    END;
    /
  5. 次のコマンド・ルールを作成します。
    BEGIN
     DBMS_MACADM.CREATE_COMMAND_RULE(
      command       => 'TRUNCATE TABLE',
      object_owner  => 'OE',
      object_name   => 'ORDERS',
      rule_set_name => 'Disabled',
      scope         => DBMS_MACUTL.G_SCOPE_LOCAL);
    END;
    /
  6. ポリシーにコマンド・ルールを追加するには、DBMS_MACADM.ADD_CMD_RULE_TO_POLICYプロシージャを実行します。
    PDBにポリシーを作成した場合、コマンド・ルールは、このPDBにローカルにする必要があります。
    たとえば、OEポリシーにコマンド・ルールを追加できます:
    BEGIN
     DBMS_MACADM.ADD_CMD_RULE_TO_POLICY(
      policy_name    => 'OE Policy',
      command        => 'TRUNCATE TABLE',
      object_owner   => 'OE',
      object_name    => 'ORDERS',
      scope          => DBMS_MACUTL.G_SCOPE_LOCAL);
    END;
    /
    Subje

    この指定内容では、コマンド・ルールが存在していることと、含まれているパラメータが一致することが必要です。コマンド・ルールの定義を調べるには、DBA_DV_COMMAND_RULEを問い合せます。

    ALTER SYSTEMまたはALTER SESSIONのコマンド・ルールを追加する場合は、それらのコマンド・ルールに固有のパラメータを含める必要があります。最初に、コマンド・ルールを作成します:
    BEGIN
     DBMS_MACADM.CREATE_COMMAND_RULE(
      command        => 'ALTER SESSION',
      object_owner   => '%',
      object_name    => '%',
      clause_name    => 'PARALLEL DDL',
      rule_set_name  => 'Disabled',
      scope          => DBMS_MACUTL.G_SCOPE_LOCAL);
    END;
    /
    次に、コマンド・ルールをポリシーに追加します:
    BEGIN
     DBMS_MACADM.ADD_CMD_RULE_TO_POLICY(
      policy_name    => 'OE Policy',
      command        => 'ALTER SESSION',
      object_owner   => '%',
      object_name    => '%',
      clause_name    => 'PARALLEL DDL',
      scope          => DBMS_MACUTL.G_SCOPE_LOCAL);
    END;
    / 

    ここで、コマンド・ルールをポリシーに追加します:

    BEGIN
     DBMS_MACADM.ADD_CMD_RULE_TO_POLICY(
      policy_name    => 'OE Policy',
      command        => 'ALTER SESSION',
      object_owner   => '%',
      object_name    => '%',
      clause_name    => 'PARALLEL DDL',
      scope          => DBMS_MACUTL.G_SCOPE_LOCAL);
    END;
    / 
  7. ポリシーにレルムを追加するには、DBMS_MACADM.ADD_REALM_TO_POLICYプロシージャを実行します。
    PDBにポリシーを作成した場合、コマンド・ルールは、このPDBにローカルにする必要があります。
    最初に、新しいレルムを作成します:
    BEGIN
     DVSYS.DBMS_MACADM.CREATE_REALM(
      realm_name     => 'Protect OE Tables',
      description    => 'Mandatory realm to protect OE tables',
      enabled        => dbms_macutl.g_yes,
      audit_options  => null,
      realm_type     => DBMS_MACADM.MANDATORY_REALM);
    END;
    /

    次に、レルムをポリシーに追加します:

    BEGIN
     DBMS_MACADM.ADD_REALM_TO_POLICY(
      policy_name    => 'OE Policy',
      realm_name     => 'Protect OE Tables');
    END;
    /

    詳細は、次のとおりです。

    • policy_nameはポリシーの名前です。DBA_DV_POLICYビューには、既存のポリシーがリストされます。
    • realm_nameはレルムの名前です。DBA_DV_REALMビューには、既存のレルムがリストされます。

9.4 Oracle Database Vaultポリシーの変更

Oracle Database Vaultポリシーは変更可能です。

ポリシーの説明と状態のみ変更できます。それ以外の変更(ポリシーに関連付けられたレルムの変更など)が必要な場合は、ポリシーからオブジェクトを削除して(たとえば、DBMS_MACADM.DELETE_REALM_FROM_POLICYプロシージャを使用します)、その後で置換えのオブジェクトをポリシーに追加する必要があります(たとえば、DBMS_MACADM.ADD_REALM_TO_POLICYを使用します)。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. ポリシーを検索して、その定義を確認します。
    たとえば:
    SELECT * FROM DBA_DV_POLICY ORDER BY POLICY_NAME;
  3. ポリシーの説明を変更するには、DBMS_MACADM.UPDATE_POLICY_DESCRIPTIONプロシージャを実行します。
    たとえば:
    BEGIN
     DBMS_MACADM.UPDATE_POLICY_DESCRIPTION(
      policy_name  => 'OE Policy',
      description  => 'Policy to protect the OE schema from external intruders');
    END;
    /
  4. ポリシーの状態を変更するには、DBMS_MACADM.UPDATE_POLICY_STATEプロシージャを実行します。
    たとえば:
    BEGIN
     DBMS_MACADM.UPDATE_POLICY_STATE(
      policy_name   => 'OE Policy',
      policy_state  => DBMS_MACADM.G_SIMULATION,
      pl_sql_stack  => TRUE);
    END;
    /

9.5 Oracle Database Vaultポリシーの削除

Enterprise Manager Cloud Controlを使用してOracle Database Vaultポリシーを削除できます。

Oracle Database Vaultポリシーを削除する場合、基礎となるレルムおよびコマンド・ルールは保持され、それら個別の有効化ステータスが維持されます。ポリシーの削除前に、それに関連付けられたオブジェクト(レルムなど)を削除する必要はありません。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてPDBに接続します。
  2. DBA_DV_POLICY_OBJECTデータ・ディクショナリ・ビューを問い合せて、削除するポリシーを見つけます。
    たとえば:
    SELECT POLICY_NAME FROM DBA_DV_POLICY ORDER BY POLICY_NAME;
  3. DBMS_MACADM.DROP_POLICYプロシージャを実行して、ポリシーを削除します。
    たとえば:
    EXEC DBMS_MACADM.DROP_POLICY ('OE Policy');
  4. このプロセスの一部としてコマンド・ルールおよびレルムを作成した場合は、次のコマンドを使用してこれらを削除できます:
    EXEC DBMS_MACADM.DELETE_REALM ('Protect OE Tables');
    
    BEGIN
     DBMS_MACADM.DELETE_COMMAND_RULE(
      command        => 'ALTER SESSION',
      object_owner   => '%',
      object_name    => '%',
      clause_name    => 'PARALLEL DDL');
    END;
    /
    
    BEGIN
     DBMS_MACADM.DELETE_COMMAND_RULE(
      command        => 'TRUNCATE TABLE',
      object_owner   => 'OE',
      object_name    => 'ORDERS');
    END;
    /

関連トピック

9.6 Oracle Database Vaultのデータ・ディクショナリ・ビュー

Oracle Database Vaultには、Database Vaultポリシーの分析に便利なデータ・ディクショナリ・ビューが用意されています。

表9-1に、既存のOracle Database Vaultポリシーについて情報を提供するデータ・ディクショナリ・ビューを示します。

表9-1 Oracle Database Vaultポリシーのために使用されるデータ・ディクショナリ・ビュー

データ・ディクショナリ・ビュー 説明

DBA_DV_POLICY

Database Vaultポリシー、説明およびそれらの状態を示します。

DBA_DV_POLICY_OBJECT

関連付けられているレルムおよびコマンド・ルールなど、ポリシーに関する詳細情報を提供します。

DBA_DV_POLICY_OWNER

Database Vaultポリシーの所有者を示します。

DBA_DV_REALM_AUTH

DV_POLICY_OWNERロールを付与されたユーザーが、レルム名、権限受領者および関連付けられたルール・セットなど、Database Vaultポリシーに関連付けられているレルムに付与された認可について情報を確認できます。

DVSYS.POLICY_OWNER_COMMAND_RULE

DV_POLICY_OWNERロールを付与されたユーザーが、コマンド・ルール名など、Database Vaultポリシーに関連付けられているコマンド・ルールについて情報を確認できます。

DVSYS.POLICY_OWNER_POLICY

DV_POLICY_OWNERロールを付与されたユーザーが、他のポリシー所有者によって作成されたポリシーを含め、現在のデータベース・インスタンス内の既存のポリシーの名前、説明および状態などの情報を確認できます。

DVSYS.POLICY_OWNER_REALM

DV_POLICY_OWNERロールを付与されたユーザーは、レルム名、レルム・タイプまたは従来の監査オプションなど、Database Vaultポリシーに関連付けられているレルムについての情報を確認できます。

DVSYS.POLICY_OWNER_REALM_OBJECT

DV_POLICY_OWNERロールを付与されたユーザーが、レルム名、権限受領者および関連付けられたルール・セットなど、Database Vaultポリシーに関連付けられているレルムに追加されたオブジェクトについて情報を確認できます。

DVSYS.POLICY_OWNER_RULE

DV_POLICY_OWNERロールを付与されたユーザーが、ルール名とその式など、Database Vaultポリシー内のルール・セットに関連付けられているルールについて情報を確認できます。

DVSYS.POLICY_OWNER_RULE_SET

DV_POLICY_OWNERロールを付与されたユーザーが、ルール・セットの名前、そのハンドラ情報、およびそれが有効になっているかどうかなど、Database Vaultポリシーに関連付けられているルール・セットについて情報を確認できます。

DVSYS.POLICY_OWNER_RULE_SET_RULE

DV_POLICY_OWNERロールを付与されたユーザーが、ルール・セットの名前、およびそれが有効になっているかどうかなど、Database Vaultポリシーで使用されるルールを含むルール・セットについて情報を確認できます。