プライマリ・コンテンツに移動
Oracle® Database Vault管理者ガイド
11gリリース2 (11.2)
B56297-10
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

5 ルール・セットの構成

この章の内容は次のとおりです。

ルール・セットの概要

ルール・セットは、レルム認可、ファクタ割当て、コマンド・ルールまたはセキュア・アプリケーション・ロールに関連付けられる1つ以上のルールの集合です。ルール・セットは、それに含まれる各ルールと評価タイプ(「すべてのTrue」または「いずれかTrue」)に基づいて、trueまたはfalseに評価されます。ルール・セット内のルールは、TrueまたはFalseと評価されるPL/SQL式です。ルールを作成し、そのルールを複数のルール・セットに追加できます。

ルール・セットを使用して次のアクティビティを実行できます。

  • レルム認可がアクティブになる条件の定義(レルム認可をさらに制限することが目的)

  • コマンド・ルールを許可する時期の定義

  • セキュア・アプリケーション・ロールの有効化

  • ファクタのアイデンティティを割り当てる時期の定義

ルール・セットを作成すると、レルムの認証、コマンド・ルール、ファクタまたはセキュア・アプリケーション・ロールの構成時に選択できるようになります。

Oracle Database Vaultに作成するルール・セット上でレポートを実行できます。詳細は、「関連するレポートおよびデータ・ディクショナリ・ビュー」を参照してください。

この章では、Oracle Database Vault Administratorを使用してルール・セットを構成する方法を説明します。Oracle Database Vaultが提供するPL/SQLインタフェースおよびパッケージを使用してルール・セットを構成するには、次の章を参照してください。

デフォルトのルール・セット

Oracle Database Vaultにはデフォルトで一連のルール・セットが用意されており、ニーズにあわせてカスタマイズできます。デフォルトのルール・セットは次のとおりです。

  • セッションを許可: データベースにセッションを作成する権限を制御します。このルール・セットを使用すると、CONNECTコマンド・ルールを使用してデータベース・ログインを制御するためのルールを追加できます。CONNECTコマンド・ルールは、その使用が必要なプログラムへのSYSDBAアクセスの制御または制限に有用です。このルール・セットは移入されていません。

  • システム・パラメータを許可: システム初期化パラメータを設定する権限を制御します。Oracle Database 11gリリース2 (11.2)では、このルール・セットは「システム・パラメータのファイングレイン・コントロールを許可」ルール・セットに置き換えられますが、下位互換性を確保するために引き続きサポートされます。「システム・パラメータを許可」ルール・セットはどのコマンドにも関連付けられていませんが、そのルールは引き続き使用可能で、任意のカスタム・ルール・セットで使用できます。「システム・パラメータのファイングレイン・コントロールを許可」ルール・セットを使用することをお薦めします。

  • システム・パラメータのファイングレイン・コントロールを許可: システム・セキュリティ、ダンプまたは宛先の場所、バックアップとリストアの設定、オプティマイザの設定、PL/SQLデバッグおよびセキュリティ・パラメータを管理する初期化パラメータに対する非常に柔軟でファイングレインな制御を行えます。これは、このルール・セットに関連付けられたルールに基づいて、次の初期化パラメータに影響します。

    • 「システム・セキュリティ・パラメータが許可されているか」のルール: O7_DICTIONARY_ACCESSIBILITYを設定できません

    • 「ダンプまたは宛先パラメータが許可されているか」のルール: 次のパラメータを設定できません。


      BACKGROUND_DUMP_DEST LOG_ARCHIVE_DEST_STATE_n

      CORE_DUMP_DEST LOG_ARCHIVE_DUPLEX_DEST

      DB_CREATE_ONLINE_LOG_DEST LOG_ARCHIVE_FORMAT

      DB_RECOVERY_FILE_DEST LOG_ARCHIVE_LOCAL_FIRST

      DB_RECOVERY_FILE_DEST_SIZE LOG_ARCHIVE_MAX_PROCESSES

      DIAGNOSTIC_DEST LOG_ARCHIVE_MIN_SUCCEED_DEST

      DUMP_DATAFILE LOG_ARCHIVE_TRACE

      LOG_ARCHIVE_CONFIG MAX_DUMP_FILE_SIZE

      LOG_ARCHIVE_DEST STANDBY_ARCHIVE_DEST

      LOG_ARCHIVE_DEST_n USER_DUMP_DEST

    • 「バックアップ・リストア・パラメータが許可されているか」のルール: RECYCLEBINを設定できません(ただしリサイクルビンの無効化は妨げられません)。

    • 「データベース・ファイル・パラメータが許可されているか」のルール: CONTROL_FILE_RECORD_KEEP_TIMECONTROL_FILESを設定できます。

    • 「オプティマイザ・パラメータが許可されているか」のルール: OPTIMIZER_SECURE_VIEW_MERGINGを設定できません。

    • 「PL-SQLパラメータが許可されているか」のルール: UTL_FILE_DIRPLSQL_DEBUGを設定できません。

    • 「セキュリティ・パラメータが許可されているか」のルール: 次のパラメータを設定できません。


      AUDIT_SYS_OPERATIONS = FALSE OS_ROLES

      AUDIT_TRAIL = NONE or FALSE REMOTE_OS_ROLES

      AUDIT_SYSLOG_LEVEL SQL92_SECURITY

    初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • VPD管理権限を付与可能: GRANTおよびREVOKE文を使用して、Oracle Virtual Private DatabaseのDBMS_RLSパッケージのGRANT EXECUTEまたはREVOKE EXECUTE権限を付与する権限を制御します。

  • Oracle Data Pump操作を許可: DBMS_MACADM.AUTHORIZE_DATAPUMP_USERプロシージャで作成された各ユーザー認可を記述するルールで構成されます。ルールには、ユーザー・ログイン・アカウントおよびユーザーが許可されているアクセス・レベル(データベース全体、データベース内の1つのスキーマまたはこのスキーマ内の1つの表)などがあります。ユーザーがOracle Data Pumpのエクスポートまたはインポート操作を実行しようとすると、Oracle Database Vaultはこのルール・セットで定義されている認可をチェックします。ユーザーの認可がここで定義されていない場合、ユーザーはエクスポートまたはインポート操作の実行を許可されません。

    詳細は、「Oracle Database Vault環境でのOracle Data Pumpの使用」を参照してください。

  • スケジューラ・ジョブの許可: DBMS_MACADM.AUTHORIZE_SCHEDULER_USERプロシージャで作成された各ユーザー認可を記述するルールで構成されます。ここでユーザーの認可が定義されていなくても、ユーザーはジョブを作成できます。ただし、別のスキーマでジョブを実行した場合、ジョブがOracle Database Vaultで保護されているオブジェクトにアクセスしたときに、ジョブは失敗します。ルールには、ユーザー・ログイン・アカウントおよびユーザーが許可されているアクセス・レベル(データベース全体、データベース内の1つのスキーマ)などがあります。ユーザーがデータベース・ジョブをスケジュールしようとすると、Oracle Database Vaultはこのルール・セットで定義されている認可をチェックします。ユーザーの認可がここで定義されていない場合、ユーザーはジョブの作成を許可されません。

    詳細は、「Oracle Database Vault環境でのデータベース・ジョブのスケジュール」を参照してください。

  • アカウント/プロファイルを保守可能: CREATE USERDROP USERCREATE PROFILEALTER PROFILEまたはDROP PROFILE文を使用して、ユーザー・アカウントおよびプロファイルを管理するロールを制御します。

  • 自分のアカウントを保守可能: DV_ACCTMGRロールのあるアカウントを許可し、ALTER USER文を使用したユーザー・アカウントおよびプロファイルの管理を可能にします。また、ALTER USER文を使用した、個々のアカウントによる個人のパスワードの変更を許可します。DV_ACCTMGRロールの詳細は、「DV_ACCTMGR Database Vaultアカウント・マネージャ・ロール」を参照してください。

  • 無効: レルム、コマンド・ルール、ファクタおよびセキュア・アプリケーション・ロールを迅速に無効にするための簡易ルール・セットです。

  • 有効: システム機能を迅速に有効にするための簡易ルール・セットです。

