日本語PDF

5 ルール・セットの構成

ルール・セットにより1つ以上のルールがグループ化され、ルールによりユーザーがオブジェクトでアクションを実行できるかどうかが決定されます。

5.1 ルール・セットの概要

ルール・セットとは、1つ以上のルールの集合のことです。

ルール・セットは、レルム認可、ファクタ割当て、コマンド・ルールまたはセキュア・アプリケーション・ロールに関連付けることができます。

ルール・セットは、それに含まれる各ルールと評価タイプ(「すべてのTrue」または「いずれかTrue」)に基づいて、trueまたはfalseに評価されます。ルール・セット内のルールは、TrueまたはFalseと評価されるPL/SQL式です。ルールを作成し、そのルールを複数のルール・セットに追加できます。

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

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

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

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

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

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

5.2 マルチテナント環境におけるルール・セットとルール

マルチテナント環境では、PDBまたはアプリケーション・ルートでルール・セットおよびその関連付けられたルールを作成できます。

共通レルムでは、関連付けられたレルムまたはコマンド・ルールをDatabase Vaultで評価するときに、共通ルール・セットを使用する必要があります。共通ルール・セットとそのルールは、アプリケーション・ルートでのみ作成できます。共通ルール・セットは、作成後、共通ルール・セットを作成したルートに関連付けられているすべてのコンテナ内に存在します。共通ルール・セットは、共通ルールのみを含むことができます。

共通ルール・セットとそのルールを構成するには、DV_OWNERまたはDV_ADMINロールが共通で付与されている必要があります。

5.3 リリース12.2より前のリリースのデフォルト・ルールおよびデフォルト・ルール・セット

以前のリリースで提供されていた多数のデフォルト・ルールおよびデフォルト・ルール・セットは、サポートされなくなりましたが、現在のOracle Databaseインストールで使用されている場合があります。

Oracle Databaseリリース12.2より前のリリースのデフォルト・ルールおよびデフォルト・ルール・セットを使用している場合、Oracle Databaseでは、それらは、独自の用途のためにカスタマイズしてあった場合にはアップグレード中に削除されません。これらのルールおよびルール・セットをカスタマイズした場合、またはこれらの古いデフォルト・ルール・セットを使用する場合は、ALTER SYSTEMおよびALTER SESSIONコマンド・ルールを使用することで、カスタマイズしたそれらのルールおよびルール・セットを再実装してから、古いルールおよびルール・セットを無効化し削除することをお薦めします。これらのルールおよびルール・セットをカスタマイズしていない場合、または使用しない場合は、以降のデフォルトのコマンド・ルールで同じ機能を使用できるため、以前のルールおよびルール・セットを削除する必要があります。

ノート:

影響を受ける可能性があるルールおよびルール・セットの完全なリストは、リリース12.2バージョンのOracle Database Vault管理者ガイドを参照してください。

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

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

DBA_DV_RULE_SETデータ・ディクショナリ・ビューを問い合せることで、ルール・セットをすべて示すリストを確認できます。ルール・セットに関連付けられているルールを確認するには、DBA_DV_RULE_SET_RULEデータ・ディクショナリ・ビューを問い合せます。

デフォルトのルール・セットは次のとおりです。

  • データファイル・ヘッダーのダンプを許可: このルール・セットは、データ・ブロックのダンプを防ぎます。

  • システム変更用のファイングレイン・コントロールを許可: このルール・セットにより、ユーザーがALTER SYSTEM SQL文を使用して初期化パラメータを設定できるかどうかを制御できるようになります。

  • システム・パラメータのファイングレイン・コントロールを許可: ノート: このルール・セットは非推奨になりました。

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

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

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

    • 「オプティマイザ・パラメータが許可されているか」のルール: OPTIMIZER_SECURE_VIEW_MERGING = FALSEを設定できます(ただしTRUEは指定できません)。

    • 「PL-SQLパラメータが許可されているか」のルール: PLSQL_DEBUG = FALSEを設定できます(ただし、TRUEは指定できません)。

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

      パラメータA-A パラメータO-S

      AUDIT_SYS_OPERATIONS = FALSE

      OS_ROLES = TRUE

      AUDIT_TRAIL = NONEまたはFALSE

      REMOTE_OS_ROLES = TRUE

      AUDIT_SYSLOG_LEVEL

      SQL92_SECURITY = FALSE

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

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

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

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

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

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

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

  • AUDIT_SYS_OPERATIONSをFalseに設定することはできません: AUDIT_SYS_OPERATIONS初期化パラメータがFALSEに設定されないようにします。統合監査が有効になっている場合は、AUDIT_SYS_OPERATIONSパラメータの効果はありません。

  • OPTIMIZER_SECURE_VIEW_MERGINGをTrueに設定することはできません: OPTIMIZER_SECURE_VIEW_MERGING初期化パラメータがTRUEに設定されないようにします。

  • OS_ROLESをTrueに設定することはできません: OS_ROLES初期化パラメータがTRUEに設定されないようにします。

  • PLSQL_DEBUGをTrueに設定することはできません: PLSQL_DEBUG初期化パラメータがTRUEに設定されないようにします。

  • REMOTE_OS_ROLESをTrueに設定することはできません: REMOTE_OS_ROLES初期化パラメータがTRUEに設定されないようにします。

  • SQL92_SECURITYをFalseに設定することはできません: SQL92_SECURITYFALSEに設定されないようにします。

  • AUDIT_TRAILをオフにすることはできません: AUDIT_TRAIL初期化パラメータが無効にされないようにします。統合監査が有効になっている場合は、AUDIT_TRAILパラメータの効果はありません。