ルール・セットの作成

通常、ルール・セットを作成するには、まずルール・セットを作成し、次にそのルール・セットを編集して1つ以上のルールに関連付けます。作成したルール・セットに新しいルールを関連付ける、既存のルールを追加する、もしくはそのルール・セットからルールの関連付けを削除することが可能です。

次の項目も参照してください。

ルール・セットを作成するには、次のようにします。

  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとしてOracle Database Vault Administratorにログインします。

    ログイン方法は、「Oracle Database Vaultの起動」で説明されています。

  2. 「管理」ページの「Database Vault機能管理」で、「ルール・セット」をクリックします。

  3. 「ルール・セット」ページで「作成」をクリックします。

  4. 「ルール・セットの作成」ページで、次の設定を入力して「OK」をクリックします。

一般

次の設定を入力します。

  • 名前: ルール・セットの名前を入力します。大/小文字の両方を使用して90文字以内で指定できます。空白を使用できます。この属性は必須です。

    名前は動詞で始まり、ルール・セットが関連付けられるレルムまたはコマンド・ルールの名前で終わることをお薦めします。次に例を示します。

    Limit SQL*Plus access
    
  • 説明: ルール・セットの機能の説明を入力します。大/小文字の両方を使用して1024文字以内で指定できます。この属性はオプションです。

    ルール・セットのビジネス要件を説明できます。次に例を示します。

    Rule to limit access to SQL*Plus
    
  • ステータス: 「有効」または「無効」のいずれかを選択し、実行時にルール・セットを有効または無効にします。ルール・セットはデフォルトでは有効です。この属性は必須です。

  • 評価オプション: ルール・セットに複数のルールを割り当てる場合は、次の設定のいずれかを選択します。

    • すべてTrue: デフォルト。ルール・セット自体がTrueと評価されるためには、ルール・セットのルールがすべてTrueと評価される必要があります。

    • いずれかTrue: ルール・セット自体がTrueと評価されるために、少なくともルール・セットの1つのルールがTrueと評価される必要があります。

    コマンド・ルールによってアクセスされる際にルール・セットが評価される頻度を決定する場合、DBMS_MACADM.CREATE_RULE_SETプロシージャのis_staticパラメータを使用できます。詳細は、「CREATE_RULE_SETプロシージャ」を参照してください。

監査オプション

ルール・セットに対する監査レコードを生成するための次のオプションから選択します。Oracle Database VaultはDVSYS.AUDIT_TRAIL$システム・ファイルに監査証跡を書き込みます。これについては、付録A「Oracle Database Vaultの監査」に説明されています。

この属性は必須です。設定は次のとおりです。

  • 監査無効: どのような場合にも監査レコードは作成されません。

  • 失敗時に監査: デフォルト。ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、監査レコードが作成されます。

  • 成功時または失敗時に監査: ルール・セットが評価されるたびに監査レコードが作成されます。

その他の監査オプションについては、「CREATE_RULE_SETプロシージャ」を参照してください。

Oracle Database Vaultの監査証跡はDVSYS.AUDIT_TRAIL$システム表に書き込まれ、フィールドRULE_SET_NAMEおよびRULE_SET_IDが含まれます。これらのフィールドには、ルール・セットがレルム認可やコマンド認可と関連付けられている場合や、ルール・セットが特定の状況下で監査するよう構成されている場合に移入されます。詳細は、付録A「Oracle Database Vaultの監査」を参照してください。

エラー処理オプション

ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合は、次の設定を入力してデータベース・セッションへのメッセージを制御します。

  • 失敗オプション: 「エラー・メッセージを表示」(デフォルト)または「エラー・メッセージを表示しない」のいずれかを選択します。

    「エラー・メッセージを表示しない」を選択して監査を有効にする利点は、潜在的な侵入者のアクティビティを追跡できるということです。監査レポートにより侵入者のアクティビティを把握できますが、エラー・メッセージが表示されないため、侵入者は監査が行われていることに気付きません。

  • 失敗コード: -20000から-20999または20000から20999の範囲の数値を入力します。ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、失敗メッセージ(次で作成)付きのエラー・コードが表示されます。この設定を省略すると、Oracle Database Vaultにより次のエラー・コードが表示されます。

    ORA-01031: Insufficient privileges
    
  • 失敗メッセージ: 大/小文字混在で80文字以内のメッセージを入力し、「失敗コード」で指定した失敗コードに関連付けます。ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、エラー・メッセージが表示されます。エラー・メッセージを指定しない場合、Oracle Database Vaultにより通常のエラー・メッセージが表示されます。

  • カスタム・イベント・ハンドラ・オプション: 次のオプションのいずれかを選択し、カスタム・イベント・ハンドラ・ロジック(次で作成)を実行する時期を決定します。

    • ハンドラ無効: デフォルト。カスタム・イベント・メソッドを実行しません。

    • 失敗時に実行: ルール・セットがFalseと評価されるか、関連付けられたルールのいずれかに無効なPL/SQL式が含まれる場合に、カスタム・イベント・メソッドが実行されます。

    • 成功時に実行: ルール・セットがTrueと評価されるとカスタム・イベント・メソッドが実行されます。

    カスタム・イベント・メソッドを作成して、標準のOracle Database Vaultルール・セットの監査機能以外の特別な処理を実行できます。たとえば、イベント・ハンドラを使用して、ワークフロー・プロセスの開始や外部システムへのイベント情報の送信を実行できます。

  • カスタム・イベント・ハンドラ・ロジック: 大/小文字混在で255文字以内のPL/SQL式を入力します。式には、任意のパッケージ・プロシージャまたはスタンドアロン・プロシージャを含めることができます。独自の式を作成するか、第15章「Oracle Database Vault PL/SQLインタフェースの使用方法」で説明されているPL/SQLインタフェースを使用できます。

    完全修飾プロシージャとして式を記述します(schema.procedure_nameなど)。完全なSQL文は含めないでください。アプリケーション・パッケージ・プロシージャまたはスタンドアロン・プロシージャを使用している場合は、オブジェクトに対するEXECUTE権限を持つDVSYSを指定する必要があります。プロシージャ・シグネチャは、次の2つの書式のいずれかになります。

    • PROCEDURE my_ruleset_handler(p_ruleset_name IN VARCHAR2, p_ruleset_rules IN BOOLEAN): ハンドラ処理にルール・セットの名前およびその戻り値が必要な場合に、この書式を使用します。

    • PROCEDURE my_ruleset_handler: ハンドラ処理にルール・セットの名前と戻り値が不要な場合に、この書式を使用します。

    これらの2つの書式のいずれかを使用するユーザー・インタフェースで式を定義する場合は、式を次の書式にします。

    myschema.my_ruleset_handler
    