5.5 ルール・セットの作成

ルール・セットを作成するには、まずルール・セットを作成し、次にそのルール・セットを編集して1つ以上のルールに関連付けることができます。

作成したルール・セットに新しいルールを関連付ける、既存のルールを追加する、またはそのルール・セットからルールの関連付けを削除することが可能です。
  1. DV_OWNERまたはDV_ADMINロールおよびSELECT ANY DICTIONARY権限を付与されているユーザーとして、Cloud ControlからOracle Database Vault Administratorにログインします。ログイン方法については、「Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン」を参照してください。
  2. 「管理」ページの「Database Vaultコンポーネント」で、「ルール・セット」をクリックします。
  3. 「ルール・セット」ページで、「作成」をクリックして「ルール・セットの作成」ページを表示します。
  4. 「一般」ページで、次の情報を入力します。
    • 名前: ルール・セットの名前を入力します。大/小文字の両方を使用して90文字以内で指定できます。空白を使用できます。この属性は必須です。

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

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

      ルール・セットのビジネス要件を説明できます。たとえば:

      Rule to limit access to SQL*Plus
      
    • 統計ルール・セット: ルール・セットがユーザー・セッション中にアクセスされるときの評価の頻度を制御できます。統計ルール・セットは、ユーザー・セッションで初めてアクセスされる際に一度評価されます。その後、評価された値はユーザー・セッションで再利用されます。その一方で、非統計ルール・セットは、アクセスされるたびに評価されます。

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

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

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

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

  5. 「次へ」をクリックして、「ルールとの関連付け」ページを表示します。
  6. 次のいずれかのオプションを選択します。
    • 既存のルールの追加: 「使用可能なルール」リストをダブルクリックして、ルールを「選択したルール」リストに移動し、「OK」をクリックします。

    • ルールの作成: 名前と、TrueまたはFalseに評価されるWHERE句式を入力します。「OK」をクリックします。詳細は、「ルール・セットに追加するルールの作成」を参照してください。

  7. 「次へ」をクリックして、「エラー処理および監査オプション」ページを表示します。
  8. 次の情報を入力します。
    • エラー処理: 「エラー・メッセージの表示」または「エラー・メッセージを表示しない」を選択します。

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

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

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

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

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

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

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

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

    • カスタム・イベント・ハンドラ・ロジック: 大/小文字混在で255文字以内のPL/SQL式を入力します。式には、任意のパッケージ・プロシージャまたはスタンドアロン・プロシージャを含めることができます。独自の式を作成するか、「Oracle Database Vaultルール・セットのAPI」で説明されている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: ハンドラ処理にルール・セットの名前と戻り値が不要な場合に、この書式を使用します。

      起動者権限プロシージャをイベント・ハンドラとして使用できないことに注意してください。使用した場合、ルール・セットの評価が予想外に失敗することがあります。定義者権限プロシージャのみをイベント・ハンドラとして使用してください。

      次の構文を使用します。

      myschema.my_ruleset_handler
      
    • 監査オプション: 次のオプションから選択すると、非統合監査環境でルール・セットの監査レコードが生成されます。Oracle Database Vaultは、監査証跡をDVSYS.AUDIT_TRAIL$表に書き込みます。(統合監査が有効な場合、この設定では監査レコードは取得されません。かわりに、この情報を取得する統合監査ポリシーを作成する必要があります。)

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

      • 成功時に監査: ルール・セットがTrueに評価されると、監査レコードが作成されます。

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

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

  9. 「次へ」をクリックして確認ページを表示します。
  10. 設定を確認して、納得のいく場合は「終了」をクリックします。

関連項目:

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

ルールは制御する動作を定義し、ルール・セットは名前付きのルールの集合です。

5.6.1 ルールの作成について

ルールは、ルール・セットの作成プロセス中またはそれに関係なく作成できます。

ルールを作成したら、ルール・セットを1つ以上の追加ルールに関連付けられます。

ルール・セットの作成プロセス中に新しいルールを作成する場合、そのルールは、現在のルール・セットに自動で追加されます。既存のルールをルール・セットに追加することもできます。また、ルール・セットにルールを追加せずに、今後作成するルール・セットのテンプレートとして使用することもできます。

ルールをルール・セットに必要なだけ追加できますが、適切な設計とパフォーマンスの向上のために、ルール・セットを簡単にしておく必要があります。その他のアドバイスについては、「ルール・セットの設計のガイドライン」を参照してください。

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

関連トピック

5.6.2 デフォルト・ルール

デフォルト・ルールとは、アクションがtrueとfalseのいずれに評価されるかのチェックなど、一般的に使用される動作が含まれるルールです。

DBA_DV_RULEデータ・ディクショナリ・ビューを問い合せることで、ルールをすべて示すリストを確認できます。表5-1に、現在のデフォルトOracle Databaseルールを示します。

表5-1 Oracle Database Vaultの現在のデフォルト・ルール

ルール 説明

バックアップ・リストア・パラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

現在のSQL文がRECYCLEBINパラメータを有効にしようとするかどうかを確認します。

データベース・ファイル・パラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

現在のSQL文が制御ファイル関連の構成を変更しようとするかどうかを確認します。

ダンプ・パラメータが許可されているか

現在のSQL文がダンプの宛先に関連する初期化パラメータを変更しようとするかどうかを確認します。

宛先パラメータが許可されているか

現在のSQL文がダンプのサイズ制限に関連する初期化パラメータを変更しようとするかどうかを確認します。

ダンプまたは宛先パラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

現在のSQL文が、ダンプのサイズ制限や宛先に関連する初期化パラメータを変更しようとするかどうかを確認します。

オプティマイザ・パラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

現在のSQL文がOPTIMIZER_SECURE_VIEW_MERGINGパラメータの設定を変更しようとするかどうかを確認します。

PL-SQLパラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

現在のSQL文が、PLSQL_DEBUG初期化パラメータを変更しようとするかどうかを確認します。

セキュリティ・パラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

次の初期化パラメータを無効にしようとするかどうかを確認します。

  • AUDIT_SYS_OPERATIONS

  • AUDIT_TRAIL

  • AUDIT_SYSLOG_LEVEL

  • SQL92_SECURITY

統合監査が有効な場合、AUDIT_SYS_OPERATIONSAUDIT_TRAILおよびAUDIT_SYSLOG_LEVELパラメータによる影響はありません。

このルールにより、次のパラメータは有効になりません。

  • OS_ROLES

  • REMOTE_OS_ROLES

システム・セキュリティ・パラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

次のパラメータが変更しないようにします。

  • DYNAMIC_RLS_POLICIES

  • _SYSTEM_TRIG_ENABLED

False

FALSEに評価されます

Alter DVSYSが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

ログインしたユーザーが、他のユーザーに対するALTER USER文を正常に実行できるかどうかを確認します。

データベース管理者であるか

ユーザーにDBAロールが付与されているかどうかを確認します。

Drop Userが許可されているか

ログインしたユーザーがユーザーを削除できるかどうかを確認します。

ブロックのダンプが許可されているか

ブロックのダンプが許可されているかどうかを確認します。

月の最初の日であるか

指定した日が月の最初の日であるかどうかを確認します。

ラベル管理者であるか

ユーザーにLBAC_DBAロールが付与されているかどうかを確認します。

月の最後の日であるか

指定した日が月の最後の日であるかどうかを確認します。

_dynamic_rls_initパラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

DYNAMIC_RLS_POLICIESパラメータが変更されないようにします。

パラメータ値がFalseか

指定したパラメータ値がFALSEに設定されているかどうかを確認します。

パラメータ値がNoneか

指定したパラメータ値がNONEに設定されているかどうかを確認します。

パラメータ値がFalseでないか

指定したパラメータ値が<> FALSEに設定されているかどうかを確認します。