ルール・セットを作成すると、ルール・セットに追加するルールを作成できます。これを実行するには、新しいルール・セットを編集しルールを定義します。

ルール・セットの構成または編集

ルール・セットを構成または編集するには、次のようにします。

  1. Oracle Database Vaultの「管理」ページで、「ルール・セット」を選択します。

  2. 「ルール・セット」ページで、編集するルール・セットを選択します。

  3. 「編集」をクリックします。

  4. 必要に応じてルール・セットを変更し、「OK」をクリックします。


関連項目:


ルール・セットに追加するルールの作成

新しいルール・セットを作成したら、そのルール・セットを1つ以上のルールに関連付けられます。新しいルールを作成すると、自動的に現行のルール・セットに追加されます。既存のルールをルール・セットに追加することもできます。また、ルール・セットにルールを追加せずに、今後作成するルール・セットのテンプレートとして使用することもできます。

ルール・セットの評価は、評価オプション(「すべてTrue」または「いずれかTrue」)を使用するルールの評価に依存します。ルール・セットが無効である場合、Oracle Database Vaultは、ルールを評価せずにルール・セットをTrueに評価します。

ルールの評価、ルールのネスト、および特定のユーザー(特権ユーザーなど)を除外するルールの作成方法は、「ルール・セットの動作」を参照してください。

新規ルールの作成

ルール・セットにルールを作成および追加するには、次のようにします。

  1. Oracle Database Vaultの「管理」ページで、「ルール・セット」を選択します。

  2. 「ルール・セット」ページで、ルールを作成および追加するルール・セットを選択し、「編集」を選択します。

  3. 「ルール・セットの編集」ページで、「ルール・セットに関連付けられたルール」にスクロールし、「作成」を選択します。

  4. 「ルールの作成」ページで、次の設定を入力します。

    • 名前: ルールの名前を入力します。大/小文字混在で最大で90文字まで入力できます。

      名前は動詞で始まり、ルールの目的で終わることをお薦めします。次に例を示します。

      Prevent non-admin access to SQL*Plus
      

      ルールには「説明」フィールドがないため、明示的な名前を指定してください。ただし、90文字は超えないようにしてください。

    • ルール式: 次の要件に一致するPL/SQL式を入力します。

      • SQLのWHERE句で有効です。

      • 次に示すような、独立していて有効なPL/SQLブール式です。

        TO_CHAR(SYSDATE,'HH24') = '12'
        
      • ブール(TRUEまたはFALSE)値と評価される必要があります。

      • 255文字以内である必要があります。

      • 現行のデータベース・インスタンスから既存のコンパイルされたPL/SQLファンクションを含めることができます。完全修飾ファンクションであることを確認してください(schema. function_name)。完全なSQL文は含めないでください。

        アプリケーション・パッケージ・ファンクションまたはスタンドアロン・ファンクションを使用する場合は、ファンクションのEXECUTE権限のあるDVSYSアカウントを付与する必要があります。これを行うことで、新しいルールを追加するときに発生するエラーが少なくなります。

      • ルールが機能することを確認してください。SQL*Plusで次の文を実行すると、構文をテストできます。

        SELECT rule_expression FROM DUAL;
        

        たとえば、次のルール式を作成したとします。

        SYS_CONTEXT('USERENV','SESSION_USER') != 'TSMITH'
        

        この式は、次のようにテストできます。

        SELECT SYS_CONTEXT('USERENV','SESSION_USER') FROM DUAL;
        

      ルール・セット式で使用可能なファンクションについては、次の項を参照してください。

      その他の式の例は、Oracle Database Vaultが提供するルール・セットに定義されているルールを参照してください。これらのルール・セットは、「デフォルトのルール・セット」に記載されています。

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

    「ルール・セットの編集」ページが表示されます。デフォルトで、新しいルールはルール・セットに追加されます。

ルールの編集

ルールへの変更は、そのルールを含むすべてのルール・セットに適用されます。

ルールを編集するには、次のようにします。

  1. 「ルール・セットの編集」ページで、「ルール・セットに関連付けられたルール」にスクロールします。

  2. 編集するルールを選択して、「編集」をクリックします。

  3. 「ルールの編集」ページで、必要に応じてルールを変更します。

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

ルール・セットからのルールの削除

ルール・セットからルールを削除する前に、それに関連するOracle Database Vaultビューに問い合せることで、そのルールへの様々な参照を特定できます。詳細は、第16章「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。

ルール・セットからルールを削除する手順:

  1. 「ルール・セットの編集」ページで、「ルール・セットに関連付けられたルール」にスクロールします。

  2. 削除するルールを選択して、「削除」をクリックします。

  3. 「確認」ページで「はい」をクリックします。

ルール・セットからルールを削除しても、そのルールはまだ存在します。必要に応じて、そのルールをその他のルール・セットに関連付けることができます。ルールを削除する場合は、「DBMS_MACADMのルール・セット・プロシージャ」で説明されているDBMS_MACADM.DELETE_RULEファンクションを使用します。たとえば、ルールNight Shiftを削除するには、Database Vault所有者としてSQL*Plusにログインして、次の文を入力します。

EXEC DBMS_MACADM.DELETE_RULE('Night Shift');

既存のルールのルール・セットへの追加

既存のルールをルール・セットに追加する手順:

  1. 「ルール・セット」ページで、ルールを追加するルール・セットを選択し、「編集」を選択します。

  2. 「ルール・セットに関連付けられたルール」で「既存のルールの追加」を選択します。

  3. 「既存のルールの追加」ページで、対象のルールを選択して「移動」(すべて移動する場合は「すべて移動」)をクリックし、それらを「選択したルール」リストに移動します。

    [Ctrl]キーを押しながら各ルールをクリックすると、複数のルールを選択できます。

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

ルール・セットの削除

ルール・セットを削除する前に、それに関連するOracle Database Vaultビューに問い合せることで、そのルール・セットへの様々な参照を特定できます。詳細は、第16章「Oracle Database Vaultのデータ・ディクショナリ・ビュー」を参照してください。

ルール・セットの削除手順

  1. コマンド・ルールなど、その他のDatabase Vaultオブジェクトがルール・セットを参照している場合は、参照を削除します。

    ルール・セットを削除できるのは、そのルール・セットを参照しているその他のDatabase Vaultオブジェクトがない場合のみです。

  2. Oracle Database Vaultの「管理」ページで、「ルール・セット」を選択します。

  3. 「ルール・セット」ページで、削除するルール・セットを選択します。

  4. 「削除」をクリックします。

  5. 「確認」ページで「はい」をクリックします。

    ルール・セットが削除されます。ただし、ルール・セットに関連付けられているルールは削除されません。

ルール・セットの動作

この項では、ルール・セットがどのように機能するかを次の内容で説明します。

Oracle Database Vaultによるルールの評価方法

ルール・セット内のルールは、式の集合として評価されます。「評価オプション」「すべてTrue」に設定されている場合にルールの評価に失敗すると、ルール・セット内の残りのルールの評価は試行されず、その時点で評価が停止します。同様に、「評価オプション」「いずれかTrue」に設定されている場合にルールがTrueと評価されると、評価はその時点で停止します。ルール・セットが無効である場合、Oracle Database Vaultは、ルールを評価せずにルール・セットをTrueと評価します。

ルール・セット内でのルールのネスト

ルール・セット内に1つ以上のルールをネストできます。たとえば、Is Corporate Network During Maintenanceという、次の2つのタスクを実行するネストされたルールを作成するとします。

  • データベース・セッションが企業ネットワーク内から発生した場合のみ、表の変更を制限します。

  • 午後10時から午後10時59分の間にスケジュールされているシステム・メンテナンスの時間帯に、表の変更を制限します。

ルールの定義は次のようになります。

DVF.F$NETWORK = 'Corporate' AND TO_CHAR(SYSDATE,'HH24') between '22' AND '23'

これは、ファクタ・ファンクションを使用して作成できます。詳細は、「Oracle Database VaultのPL/SQLファクタ・ファンクション」を参照してください。ファクタの作成方法は、第7章で説明しています。

1人のユーザーを除く全員に適用するルールの作成

1人のユーザー(たとえば特権ユーザー)を除く全員に適用するルールを作成することも可能です。このタイプのルールのルール定義は、次のようになります。

SYS_CONTEXT('USERENV','SESSION_USER') = 'SUPERADMIN_USER' OR additional_rule

現行ユーザーが特権ユーザーの場合、システムでは、additional_ruleは評価されず、ルールはTrueに評価されます。現行ユーザーが特権ユーザーでない場合、ルールの評価はadditional_ruleの評価によって決まります。

チュートリアル: セキュリティ違反の電子メール・アラートの作成

この項の内容は次のとおりです。

このチュートリアルの概要

次のチュートリアルでは、ユーザーがメンテナンスの時間帯以外に表を変更しようとすると送信される電子メール・アラートを作成します。これを行うには、メンテナンスの時間帯を設定するルールを作成し、このルールをルール・セットに追加してから、ユーザーに表の変更を許可するコマンド・ルールを作成する必要があります。次に、ルール・セットをこのコマンド・ルールに関連付けます。これにより、ユーザーがメンテナンスの時間帯以外にALTER TABLE SQL文を使用しようとすると、電子メール・アラートが送信されます。

手順1: UTL_MAIL PL/SQLパッケージのインストールおよび構成

  1. SYSDBA権限を使用してSYSとしてSQL*Plusにログインし、UTL_MAILパッケージをインストールします。

    sqlplus sys as sysdba
    Enter password: password
    
    @$ORACLE_HOME/rdbms/admin/utlmail.sql
    @$ORACLE_HOME/rdbms/admin/prvtmail.plb
    

    UTL_MAILパッケージにより、電子メールの管理が可能になります。UTL_MAILの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。ただし、現在、UTL_MAIL PL/SQLパッケージではSSLサーバーをサポートしていないことに注意してください。

  2. SMTP_OUT_SERVERパラメータの現行値を調べ、このチュートリアル完了時に元に戻せるように、この値をメモしておきます。

    次に例を示します。

    SHOW PARAMETER SMTP_OUT_SERVER
    

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

    NAME                    TYPE              VALUE
    ----------------------- ----------------- ----------------------------------
    SMTP_OUT_SERVER         string            some_value.example.com
    
  3. 次のALTER SYSTEM文を発行します。

    ALTER SYSTEM SET SMTP_OUT_SERVER="imap_mail_server.example.com";
    

    imap_mail_server.example.comを、電子メール・ツールのアカウント設定にあるSMTPサーバーの名前に置き換えます。これらの設定を引用符で囲んでください。次に例を示します。

    ALTER SYSTEM SET SMTP_OUT_SERVER="my_imap_mail_server.example.com"
    
  4. SYSOPER権限を使用してSYSとして接続し、データベースを再起動します。

    CONNECT SYS/AS SYSOPER
    Enter password: password
    
    SHUTDOWN IMMEDIATE
    STARTUP
    
  5. SMTP_OUT_SERVERパラメータの設定が正しいことを確認します。

    CONNECT SYS AS SYSDBA
    Enter password: password
    
    SHOW PARAMETER SMTP_OUT_SERVER
    

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

    NAME                    TYPE              VALUE
    ----------------------- ----------------- ----------------------------------
    SMTP_OUT_SERVER         string            my_imap_mail_server.example.com
    