パラメータ値がNoneでないか

指定したパラメータ値が<> NONEに設定されているかどうかを確認します。

パラメータ値がOffでないか

指定したパラメータ値が<> OFFに設定されているかどうかを確認します。

パラメータ値がOnでないか

指定したパラメータ値が<> ONに設定されているかどうかを確認します。

パラメータ値がTrueでないか

指定したパラメータ値が<> TRUEに設定されているかどうかを確認します。

パラメータ値がOffか

指定したパラメータ値がOFFに設定されているかどうかを確認します。

パラメータ値がOnか

指定したパラメータ値がONに設定されているかどうかを確認します。

パラメータ値がTrueか

指定したパラメータ値がTRUEに設定されているかどうかを確認します。

SYSまたはSYSTEMユーザーであるか

ユーザーがSYSまたはSYSTEMであるかどうかを確認します。

セキュリティ管理者であるか

ユーザーにDV_ADMINロールが付与されているかどうかを確認します。

セキュリティ所有者であるか

ユーザーにDV_OWNERロールが付与されているかどうかを確認します。

ユーザー・マネージャであるか

ユーザーにDV_ACCTMGRロールが付与されているかどうかを確認します。

_system_trig_enabledパラメータが許可されているか

ノート: このデフォルト・ルールは非推奨になりました。

ユーザーが次のシステム・パラメータを変更しようとするかどうかを確認しますが、データベース・リカバリ操作では、このルールにより、これらのパラメータの変更が許可されます。

  • AUDIT_SYS_OPERATIONS: ユーザーがこのルールをFALSEに設定できないようにします。

  • AUDIT_TRAIL: ユーザーがこのルールをNONEまたはFALSEに設定できないようにします。

  • AUDIT_SYSLOG_LEVEL: このパラメータに対するすべての操作をブロックします。

  • CONTROL_FILES: すべての操作をブロックします。

  • OPTIMIZER_SECURE_VIEW_MERGING: ユーザーがこのルールをTRUEに設定できないようにします。

  • OS_ROLES: ユーザーがこのルールをTRUEに設定できないようにします。

  • PLSQL_DEBUG: ユーザーがこのルールをONに設定できないようにします。

  • RECYCLEBIN: ユーザーがこのルールをONに設定できないようにします。

  • REMOTE_OS_ROLES: ユーザーがこのルールをTRUEに設定できないようにします。

  • SQL92_SECURITY: ユーザーがこのルールをFALSEに設定できないようにします。

統合監査が有効な場合、AUDIT_SYS_OPERATIONSAUDIT_TRAILおよびAUDIT_SYSLOG_LEVELパラメータによる影響はありません。

ログイン・ユーザーがオブジェクト・ユーザーである

ログインしたユーザーが、現在のSQL文で変更されようとしているユーザーと同じであるかどうかを確認します。

EXEMPT ACCESS POLICYロールがない

ユーザーにEXEMPT ACCESS POLICYロールが付与されているかどうか、またはユーザーSYSであるかどうかを確認します。

エクスポート・セッションではない

廃止

True

TRUEに評価されます

5.6.3 新規ルールの作成

Enterprise Manager Cloud Controlに新しいルールを作成できます。

  1. DV_OWNERまたはDV_ADMINロールおよびSELECT ANY DICTIONARY権限を付与されているユーザーとして、Cloud ControlからOracle Database Vault Administratorにログインします。ログイン方法については、「Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン」を参照してください。
  2. 「管理」ページの「Database Vaultコンポーネント」で、「ルール」をクリックします。
  3. 作成」ボタンをクリックします。
  4. 「ルールの作成」ページで、次の設定を入力します。
    • 名前: ルールの名前を入力します。大/小文字混在で最大で90文字まで入力できます。

      名前は動詞で始まり、ルールの目的で終わることをお薦めします。たとえば:

      Prevent non-admin access to SQL*Plus
      

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

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

      • SQLのWHERE句で有効です。

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

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

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

      • 現行のデータベース・インスタンスから既存のコンパイルされた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;
        

        以前にリストしたブール例の場合、次のように入力します。

        SELECT TO_CHAR(SYSDATE,'HH24')FROM DUAL;
        
  5. 「OK」をクリックします。

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