手順2: 電子メール・セキュリティ・アラートPL/SQLプロシージャの作成

  1. SYSDBA権限を使用してSYSとして接続していることを確認し、DV_OWNERロールを付与されているユーザーに次の権限を付与します。

    (DV_ADMINロールを付与されているユーザーを選択することもできますが、このチュートリアルでは、DV_OWNERロールを持つユーザーを選択します。)

    次に例を示します。

    CONNECT SYS AS SYSDBA
    Enter password: password
    
    GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO lbrown_dvowner;
    GRANT EXECUTE ON UTL_TCP TO lbrown_dvowner;
    GRANT EXECUTE ON UTL_SMTP TO lbrown_dvowner;
    GRANT EXECUTE ON UTL_MAIL TO lbrown_dvowner;
    GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO lbrown_dvowner;
    

    PL/SQLパッケージUTL_TCPUTL_SMTPUTL_MAILおよびDBMS_NETWORK_ACL_ADMINは、作成する電子メール・セキュリティ・アラートで使用されます。

  2. DV_OWNERユーザーとしてSQL*Plusに接続します。

    次に例を示します。

    CONNECT lbrown_dvowner
    Enter password: password
    
  3. 次のプロシージャを作成します。

    CREATE OR REPLACE PROCEDURE email_alert AS
    msg varchar2(20000) := 'Realm violation occurred for the ALTER TABLE Command Security Policy rule set. The time is: '; 
    BEGIN
      msg := msg||to_char(SYSDATE, 'Day DD MON, YYYY HH24:MI:SS'); 
    UTL_MAIL.SEND (
        sender      => 'youremail@example.com',
        recipients  => 'recipientemail@example.com',
        subject     => 'Table modification attempted outside maintenance!',
        message     => msg); 
    END email_alert;
    /
    

    youremail@example.comを自分の電子メール・アドレスに置き換え、recipientemail@example.comを通知を受け取るユーザーの電子メール・アドレスに置き換えます。

  4. このプロシージャに対するEXECUTE権限をDVSYSに付与します。

    GRANT EXECUTE ON email_alert TO DVSYS; 
    

手順3: ネットワーク・サービス用のアクセス制御リストの構成

UTL_MAILなどのPL/SQLネットワーク・ユーティリティを使用するには、あらかじめ、外部ネットワーク・サービスに対してファイングレイン・アクセスを有効にするアクセス制御リスト(ACL)ファイルを構成する必要があります。このトピックの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

電子メール・アラートのアクセス制御リストを構成するには、次のようにします。

  1. DV_OWNERユーザーとしてSQL*Plusにログインし、次のアクセス制御リストおよびその権限定義を作成します。

    BEGIN
     DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
      acl          => 'mail_server_permissions.xml', 
      description  => 'Enables network permissions for the mail server',
      principal    => 'LBROWN_DVOWNER',
      is_grant     => TRUE, 
      privilege    => 'connect');
    END;
    /
    

    プリンシパル設定のユーザー名は、大文字で正確に入力してください。このチュートリアルでは、Database Vault所有者アカウントの名前(LBROWN_DVOWNERなど)を入力します。

  2. アクセス制御リストを電子メール・サーバーの送信SMTPネットワーク・ホストに割り当てます。

    BEGIN
     DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
      acl         => 'mail_server_permissions.xml',
      host        => 'SMTP_OUT_SERVER_setting', 
      lower_port  => port); 
    END;
    /
    

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

    • SMTP_OUT_SERVER_setting: 「手順1: UTL_MAIL PL/SQLパッケージのインストールと構成」SMTP_OUT_SERVERパラメータに設定したSMTP_OUT_SERVER設定を入力します。この設定は、電子メール・ツールで送信サーバーに指定されている設定と完全に一致させてください。

    • port: 電子メール・ツールで送信サーバーに指定されているポート番号を入力します。通常、この設定は25です。lower_portupper_portの両方の設定に対してこの値を入力します。(現在、UTL_MAILパッケージではSSLをサポートしていません。メール・サーバーがSSLサーバーの場合、そのメール・サーバーが別のポート番号を使用していても、ポート番号に25を入力します。)

  3. 変更をデータベースにコミットします。

    COMMIT;
    
  4. これまでに作成した設定をテストします。

    EXEC EMAIL_ALERT;
    COMMIT;
    

    SQL*Plusに「PL/SQL procedure successfully completed」というメッセージが表示されます。まもなく、電子メール・サーバーの速度に応じて、電子メール・アラートを受信します。

    ORA-24247: network access denied by access control list (ACL)エラーに続いて ORA-06512: at stringline stringエラーが発生する場合は、アクセス制御リスト・ファイルの設定をチェックしてください。

手順4: 電子メール・セキュリティ・アラートを使用するためのルール・セットおよびコマンド・ルールの作成

  1. DV_OWNERユーザーとして、次のルール・セットを作成します。

    BEGIN
     DBMS_MACADM.CREATE_RULE_SET(
      rule_set_name    => 'ALTER TABLE Command Security Policy', 
      description      => 'This rule set allows ALTER TABLE only during the 
                           maintenance period.', 
      enabled          => DBMS_MACUTL.G_YES,
      eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ALL ,
      audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_FAIL,,
      fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
      fail_message     => '',
      fail_code        => NULL,
      handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_FAIL,
      handler          => 'dbavowner.email_alert');
    END;
    /
    
  2. 次のようなルールを作成します。

    ここでは、テストする間持続するようにルールを設定します。たとえば、午後2時から午後3時までの時間帯にテストする場合、次のようにルールを作成します。

    BEGIN
     DBMS_MACADM.CREATE_RULE(
      rule_name  => 'Restrict Access to Maintenance Period', 
      rule_expr  => 'TO_CHAR(SYSDATE,''HH24'') BETWEEN ''14'' AND ''15''');
    END;
    /
    

    HH2414および15には、二重引用符ではなく、必ず2つの一重引用符を使用してください。

    コンピュータのシステム時間は、次のSQL文を発行してチェックできます。

    SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
    

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

    TO
    --
    14
    

    後から、ルールの動作に問題がなければ、次のように、サイトで通常メンテナンス作業が実行される時間(たとえば、午後7時から午後10時までの間)にルールを更新できます。

    BEGIN
     DBMS_MACADM.UPDATE_RULE(
      rule_name  => 'Restrict Access to Maintenance Period', 
      rule_expr  => 'TO_CHAR(SYSDATE,''HH24'') BETWEEN ''19'' AND ''22''');
    END;
    /
    
  3. Restrict Access to Maintenance PeriodルールをALTER TABLE Command Security Policyルール・セットに追加します。

    BEGIN
     DBMS_MACADM.ADD_RULE_TO_RULE_SET(
      rule_set_name => 'ALTER TABLE Command Security Policy', 
      rule_name     => 'Restrict Access to Maintenance Period'); 
    END;
    /
    
  4. 次のコマンド・ルールを作成します。

    BEGIN
     DBMS_MACADM.CREATE_COMMAND_RULE(
      command         => 'ALTER TABLE', 
      rule_set_name   => 'ALTER TABLE Command Security Policy', 
      object_owner    => 'SCOTT', 
      object_name     => '%', 
      enabled         => DBMS_MACUTL.G_YES);
    END; 
    /
    
  5. これらの更新をデータベースにコミットします。

    COMMIT;
    

手順5: 電子メール・セキュリティ・アラートのテスト

  1. ユーザーSCOTTとしてSQL*Plusに接続します。

    次に例を示します。

    CONNECT SCOTT
    Enter password: password
    

    SCOTTアカウントがロックされて無効になっている場合、DV_ACCTMGRロールを持つユーザーが、このアカウントのロックを解除し、新しいパスワードを次のように作成できます。

    ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY password;
    

    passwordをセキュアなパスワードに置き換えます。パスワードを作成するための最小限の要件は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  2. ユーザーSCOTTとして、テスト表を作成します。

    CREATE TABLE mytest (col1 number);
    
  3. コンピュータのシステム時間を、ALTER TABLE Command Security Policyルール・セットが実行される時間(午後2時から3時の間など)に変更します。

    UNIX: rootとしてログインし、dateコマンドを使用して時間を設定します。たとえば、今日の日付が2011年12月14日だとすると、次のように入力します。

    su root
    Password: password
    
    date --set="14 DEC 2011 14:00:00"
    

    Windows: 通常画面の右下隅にある時計アイコンをダブルクリックします。「日付と時刻のプロパティ」ウィンドウで、時刻を午後2時に設定し、「OK」をクリックします。

  4. my_test表の変更を試みます。

    ALTER TABLE mytest ADD (col2 number);
    
    Table altered.
    

    SCOTTは、この時間帯にmytest表を変更できます。

  5. システム時間をRestrict Access to Maintenance Period時間外の時刻に再設定します。

  6. SCOTTとしてログインし、再度my_test表の変更を試みます。

    CONNECT SCOTT
    Enter password: password
    
    ALTER TABLE mytest ADD (col3 number);
    

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

    ORA-47400: Command Rule violation for ALTER TABLE on SCOTT.MYTEST
    

    SCOTTmytest表を変更できません。まもなく、「Table modification attempted outside maintenance!」という件名で、次のようなメッセージの電子メールを受信します。

    Realm violation occurred for the ALTER TABLE Command Security Policy rule set. The time is: Wednesday 06 MAY, 2009 14:24:25
    
  7. システム時間を正しい時刻に再設定します。

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

  1. DV_OWNERユーザーとしてSQL*Plusに接続し、次に示した順序でOracle Database Vaultルール・コンポーネントを削除します。

    EXEC DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('ALTER TABLE Command Security Policy', 'Restrict Access to Maintenance Period');
    EXEC DBMS_MACADM.DELETE_RULE('Restrict Access to Maintenance Period');
    EXEC DBMS_MACADM.DELETE_COMMAND_RULE('ALTER TABLE', 'SCOTT', '%');
    EXEC DBMS_MACADM.DELETE_RULE_SET('ALTER TABLE Command Security Policy');
    
  2. email_alert PL/SQLプロシージャを削除します。

    DROP PROCEDURE email_alert;
    
  3. アクセス制御リストを削除します。

    EXEC DBMS_NETWORK_ACL_ADMIN.DROP_ACL ('email_alert_permissions.xml');
    
  4. ユーザーSCOTTとして接続し、mytest表を削除します。

    CONNECT SCOTT
    Enter password: password
    
    DROP TABLE mytest;
    
  5. SYSDBA権限を使用してSYSとして接続し、DV_OWNERユーザーから、PL/SQLパッケージUTL_TCPUTL_SMTPおよびUTL_MAILに対するEXECUTE権限を取り消します。

    次に例を示します。

    REVOKE EXECUTE ON UTL_TCP FROM lbrown_dvowner;
    REVOKE EXECUTE ON UTL_SMTP FROM lbrown_dvowner;
    REVOKE EXECUTE ON UTL_MAIL FROM lbrown_dvowner;
    REVOKE EXECUTE ON DBMS_NETWORK_ACL_ADMIN from lbrown_dvowner;
    
  6. SMTP_OUT_SERVERパラメータを元の値に設定します。

    次に例を示します。

    ALTER SYSTEM SET SMTP_OUT_SERVER="some_value.example.com";
    
  7. SYSOPER権限を使用してSYSとして接続し、データベースを再起動します。

    CONNECT SYS/AS SYSOPER
    Enter password: password
    
    SHUTDOWN IMMEDIATE
    STARTUP
    

チュートリアル: 二人制整合性(デュアル・キー・セキュリティ)の構成

この項の内容は次のとおりです。

このチュートリアルの概要

このチュートリアルでは、二人制整合性(TPI)(デュアル・キー・セキュリティ、デュアル・キー接続や二人制ルール・セキュリティとも呼ばれる)を定義するルール・セットを構成します。このタイプのセキュリティでは、アクションの認可に、1人ではなく2人のユーザーが必要です。あるユーザーがタスクを開始するには、別のユーザーがそのユーザーに対するセーフティ・チェックを行います。二人制整合性では、危険を伴う可能性のあるアクションに対して、追加のセキュリティの層が用意されます。このタイプのシナリオは、データベース・パッチの更新などのタスクに使用されることが多く、このチュートリアルでもこのタスクを使用します。ユーザーpatch_userデータベース・パッチのアップグレードを実行するにはログインが必要ですが、このユーザーがログインするにはマネージャpatch_bossがログインしている必要があります。patch_userがログイン可能かどうかを制御するファンクション、ルール、ルール・セットおよびコマンド・ルールを作成します。

手順1: このチュートリアル用のユーザーの作成

このチュートリアルでは、次の2人のユーザーを作成する必要があります。

  • patch_bossはスーパーバイザ・ロールとして機能します。patch_bossがログインしていない場合、patch_userユーザーはログインできません。

  • patch_userは、パッチの更新の実行が割り当てられているユーザーです。ただし、このチュートリアルでは、ユーザーはpatch_user実際にはパッチの更新を実行しません。ログインを試行するのみです。

ユーザーを作成するには、次のようにします。

  1. DV_ACCTMGRロールを付与されているユーザーとしてSQL*Plusに接続します。

    次に例を示します。

    CONNECT amalcolm_dvacctmgr
    Enter password: password
    
  2. 次のユーザーを作成します。

    CREATE USER patch_boss IDENTIFIED BY password;
    CREATE USER patch_user IDENTIFIED BY password;
    

    passwordをセキュアなパスワードに置き換えます。パスワードを作成するための最小限の要件は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  3. SYSDBA権限を持つユーザーSYSとして接続し、patch_bossユーザーおよびpatch_userユーザーに権限を付与します。

    CONNECT SYS AS SYSDBA
    Enter password: password
    
    GRANT CREATE SESSION TO patch_boss, patch_user;
    
  4. 次の権限をDV_OWNERユーザーまたはDV_ADMINユーザーに付与します。

    次に例を示します。

    GRANT CREATE PROCEDURE TO lbrown_dvowner;
    GRANT SELECT ON V_$SESSION TO lbrown_dvowner;
    

    V_$SESSION表はV$SESSION動的ビューの基となる表です。