1つ以上のルールを作成すると、Enterprise Manager Cloud Controlを使用してルール・セットに追加できます。

  1. DV_OWNERまたはDV_ADMINロールおよびSELECT ANY DICTIONARY権限を付与されているユーザーとして、Cloud ControlからOracle Database Vault Administratorにログインします。ログイン方法については、「Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン」を参照してください。
  2. 「管理」ページの「Database Vaultコンポーネント」で、「ルール・セット」をクリックします。
  3. 既存のルールの追加先のルール・セットを選択して、「編集」をクリックします。
  4. 「ルールとの関連付け」ページになるまで、「次へ」をクリックします。
  5. 「既存のルールの追加」をクリックして、「既存のルールの追加」ダイアログ・ボックスを表示します。
  6. 「既存のルールの追加」ページで、対象のルールを選択して「移動」(すべて移動する場合は「すべて移動」)をクリックし、それらを「選択したルール」リストに移動します。

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

  7. 「OK」をクリックします。
  8. 「完了」「終了」の順にクリックします。

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

ルール・セットからルールを削除する前に、Cloud Controlを使用してそのルールへの様々な参照を見つけることができます。

  1. DV_OWNERまたはDV_ADMINロールおよびSELECT ANY DICTIONARY権限を付与されているユーザーとして、Cloud ControlからOracle Database Vault Administratorにログインします。ログイン方法については、「Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン」を参照してください。
  2. 「管理」ページの「Database Vaultコンポーネント」で、「ルール・セット」をクリックします。

    削除するルールを含むルール・セットが不明な場合は、「Database Vaultコンポーネント」から「ルール」を選択し、削除するルールを選択してから、「表示」オプション(ただし、「表示」メニューではない)を選択します。そのルールに関連付けられているルール・セットが「ルール・セットの使用方法」に示されます。

  3. 既存のルールの追加先のルール・セットを選択して、「編集」をクリックします。
  4. 「ルールとの関連付け」ページになるまで、「次へ」をクリックします。
  5. 削除するルールを選択して、「削除」をクリックします。
  6. 「完了」「終了」の順にクリックします。

ルール・セットからルールを削除しても、そのルールはまだ存在します。必要に応じて、そのルールをその他のルール・セットに関連付けることができます。ルールを削除する場合、「ルール」ページから行うことができます。

5.7 Oracle Database Vaultコンポーネントへのルール・セット参照の削除

ルール・セットを削除する前に、ルール・セットのOracle Database Vaultコンポーネントへの参照を削除する必要があります。

  1. DV_OWNERまたはDV_ADMINロールおよびSELECT ANY DICTIONARY権限を付与されているユーザーとして、Cloud ControlからOracle Database Vault Administratorにログインします。ログイン方法については、「Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン」を参照してください。
  2. 削除するルール・セットの参照を見つけます。

    「ルール・セット」ページで、ルール・セットを選択して「表示」ボタン(「表示」メニューではありません)をクリックします。「ルール・セットの表示」ページで、削除するルール・セットの参照の「ルールセットの使用方法」領域を確認します。「OK」をクリックします。

  3. 「管理」ページの「Database Vaultコンポーネント」で、ルール・セットの参照を含むコンポーネントを選択します(「レルム」など)。
  4. オブジェクトを選択して「編集」をクリックします。
  5. 認可ページになるまで、「次へ」をクリックします。
  6. ルール・セットとともに認可を選択してから、「編集」をクリックし、参照されているオブジェクトを削除します。
  7. 「完了」「終了」の順にクリックします。

5.8 ルール・セットの削除

Enterprise Manager Cloud Controlを使用して、ルール・セットへの参照を見つけてからルール・セットを削除できます。

  1. DV_OWNERまたはDV_ADMINロールおよびSELECT ANY DICTIONARY権限を付与されているユーザーとして、Cloud ControlからOracle Database Vault Administratorにログインします。ログイン方法については、「Oracle Enterprise Cloud ControlからのOracle Database Vaultへのログイン」を参照してください。
  2. ルール・セットへの参照を削除します。
  3. 削除するルール・セットを選択して、「削除」をクリックします。
  4. 「確認」ウィンドウで、「はい」をクリックします。

    ルール・セットが削除されます。オプションで、ルール・セットを削除する前に、ルールとの既存の関連付けを削除できます。

5.9 ルール・セットの動作

ルール・セットの動作を理解すると、より効果的なルール・セットを作成できます。

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

ルール・セット内のルールは、式の集合として評価されます。

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

5.9.2 ルール・セット内でのネストされたルール

ルール・セット内に1つ以上のルールをネストできます。

たとえば、Is Corporate Network During Maintenanceという、次の2つのタスクを実行するネストされたルールを作成するとします。

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

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

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

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

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