実際のシナリオでは、DV_OWNERユーザーとしてもログインし、DV_PATCH_ADMINロールをpatch_userユーザーに付与します(patch_bossには付与しません)。しかし、このチュートリアルでは、実際にはデータベース・パッチの更新を実行しないため、このロールをpatch_userユーザーに付与する必要はありません。

手順2: ユーザーpatch_bossがログインしているかどうかをチェックするファンクションの作成

作成するファンクションcheck_boss_logged_inは、ユーザーpatch_userがSQL*Plusへのログインを試行したときに、V$SESSIONデータ・ディクショナリ・ビューに問い合せて、ユーザーpatch_bossがログインしているかどうかをチェックします。

check_boss_logged_inファンクションを作成するには、次のようにします。

  1. DV_OWNERまたはDV_ADMINユーザーとして、次のようなcheck_boss_logged_inファンクションを作成します。

    CREATE OR REPLACE FUNCTION check_boss_logged_in
    return varchar2
    authid definer as 
     
    v_session_number number := 0;
    v_allow varchar2(10)    := 'TRUE';
    v_deny varchar2(10)     := 'FALSE';
     
    BEGIN
      SELECT COUNT(*) INTO v_session_number
      FROM SYS.V_$SESSION
      WHERE USERNAME = 'PATCH_BOSS'; -- Enter the user name in capital letters.
     
     IF v_session_number > 0
      THEN RETURN v_allow;
     ELSE
      RETURN v_deny;
     END IF;
    END check_boss_logged_in;
    /
    
  2. check_boss_logged_inファンクションのEXECUTE権限をDVSYSスキーマに付与します。

    GRANT EXECUTE ON check_boss_logged_in to DVSYS;
    

手順3: ユーザーのアクセスを制御するためのルール、ルール・セットおよびコマンド・ルールの作成

次に、2つのルール、それらを追加するルール・セットおよびコマンド・ルールを作成します。このルール・セットは、ユーザーpatch_userがデータベースにログインしようとしたときに、check_boss_logged_inファンクションをトリガーします。