1人のユーザー(たとえば特権ユーザー)を除く全員に適用するルールを作成することも可能です。

  • 特定のユーザーを除外するルールを作成するには、SYS_CONTEXTファンクションを使用します。

たとえば:

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

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

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

このチュートリアルは、UTL_MAIL PL/SQLパッケージおよびアクセス制御リストを使用して、セキュリティ違反の電子メール・アラートを作成する方法を示します。

5.10.1 このチュートリアルについて

チュートリアルでは、ユーザーがメンテナンス期間外に表を変更しようとしたときに送信される、電子メール・アラートを作成します。

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

ノート:

このチュートリアルを実行するには、SMTPサーバーがあるデータベースを使用する必要があります。

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

手動でインストールする必要があるUTL_MAIL PL/SQLパッケージには、電子メール通知を管理するためのプロシージャが含まれています。

  1. SYSDBA管理権限を使用してSYSとしてデータベース・インスタンスにログインします。
    sqlplus sys as sysdba
    Enter password: password
    
  2. マルチテナント環境で、適切なプラガブル・データベース(PDB)に接続します。

    たとえば:

    CONNECT SYS@my_pdb AS SYSDBA
    Enter password: password
    

    使用可能なPDBを見つけるには、show pdbsコマンドを実行します。現在のPDBを確認するには、show con_nameコマンドを実行します。

  3. UTL_MAILパッケージをインストールします。
    @$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サーバーをサポートしていないことに注意してください。

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

    たとえば:

    SHOW PARAMETER SMTP_OUT_SERVER
    

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

    NAME                    TYPE              VALUE
    ----------------------- ----------------- ----------------------------------
    SMTP_OUT_SERVER         string            some_value.example.com
    
  5. 次の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"
    
  6. SYSOPER権限を使用してSYSとして接続し、データベースを再起動します。
    CONNECT SYS AS SYSOPER -- Or, CONNECT SYS@hrpdb AS SYSOPER
    Enter password: password
    
    SHUTDOWN IMMEDIATE
    STARTUP
    
  7. SMTP_OUT_SERVERパラメータの設定が正しいことを確認します。
    CONNECT SYS AS SYSDBA -- Or, CONNECT SYS@hrpdb AS SYSDBA
    Enter password: password
    
    SHOW PARAMETER SMTP_OUT_SERVER
    

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

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

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

ユーザーleo_dvownerは、CREATE PROCEDURE文を使用して、電子メール・セキュリティ・アラートを作成できます。

  1. このステップで説明する付与を実行する権限を持つユーザーとして接続しているか確認し、DV_OWNERロールを付与されているユーザーにそのような権限を付与します。また、Oracleシステム権限およびロール管理レルムの所有者として認可されている必要があります。

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

    たとえば:

    CONNECT dba_psmith -- Or, CONNECT dba_psmith@hrpdb
    Enter password: password
    
    GRANT CREATE PROCEDURE, DROP ANY PROCEDURE TO leo_dvowner;
    GRANT EXECUTE ON UTL_TCP TO leo_dvowner;
    GRANT EXECUTE ON UTL_SMTP TO leo_dvowner;
    GRANT EXECUTE ON UTL_MAIL TO leo_dvowner;
    GRANT EXECUTE ON DBMS_NETWORK_ACL_ADMIN TO leo_dvowner;
    

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

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

    たとえば:

    CONNECT leo_dvowner -- Or, CONNECT leo_dvowner@hrpdb
    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;

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

UTL_MAILを使用するには、あらかじめ、外部ネットワーク・サービスに対してファイングレイン・アクセスを有効にするアクセス制御リスト(ACL)を構成する必要があります。

外部ネットワーク・サービスへのファイングレイン・アクセスの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

  1. SQL*Plusで、DV_OWNERユーザーとして次のアクセス制御設定およびその権限定義を構成します。
    BEGIN
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
      host       => 'SMTP_OUT_SERVER_setting',
      lower_port => 25,
      ace        =>  xs$ace_type(privilege_list => xs$name_list('smtp'),
                                 principal_name => 'LEO_DVOWNER,
                                 principal_type => xs_acl.ptype_db));
    END;
    /
    

    この例の説明は、次のとおりです。

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

    • principal_name: LEO_DVOWNERを、DV_OWNERユーザーの名前に置き換えます。

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

  2. 変更をデータベースにコミットします。
    COMMIT;
    
  3. これまでに作成した設定をテストします。
    EXEC EMAIL_ALERT;
    COMMIT;
    

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

    ORA-24247: 「アクセス制御リスト(ACL)によりネットワーク・アクセスが拒否されました」エラーの後にORA-06512: 「string stringエラーが発生した場合は、アクセス制御リスト・ファイル内の設定を確認してください。

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

ルール・セットおよびコマンド・ルールを作成するには、DBMS_MACADM PL/SQLパッケージを使用します。

  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          => 'leo_dvowner.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 ''16'' 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.10.6 ステップ5: 電子メール・セキュリティ・アラートのテスト

アラートを作成すると、テストする準備ができます。

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

    たとえば:

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

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

    ALTER USER SCOTT ACCOUNT UNLOCK IDENTIFIED BY password;
    

    『Oracle Databaseセキュリティ・ガイド』のガイドラインに従って、安全なパスワードでパスワードを置き換えてください。

  2. ユーザーSCOTTとして、テスト表を作成します。
    CREATE TABLE mytest (col1 number);
    
  3. コンピュータのシステム時間を、ALTER TABLE Command Security Policyルール・セットが実行される時間に変更します。

    たとえば、テスト時間帯を午後2時から午後3時の間に設定する場合、次のようにします。

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

    $ su root
    Password: password
    
    $ date -s "08/15/2012 14:48: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 -- Or, CONNECT SCOTT@hrpdb
    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 15 AUG, 2012 14:24:25
    
  7. システム時間を正しい時刻に再設定します。

5.10.7 ステップ6: この例で使用したコンポーネントの削除

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

  1. DV_OWNERユーザーとしてSQL*Plusに接続します。
    CONNECT sec_admin_owen -- Or, CONNECT sec_admin_owen@hrpdb
    Enter password: password
    
  2. 表示された順序で、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');
    
  3. email_alert PL/SQLプロシージャを削除します。
    DROP PROCEDURE email_alert;
    
  4. ユーザーSCOTTとして接続し、mytest表を削除します。
    CONNECT SCOTT -- Or, CONNECT SCOTT@hrpdb
    Enter password: password
    
    DROP TABLE mytest;
    
  5. 他のユーザーから権限を取り消す権限を持つユーザーとして接続します。

    たとえば:

    CONNECT accts_admin_ace -- Or, CONNECT accts_admin_ace@hrpdb
    Enter password: password
    
  6. DV_OWNERユーザーから、UTL_TCPUTL_SMTPおよびUTL_MAIL PL/SQLパッケージに対するEXECUTE権限を取り消します。

    たとえば:

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

    たとえば:

    ALTER SYSTEM SET SMTP_OUT_SERVER="some_value.example.com";
    
  8. SYSOPER管理権限を持つSYSとして接続し、データベースを再起動します。
    CONNECT SYS AS SYSOPER -- Or, CONNECT SYS@hrpdb AS SYSOPER
    Enter password: password
    
    SHUTDOWN IMMEDIATE
    STARTUP

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

このチュートリアルでは、Oracle Database Vaultを使用して2人のユーザーの認可を制御する方法を示します。

5.11.1 このチュートリアルについて

このチュートリアルでは、二人制整合性(TPI)を定義するルール・セットを構成します。

この機能は、デュアル・キー・セキュリティ、デュアル・キー接続および二人制ルール・セキュリティとも呼ばれます。このタイプのセキュリティでは、アクションの認可に、1人ではなく2人のユーザーが必要です。

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

5.11.2 ステップ1: このチュートリアル用のユーザーの作成

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

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

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

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

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

    たとえば:

    sqlplus accts_admin_ace
    Enter password: password
    

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

    sqlplus accts_admin_ace@hrpdb
    Enter password: password
    

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

  2. 次のユーザーを作成し、CREATE SESSION権限を付与します。
    GRANT CREATE SESSION TO patch_boss IDENTIFIED BY password;
    GRANT CREATE SESSION TO patch_user IDENTIFIED BY password;
    

    『Oracle Databaseセキュリティ・ガイド』のガイドラインに従って、安全なパスワードでパスワードを置き換えてください。

  3. SYSDBA管理権限を持つユーザーSYSとして接続します。
    CONNECT SYS AS SYSDBA -- Or, CONNECT SYS@hrpdb AS SYSDBA
    Enter password: password
    
  4. 次の権限をDV_OWNERユーザーまたはDV_ADMINユーザーに付与します。

    たとえば:

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

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

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

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

Database Vault設定の動作は、ファンクションによって決定されます。