ルールとルール・セットを追加するには、次のようにします。

  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとして接続します。

    次に例を示します。

    CONNECT lbrown_dvowner
    Enter password: password
    
  2. patch_userユーザーがデータベースにログインしていることをチェックするCheck if Boss Is Logged Inルールを作成します。定義内のlbrown_dvownerを、check_boss_logged_inファンクションを作成したDVOWNERユーザーまたはDV_ADMINユーザーに置き換えます。

    check_boss_logged_inファンクションがTRUEを返した場合(つまりpatch_bossは別のセッションにログインしている)、patch_userはログインできます。

    BEGIN
      DBMS_MACADM.CREATE_RULE(
      rule_name => 'Check if Boss Is Logged In',
      rule_expr => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''PATCH_USER'' and lbrown_dvowner.check_boss_logged_in =  ''TRUE'' ');
    END;
    /
    

    ユーザー名PATCH_USERを大文字で入力します(SESSION_USERパラメータはユーザー名を大文字で保存します)。

  3. ログインしているユーザー(patch_user)がユーザーpatch_bossでないことを確認するAllow Connect for Other Database Usersルールを作成します。他のすべての有効なユーザーのログインの許可も行います。

    BEGIN
     DBMS_MACADM.CREATE_RULE(
      rule_name => 'Allow Connect for Other Database Users',
      rule_expr => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''PATCH_USER''');
    END;
    /
    COMMIT;
    
  4. 上司とパッチ担当者のデュアル接続のルール・セットを作成して、このルール・セットに2つのルールを追加します。

    BEGIN
         DBMS_MACADM.CREATE_RULE_SET(
         rule_set_name => 'Dual Connect for Boss and Patch',
         description => 'Checks if both boss and patch users are logged in.',
         enabled           => DBMS_MACUTL.G_YES,
         eval_options      => DBMS_MACUTL.G_RULESET_EVAL_ANY,
         audit_options     => DBMS_MACUTL.G_RULESET_AUDIT_FAIL,
         fail_options      => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
         fail_message      =>'',
         fail_code         => NULL,
         handler_options   => DBMS_MACUTL.G_RULESET_HANDLER_OFF,
         handler           => ''
         );
    END;
    /
    
    BEGIN
         DBMS_MACADM.ADD_RULE_TO_RULE_SET(
         rule_set_name     => 'Dual Connect for Boss and Patch',
         rule_name         => 'Check if Boss Is Logged In'
       );
    END;
    /
    
    BEGIN
         DBMS_MACADM.ADD_RULE_TO_RULE_SET(
         rule_set_name     => 'Dual Connect for Boss and Patch',
         rule_name         => 'Allow Connect for Other Database Users'
       );
    END;
    /
    
  5. patch_bossがログインしている場合にのみユーザーpatch_userにデータベースへの接続を許可する、次のCONNECTコマンド・ルールを作成します。

    BEGIN
       DBMS_MACADM.CREATE_COMMAND_RULE(
       command             => 'CONNECT',
        rule_set_name      => 'Dual Connect for Boss and Patch',
        object_owner       => '%',
        object_name        => '%',
        enabled            => DBMS_MACUTL.G_YES);
    END;
    /
    COMMIT;
    

手順4: ユーザーのアクセスのテスト

  1. SQL*Plusを終了します。

    EXIT
    
  2. 次のように2つ目のシェルを作成します。

    xterm &
    
  3. 最初のシェルで、ユーザーpatch_userとしてログインします。

    sqlplus patch_user
    Enter password: password
    
    ERROR:
    ORA-47400: Command Rule violation for CONNECT on LOGON
    
    Enter user-name:
    

    patch_bossがログインするまで、ユーザーpatch_userはログインできません。(まだEnter user-nameプロンプトを試さないでください。)

  4. 2つ目のシェルで、ユーザーpatch_bossとしてログインします。

    sqlplus patch_boss
    Enter password: password
    Connected. 
    

    ユーザーpatch_bossはログインできます。

  5. 最初のシェルに戻って、ユーザーpatch_userとしてログインを再試行します。

    Enter user_name: patch_user
    Enter password: password
    

    ユーザーpatch_userは有効なユーザーとみなされ、ログインできます。

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

  1. ユーザーpatch_bossのセッションで、SQL*Plusを終了してシェルを閉じます。

    EXIT
    
  2. 最初のシェルで、ユーザーDV_ACCTMGRを接続し、作成したユーザーを削除します。

    CONNECT amalcolm_dvacctmgr
    Enter password: password
    
    DROP USER patch_boss;
    DROP USER patch_user;
    
  3. SYSDBA権限を持つユーザーSYSとして接続し、DV_OWNERユーザーまたはDV_ADMINユーザーに付与した権限を取り消します。

    CONNECT SYS AS SYSDBA
    Enter password: password
    
    REVOKE CREATE PROCEDURE FROM lbrown_dvowner;
    REVOKE SELECT ON V_$SESSION FROM lbrown_dvowner;
    
  4. DV_OWNERまたはDV_ADMINユーザーとして接続し、ルール、ルール・セットおよびコマンド・ルールを示した順に削除します。

    CONNECT lbrown_dvowner
    Enter password: password
    
    DROP FUNCTION check_boss_logged_in;
    EXEC DBMS_MACADM.DELETE_COMMAND_RULE('CONNECT', '%', '%');
    EXEC DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('Dual Connect for Boss and Patch', 'Check if Boss Is Logged In');
    EXEC DBMS_MACADM.DELETE_RULE_FROM_RULE_SET('Dual Connect for Boss and Patch', 'Allow Connect for Other Database Users');
    EXEC DBMS_MACADM.DELETE_RULE('Check if Boss Is Logged In');
    EXEC DBMS_MACADM.DELETE_RULE('Allow Connect for Other Database Users');
    EXEC DBMS_MACADM.DELETE_RULE_SET('Dual Connect for Boss and Patch');
    COMMIT;
    

ルール・セット設計のガイドライン

次に示すルール・セット設計のガイドラインに従ってください。

  • ルールは、複数のルール・セット間で共有できます。これにより、再利用可能なルール式のライブラリを作成できます。個別で式の目的が1つであるルールを設計することをお薦めします。

  • 評価が静的な、すなわちユーザー・セッション中に1回のみ評価されるルール・セットを設計できます。関連付けられているコマンド・ルールがルール・セットにアクセスするたびに評価することもできます。ルール・セットが1回のみ評価される場合、コマンド・ルールがルール・セットにアクセスするたびに、評価された値がユーザー・セッションで再利用されます。静的な評価の使用は、ルール・セットに複数回アクセスする必要があるが、ルール・セットが依存する条件はセッション中に変化しない場合に便利です。たとえば、ルール・セットに関連付けられているSELECTコマンド・ルールは、同じSELECT文が複数回実行される際、評価された値が再利用可能であれば、SELECTが実行されるたびにルール・セットを評価するかわりに、評価された値を再利用できます。

    ルール・セットの静的な評価を制御するには、DBMS_MACADM PL/SQLパッケージのCREATE_RULE_SETまたはUPDATE_RULE_SETプロシージャのis_staticパラメータを設定します。詳細は、「DBMS_MACADMのルール・セット・プロシージャ」を参照してください。

  • 再利用性とルール式で使用される値の信頼性を実現するために、ルール式にはOracle Database Vaultファクタを使用します。ファクタにはルール式で使用可能なコンテキスト情報が用意されています。

  • カスタム・イベント・ハンドラを使用して、Oracle Database Vaultセキュリティ・ポリシーを拡張し、エラー処理またはアラート通知のための外部システムを統合できます。このような統合を行うには、UTL_TCPUTL_HTTPUTL_MAILUTL_SMTPまたはDBMS_AQなどのOracleユーティリティ・パッケージを使用すると便利です。

  • 機密データを保護するレルムやコマンド・ルールにルール・セットを適用する前に、テスト・データベース、または機密データ以外のデータ用のテスト・レルムやコマンド・ルール上で、様々なアカウントやシナリオに関してルール・セットを十分にテストします。次のSQL文を使用して、ルール式を直接テストできます。

    SQL> SELECT SYSDATE from DUAL where rule expression
    
  • 単一のルールにルール式をネストできます。これにより、ルールのサブセットに論理的AND、およびその他のルールに論理的ORが必要になる複雑な状況を作成できます。この一例として、「チュートリアル: セキュリティ違反の電子メール・アラートの作成」に記載されているIs Corporate Network During Maintenanceルール・セットの定義を参照してください。

  • 起動者権限プロシージャとルール式を組み合せて使用できません。定義者権限プロシージャのみルール式と組み合せて使用できます。

ルール・セットのパフォーマンスへの影響

一般的に、ルールが多く複雑になるほど、これらのルール・セットで制御されている特定の操作を実行する際のパフォーマンス・オーバーヘッドが増加します。たとえば、SELECT文を制御するルール・セットに大量のルールが含まれる場合は、パフォーマンスが大幅に低下する可能性があります。

多数のルールが必要なルール・セットがある場合、すべてのルールを単一のPL/SQLスタンドアロンまたはパッケージ・ファンクションに定義されているロジックに移動すると、パフォーマンスが向上します。ただし、ルールが他のルール・セットに使用されている場合、システムのパフォーマンスにはほとんど影響ありません。

可能であれば、静的な評価を使用するようにルール・セットを設定することを検討してください(関連付けられているコマンド・ルールの使用と互換性があると想定して)。詳細は、「ルール・セット設計のガイドライン」を参照してください。

Oracle Enterprise Manager(デフォルトでOracle DatabaseとともにインストールされるOracle Enterprise Manager Database Controlを含む)、StatspackおよびTKPROFなどのツールを実行してシステム・パフォーマンスを確認できます。Oracle Enterprise Managerの詳細は、Oracle Enterprise Managerのドキュメント・セットを参照してください。Database Controlの詳細は、オンライン・ヘルプを参照してください。StatspackおよびTKPROFユーティリティについては、『Oracle Databaseパフォーマンス・チューニング・ガイド』で説明されています。

関連するレポートおよびデータ・ディクショナリ・ビュー

表5-1に、ルール・セットおよびそのルールの分析に便利なOracle Database Vaultレポートを示します。これらのレポートの実行方法の詳細は、第18章「Oracle Database Vaultレポート」を参照してください。

表5-1 ルール・セットに関連するレポート

レポート 説明

「「ルール・セット構成の問題」レポート」


ルールが定義されていない、または有効でないルール・セットが表示されます。

「「セキュア・アプリケーション構成の問題」レポート」


不完全または無効なルール・セットのあるセキュア・アプリケーション・ロールが表示されます。

「「コマンド・ルール構成の問題」レポート」


不完全または無効なルール・セットが表示されます。


表5-2に、既存のルールおよびルール・セットに関する情報を提供するデータ・ディクショナリ・ビューを示します。

表5-2 ルールおよびルール・セットに使用されるデータ・ディクショナリ・ビュー

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

「DVSYS.DBA_DV_RULEビュー」


定義済のルールが表示されます。

「DVSYS.DBA_DV_RULE_SETビュー」


作成済のルール・セットが表示されます。

「DVSYS.DBA_DV_RULE_SET_RULEビュー」


既存のルール・セットに関連付けられているルールが表示されます。