作成する必要があるファンクションcheck_boss_logged_inは、ユーザーpatch_userがデータベース・インスタンスへのログインを試行したときに、V$SESSIONデータ・ディクショナリ・ビューに問い合せて、ユーザーpatch_bossがログインしているかどうかを確認します。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとして接続します。

    たとえば:

    CONNECT sec_admin_owen -- Or, CONNECT sec_admin_owen@hrpdb
    Enter password: password
    
  2. 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;
    /
    
  3. check_boss_logged_inファンクションのEXECUTE権限をDVSYSスキーマに付与します。
    GRANT EXECUTE ON check_boss_logged_in to DVSYS;

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

次に、2つのルール、それらを追加するルール・セットおよびコマンド・ルールを作成します。

このルール・セットは、ユーザーpatch_userがデータベースにログインしようとしたときに、check_boss_logged_inファンクションをトリガーします。
  1. DV_OWNERまたはDV_ADMINロールを付与されているユーザーとして接続します。

    たとえば:

    CONNECT sec_admin_owen -- Or, CONNECT sec_admin_owen@hrpdb
    Enter password: password
    
  2. patch_userユーザーがデータベースにログインしていることをチェックするCheck if Boss Is Logged Inルールを作成します。定義内のsec_admin_owenを、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 sec_admin_owen.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      => 2,
         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;

5.11.5 ステップ4: ユーザーのアクセスのテスト

ルールを作成すると、テストする準備ができます。

  1. SQL*Plusを終了します。
    EXIT
    
  2. 2つ目のシェルを作成します。たとえば:
    xterm &
    
  3. 最初のシェルで、ユーザーpatch_userとしてログインします。
    sqlplus patch_user -- Or, sqlplus patch_user@hrpdb
    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 -- Or, sqlplus patch_boss@hrpdb
    Enter password: password
    Connected. 
    

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

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

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

5.11.6 ステップ5: この例で使用したコンポーネントの削除

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

  1. ユーザーpatch_bossのセッションで、SQL*Plusを終了してシェルを閉じます。
    EXIT
    
  2. 最初のシェルで、ユーザーDV_ACCTMGRを接続し、作成したユーザーを削除します。
    CONNECT accts_admin_ace -- Or, CONNECT accts_admin_ace@hrpdb
    Enter password: password
    
    DROP USER patch_boss;
    DROP USER patch_user;
    
  3. SYSDBA管理権限を持つユーザーSYSとして接続して、DV_OWNERまたはDV_ADMINユーザーに付与した権限を取り消します。
    CONNECT SYS AS SYSDBA -- Or, CONNECT SYS@hrpdb AS SYSDBA
    Enter password: password
    
    REVOKE CREATE PROCEDURE FROM sec_admin_owen;
    REVOKE SELECT ON V_$SESSION FROM sec_admin_owen;
  4. DV_OWNERまたはDV_ADMINユーザーとして接続し、ルール、ルール・セットおよびコマンド・ルールを示した順に削除します。
    CONNECT sec_admin_owen -- Or, CONNECT leo_dvowner@hrpdb
    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;

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

Oracleでは、ルール・セット設計のガイドラインを提供しています。

  • ルールは、複数のルール・セット間で共有できます。これにより、再利用可能なルール式のライブラリを作成できます。個別で式の目的が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ルール・セットの定義を参照してください。

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

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

ルールの数および複雑さにより、データベースのパフォーマンスが低下する場合があります。

ルール・セットにより、特定の操作の実行パフォーマンスが管理されます。たとえば、SELECT文を制御するルール・セットに大量のルールが含まれる場合は、パフォーマンスが大幅に低下する可能性があります。

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

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

システム・パフォーマンスを確認するには、Oracle Enterprise Manager(Oracle Databaseと一緒にデフォルトでインストールされるOracle Enterprise Manager Cloud Controlを含む)、自動ワークロード・リポジトリ(AWR)およびTKPROFなどのツールを実行します。

関連項目:

5.14 ルール・セットとルールに関連するレポートおよびデータ・ディクショナリ・ビュー

Oracle Database Vaultには、ルール・セットおよびそれらに含まれるルールの分析に役立つ、レポートとデータ・ディクショナリ・ビューが用意されています。

表5-2では、Oracle Database Vaultレポートを示します。これらのレポートの実行方法の詳細は、「Oracle Database Vaultレポート」を参照してください。

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

レポート 説明

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

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

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

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

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

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

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

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

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

DBA_DV_RULEビュー

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

DBA_DV_RULE_SETビュー

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

DBA_DV_RULE_SET_RULEビュー

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