16 Oracle Database Vaultルール・セットのAPI

DBMS_MACADM PL/SQLパッケージをおよび一連のOracle Database Vaultルール・ファンクションを使用すると、ルール・セットを管理できます。

16.1 DBMS_MACADMルール・セットのプロシージャ

DBMS_MACADMルール・セット・プロシージャにより、ルール・セット、およびこれらのルール・セット内に入れられる個々のルールを構成できます。

DV_OWNERロールまたはDV_ADMINロールを付与されているユーザーのみがこれらのプロシージャを使用できます。

16.1.1 ADD_RULE_TO_RULE_SETプロシージャ

ADD_RULE_TO_RULE_SETプロシージャは、ルールをルール・セットに追加し、ルール・セットの評価時にルールをチェックするようにできます。

構文

DBMS_MACADM.ADD_RULE_TO_RULE_SET(
 rule_set_name  IN VARCHAR2, 
 rule_name      IN VARCHAR2);

パラメータ

表16-1 ADD_RULE_TO_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現在のデータベース・インスタンスで既存のルール・セットを検索するには、DBA_DV_RULE_SETビューを問い合せます。

rule_name

ルール・セットに追加するルール。

既存のルールを検索するには、DBA_DV_RULEビューを問い合せます。

ルール・セットに関連付けられたルールを検索するには、DBA_DV_RULE_SET_RULEを問い合せます。

次の例では、ルールをルール・セットに追加し、enabledパラメータを省略して、ルール・セットの評価時に自動的にルール・チェックが有効化されるようにします。

BEGIN
 DBMS_MACADM.ADD_RULE_TO_RULE_SET(
  rule_set_name => 'Limit_DBA_Access', 
  rule_name     => 'Restrict DROP TABLE operations');
END;
/

関連トピック

16.1.2 CREATE_RULEプロシージャ

CREATE_RULEプロシージャは、共通およびローカルの両方のルールを作成します。作成したルールは、後でルール・セットに追加できます。

構文

DBMS_MACADM.CREATE_RULE(
 rule_name  IN VARCHAR2, 
 rule_expr  IN VARCHAR2
 scope      IN NUMBER DEFAULT,
 is_static  IN BOOLEAN DEFAULT FALSE);

パラメータ

表16-2 CREATE_RULEのパラメータ

パラメータ 説明

rule_name

ルール名(大/小文字混在で最大128文字)。空白を使用できます。名前は動詞で始まり、ルールの目的で終わることをお薦めします。たとえば、Prevent non-admin access to SQL*Plusのようにします。ルールにはdescriptionパラメータがないため、名前は明示的なものにしてください(ただし、128文字を超えないこと)。

現在のデータベース・インスタンスで既存のルールを検索するには、DBA_DV_RULEビューを問い合せます。

ルール・セットに関連付けられたルールを検索するには、DBA_DV_RULE_SET_RULEを問い合せます。

rule_expr

PL/SQL BOOLEAN式。

次のガイドラインに従う必要があります:

  • SQLのWHERE句で有効です。

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

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

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

  • 式に引用符が含まれる場合、二重引用符は使用しないでください。その場合は、2つの一重引用符を使用します。式全体を一重引用符で囲んでください。たとえば:

    'TO_CHAR(SYSDATE,''HH24'') = ''12'''
  • 現行のデータベース・インスタンスから既存のコンパイルされた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;

scope

このプロシージャの実行方法を決定します。この設定を省略した場合、DBMS_MACUTL.G_SCOPE_LOCALにデフォルト設定されます。

  • ルールが現在のPDBでローカルである場合は、DBMS_MACUTL.G_SCOPE_LOCAL (または1)(デフォルト)

  • ルールがアプリケーション・ルートにある場合は、DBMS_MACUTL.G_SCOPE_COMMON (または2)

is_static

ルールの評価が静的か動的かを指定します。この設定を省略した場合、FALSEにデフォルト設定されます。

  • TRUEにるすと、ルール・セットはユーザー・セッション時に1回評価されます。その後、値は再利用されます。
  • FALSEの場合、ルールを動的として設定します。ルールの結果は、ルールがトリガーされるたびに評価されます。(デフォルト)

次の例では、現行セッション・ユーザーがSYSADMであるかどうかをチェックするローカル・ルール式の作成方法を示します。スコープ設定は省略されるため、DBMS_MACUTL.G_SCOPE_LOCALにデフォルト設定されます。このプロシージャを実行するユーザーは、ルールおよびそのルール・セットが存在するのと同じPDBにいる必要があります。既存のPDBを確認するには、show pdbsコマンドを実行します。ルールおよびルール・セットはローカルである必要があります。

BEGIN
 DBMS_MACADM.CREATE_RULE(
  rule_name  => 'Check UPDATE operations', 
  rule_expr  =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SYSADM''',
  is_static  => TRUE);
END;
/

この例では、前の例のマルチテナント環境共通バージョンを示します。このプロシージャを実行するユーザーはCDBルートにいる必要があり、ルールおよびその関連付けられたルール・セットは共通である必要があります。ルールは、アプリケーション・ルートに存在することになります。

BEGIN
 DBMS_MACADM.CREATE_RULE(
  rule_name  => 'Check UPDATE operations', 
  rule_expr  =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SYSADM''',
  scope      => DBMS_MACUTL.G_SCOPE_COMMON,
  is_static  => TRUE);
END;
/

この例では、パブリック・スタンドアロン・ファンクションOLS_LABEL_DOMINATESを使用してhr_ols_pol Oracle Label Securityポリシーのセッション・ラベルがhsラベルより優位にあるか同等であるかを確認するルール式の作成方法を示します。値0は、falseである場合を示します。(同等であるかどうかをチェックするには、1を示します。)scopeパラメータ(デフォルトはlocal)およびis_staticパラメータ(デフォルトはFALSE)が省略されているので、デフォルト値が使用されます。

BEGIN
 DBMS_MACADM.CREATE_RULE(
  rule_name  => 'Check OLS Factor', 
  rule_expr  => 'OLS_LABEL_DOMINATES(''hr_ols_pol'', ''hs'') = 1');
END;
/

関連トピック

16.1.3 CREATE_RULE_SETプロシージャ

CREATE_RULE_SETプロシージャはルール・セットを作成します。

ルール・セットを作成した後で、CREATE_RULEおよびADD_RULE_TO_RULE_SETプロシージャを使用してルールを作成し、ルール・セットに追加します。

構文

DBMS_MACADM.CREATE_RULE_SET(
 rule_set_name    IN VARCHAR2, 
 description      IN VARCHAR2 DEFAULT, 
 enabled          IN VARCHAR2 DEFAULT, 
 eval_options     IN NUMBER DEFAULT, 
 audit_options    IN NUMBER DEFAULT, 
 fail_options     IN NUMBER DEFAULT, 
 fail_message     IN VARCHAR2 DEFAULT, 
 fail_code        IN NUMBER DEFAULT, 
 handler_options  IN NUMBER DEFAULT, 
 handler          IN VARCHAR2 DEFAULT,
 is_static        IN BOOLEAN DEFAULT,
 scope            IN NUMBER DEFAULT);

パラメータ

表16-3 CREATE_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名(大/小文字混在で最大128文字)。空白を使用できます。名前は動詞で始まり、ルール・セットが関連付けられるレルムまたはコマンド・ルールの名前で終わることをお薦めします。

現在のデータベース・インスタンスで既存のルール・セットを検索するには、DBA_DV_RULE_SETビューを問い合せます。

description

ルール・セットの目的の説明(大/小文字混在で最大1024文字)。この設定を省略した場合、空の文字列にデフォルト設定されます。

enabled

レルム・チェックを制御します。この設定を省略した場合、DBMS_MACUTL.G_YESにデフォルト設定されます。

  • DBMS_MACUTL.G_YES (または'y')は、ルール・セットを有効にします。(デフォルト)

  • DBMS_MACUTL.G_NO (または'n')はシミュレーション・ログでの違反の取得など、すべてのレルム・チェックを無効にします

eval_options

1つのルール・セットに複数のルールが追加されている場合は、いずれかのルールを評価するか、すべてのルールを評価するかを決定します。この設定を省略した場合、DBMS_MACUTL.G_RULESET_EVAL_ALLにデフォルト設定されます。

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

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

audit_options

DBMS_MACUTL.G_REALM_AUDIT_OFF (またはNULL)を指定します。(デフォルト)

Oracle Database 23ai以降、従来の監査はサポートされなくなりました。ルール・セットを監査するには、統合監査を使用する必要があります。ルール・セットの統合監査ポリシーを作成する方法の例は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

fail_options

ルール・セットの評価が失敗した場合にエラーを表示するかどうかを決定します。この設定を省略した場合、DBMS_MACUTL.G_RULESET_FAIL_SHOWにデフォルト設定されます。

  • DBMS_MACUTL.G_RULESET_FAIL_SHOWの場合、ルール・セットの評価が失敗したときにカスタム・エラー・コードおよびメッセージを表示します。(デフォルト)

  • DBMS_MACUTL.G_RULESET_FAIL_SILENTの場合、ルール・セットの評価が失敗したときにカスタム・エラー・コードおよびメッセージを表示しません。かわりに、デフォルトのエラー・メッセージを使用します。DBMS_MACUTL.G_RULESET_FAIL_SILENTを選択しておいて監査を有効にしていると、潜在的な侵入者のアクティビティを追跡できます。監査レポートには侵入者の詳細なアクティビティが表示されますが、侵入者には、デフォルトのエラー・メッセージ(ORA-01031: 「権限が不足しています」など)のみが表示され、アクションが失敗した理由はわかりません。

fail_message

大/小文字混在の最大80文字で、失敗を示すエラー・メッセージを入力し、fail_codeで指定した失敗コードに関連付けます。デフォルトはNULLで、カスタムの失敗メッセージがないことを意味します。この設定を省略した場合、カスタムの失敗メッセージなしにデフォルト設定されます。

fail_code

-20000から-20999または20000から20999の範囲の数値を入力し、fail_messageパラメータに関連付けます。デフォルトはNULLで、失敗コードがないことを意味します。この設定を省略した場合、失敗コードなしにデフォルト設定されます。

handler_options

ハンドラの動作を制御します。この設定を省略した場合、DBMS_MACUTL.G_RULESET_HANDLER_OFFにデフォルト設定されます。

  • DBMS_MACUTL.G_RULESET_HANDLER_OFF: エラー処理を無効にします。(デフォルト)

  • DBMS_MACUTL.G_RULESET_HANDLER_FAIL: ルール・セット失敗時にハンドラをコールします。

  • DBMS_MACUTL.G_RULESET_HANDLER_SUCCESS: ルール・セット成功時にハンドラをコールします。

handler

カスタム・イベント・ハンドラ・ロジックを定義するPL/SQLファンクションまたはプロシージャの名前。この設定を省略した場合、NULLにデフォルト設定されます。これは、ハンドラがないことを意味します。

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

完全修飾プロシージャとして式を記述します(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: ハンドラ処理にルール・セットの名前と戻り値が不要な場合に、この書式を使用します。

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

次の構文を使用します。

my_schema.my_ruleset_handler

is_static

オプション。ルール・セットがアクセスされたときに再評価されるかどうかを決定します。この設定を省略した場合、FALSEにデフォルト設定されます。

  • TRUEの場合、ルール・セットを静的として設定します。ルール・セットが静的として指定されると、セッション内の最初のルール評価の結果がキャッシュされ、セッション内でルールを再評価する必要があるときに使用されます。
  • FALSEの場合、ルール・セットを動的として設定します。ルール・セットの結果は、ルール・セットがトリガーされるたびに評価されます。(デフォルト)

scope

ルール・セットを共通にするかローカルにするかを決定します。この設定を省略した場合、DBMS_MACUTL.G_SCOPE_LOCALにデフォルト設定されます。

  • ルール・セットを現在のPDBでローカルにする場合は、DBMS_MACUTL.G_SCOPE_LOCAL (または1)(デフォルト)

  • ルール・セットをアプリケーション・ルートに存在させる場合は、DBMS_MACUTL.G_SCOPE_COMMON (または2)

次の例では、ルール・セット自体がtrueと評価されるために、少なくとも1つのルールがtrueと評価されるように、有効に設定されたルール・セットを作成します。enabled設定は省略されるため、ルール・セットの有効化ステータスはDBMS_MACUTL.G_YESにデフォルト設定されます。エラー・メッセージが表示され、失敗を追跡するために失敗コード20461が使用されます。また、ルール・セットに対して違反がある場合は、ハンドラを使用して適切なユーザーに電子メール・アラートを送信します。

BEGIN
 DBMS_MACADM.CREATE_RULE_SET(
  rule_set_name    => 'Limit_DBA_Access', 
  description      => 'DBA access through predefined processes', 
  eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ANY,
  audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_OFF,
  fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
  fail_message     => 'Configuration failed; check settings',
  fail_code        => 20461,
  handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_FAIL, 
  handler          => 'dbavowner.email_alert',
  is_static        => TRUE);
END;
/

このルール・セットでは、失敗メッセージや失敗コードは使用されず、ハンドラも使用されません。このルール・セットはマルチテナント環境のアプリケーション・ルートに存在することになるため、このプロシージャを実行するユーザーは、アプリケーション・ルートにいる必要があります。失敗メッセージまたは失敗コードがないため、fail_messageおよびfail_code設定は省略されます。このルール・セットに関連付けられているルールまたはコマンド・ルールは、共通である必要があります。

BEGIN
 DBMS_MACADM.CREATE_RULE_SET(
 rule_set_name    => 'Check_HR_Access', 
 description      => 'Checks for failed access attempts to the HR schema', 
 enabled          => DBMS_MACUTL.G_YES,
 eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ANY,
 audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_OFF,
 fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
 is_static        => TRUE,
 scope            => DBMS_MACUTL.G_SCOPE_COMMON);
END;
/

このルール・セットは、前のルール・セットのローカル・バージョンです。このルール・セットを作成するユーザーは、このルール・セットが存在することになるPDBにいる必要があります。このルール・セットにはエラー・メッセージまたはハンドラがないため、fail_messagefail_codehandler_optionsおよびhandler設定は省略されます。このルール・セットに関連付けられているルールまたはコマンド・ルールは、ローカルである必要があります。

BEGIN
 DBMS_MACADM.CREATE_RULE_SET(
 rule_set_name    => 'Check_HR_Access', 
 description      => 'Checks for failed access attempts to the HR schema', 
 enabled          => DBMS_MACUTL.G_YES,
 eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ANY,
 audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_OFF,
 fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
 is_static        => TRUE,
 scope            => DBMS_MACUTL.G_SCOPE_LOCAL);
END;
/

16.1.4 DELETE_RULEプロシージャ

DELETE_RULEプロシージャはルールを削除します。

構文

DBMS_MACADM.DELETE_RULE(
 rule_name IN VARCHAR2); 

パラメータ

表16-4 DELETE_RULEのパラメータ

パラメータ 説明

rule_name

ルール名。

現在のデータベース・インスタンスで既存のルールを検索するには、DBA_DV_RULEビューを問い合せます。

ルール・セットに関連付けられたルールを検索するには、DBA_DV_RULE_SET_RULEを問い合せます。

EXEC DBMS_MACADM.DELETE_RULE('Check UPDATE operations'); 

16.1.5 DELETE_RULE_FROM_RULE_SETプロシージャ

DELETE_RULE_FROM_RULE_SETプロシージャは、ルールをルール・セットから削除します。

構文

DBMS_MACADM.DELETE_RULE_FROM_RULE_SET(
 rule_set_name IN VARCHAR2, 
 rule_name     IN VARCHAR2);

パラメータ

表16-5 DELETE_RULE_FROM_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現在のデータベース・インスタンスで既存のルール・セットを検索するには、DBA_DV_RULE_SETビューを問い合せます。

rule_name

ルール・セットから削除するルール。

現在のデータベース・インスタンスで既存のルールを検索するには、DBA_DV_RULEビューを問い合せます。

ルール・セットに関連付けられたルールを検索するには、DBA_DV_RULE_SET_RULEを問い合せます。

BEGIN
 DBMS_MACADM.DELETE_RULE_FROM_RULE_SET(
  rule_set_name => 'Limit_DBA_Access', 
  rule_name     => 'Check UPDATE operations');
END;
/

16.1.6 DELETE_RULE_SETプロシージャ

DELETE_RULE_SETプロシージャはルール・セットを削除します。

構文

DBMS_MACADM.DELETE_RULE_SET(
 rule_set_name IN VARCHAR2); 

パラメータ

表16-6 DELETE_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現在のデータベース・インスタンスで既存のルール・セットを検索するには、DBA_DV_RULE_SETビューを問い合せます。

EXEC DBMS_MACADM.DELETE_RULE_SET('Limit_DBA_Access'); 

16.1.7 RENAME_RULEプロシージャ

RENAME_RULEプロシージャは、ルールの名前を変更し、その名前変更は、そのルールが使用されているすべての箇所に反映されます

構文

DBMS_MACADM.RENAME_RULE(
 rule_name  IN VARCHAR2, 
 new_name   IN VARCHAR2); 

パラメータ

表16-7 RENAME_RULEのパラメータ

パラメータ 説明

rule_name

現在のルール名。

現在のデータベース・インスタンスで既存のルールを検索するには、DBA_DV_RULEビューを問い合せます。

ルール・セットに関連付けられたルールを検索するには、DBA_DV_RULE_SET_RULEを問い合せます。

new_name

新しいルール名(大/小文字混在で最大128文字)。

BEGIN
 DBMS_MACADM.RENAME_RULE(
  rule_name  => 'Check UPDATE operations', 
  new_name   => 'Check Sector 2 Processes');
END; 
/

16.1.8 RENAME_RULE_SETプロシージャ

RENAME_RULE_SETプロシージャは、ルール・セットの名前を変更し、その名前変更は、そのルール・セットが使用されているすべての箇所に反映されます。

構文

DBMS_MACADM.RENAME_RULE_SET(
 rule_set_name IN VARCHAR2, 
 new_name      IN VARCHAR2); 

パラメータ

表16-8 RENAME_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

現在のルール・セット名。

現在のデータベース・インスタンスで既存のルール・セットを検索するには、DBA_DV_RULE_SETビューを問い合せます。

new_name

新しいルール・セット名(大/小文字混在で最大128文字)。空白を使用できます。

BEGIN
 DBMS_MACADM.RENAME_RULE_SET(
  rule_set_name => 'Limit_DBA_Access', 
  new_name      => 'Limit Sector 2 Access'); 
END;
/

16.1.9 UPDATE_RULEプロシージャ

UPDATE_RULEプロシージャはルールを更新します。

構文

DBMS_MACADM.UPDATE_RULE(
 rule_name  IN VARCHAR2, 
 rule_expr  IN VARCHAR2 DEFAULT,
 is_static  IN BOOLEAN DEFAULT);

パラメータ

表16-9 UPDATE_RULEのパラメータ

パラメータ 説明

rule_name

ルール名。

現在のデータベース・インスタンスで既存のルールを検索します。

ルール・セットに関連付けられたルールを検索するには、DBA_DV_RULE_SET_RULEを問い合せます。

rule_expr

PL/SQL BOOLEAN式。この設定を変更しない場合は、省略するか、NULLに設定します。

式に引用符が含まれる場合、二重引用符は使用しないでください。その場合は、2つの一重引用符を使用します。式全体を一重引用符で囲んでください。たとえば:

'TO_CHAR(SYSDATE,''HH24'') = ''12'''

NULLまたは省略の場合、現在の設定を変更しません。(デフォルト)

既存のルール式を確認するには、DBA_DV_RULEビューに問い合せます。

is_static

ルールの評価が静的か動的かを指定します。この設定を変更しない場合は、省略するか、NULLに設定します。

  • TRUEの場合、ルールを静的として設定します。ルールが静的として指定されると、セッション内の最初のルール評価の結果がキャッシュされ、セッション内でルールを再評価する必要があるときに使用されます。
  • FALSEの場合、ルールを動的として設定します。ルールの結果は、ルールがトリガーされるたびに評価されます。
  • NULLの場合、現在の設定を変更しません。(デフォルト)

BEGIN
DBMS_MACADM.UPDATE_RULE(
  rule_name  => 'Check UPDATE operations',
  rule_expr  =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SYSADM'' AND
               (
                 UPPER(SYS_CONTEXT(''USERENV'',''MODULE'')) LIKE ''APPSRVR%'' OR
                 UPPER(SYS_CONTEXT(''USERENV'',''MODULE'')) LIKE ''DBAPP%''
               )',
  is_static  => TRUE);
END;
/

16.1.10 UPDATE_RULE_SETプロシージャ

UPDATE_RULE_SETプロシージャはルール・セットを更新します。

ルール・セットを更新すると、既存の従来の監査レコードは無効になります。新しい監査レコードを取得するには、統合監査ポリシーを作成する必要があります。現在の値を検索するには、DBA_DV_RULE_SETデータ・ディクショナリ・ビューを問い合せます。

構文

DBMS_MACADM.UPDATE_RULE_SET(
 rule_set_name    IN VARCHAR2,
 description      IN VARCHAR2 DEFAULT, 
 enabled          IN VARCHAR2 DEFAULT, 
 eval_options     IN NUMBER DEFAULT,
 audit_options    IN NUMBER DEFAULT, 
 fail_options     IN NUMBER DEFAULT, 
 fail_message     IN VARCHAR2 DEFAULT, 
 fail_code        IN NUMBER DEFAULT, 
 handler_options  IN NUMBER DEFAULT, 
 handler          IN VARCHAR2 DEFAULT,
 is_static        IN BOOLEAN DEFAULT); 

パラメータ

表16-10 UPDATE_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現在のデータベース・インスタンスで既存のルール・セットを検索します。

description

ルール・セットの目的の説明(大/小文字混在で最大1024文字)。この設定を変更しない場合は、省略するか、NULLに設定します。

enabled

ルール・セットの有効化を制御します。この設定を変更しない場合は、省略するか、NULLに設定します。

  • DBMS_MACUTL.G_YESの場合、ルール・セット・チェックを有効にします。
  • DBMS_MACUTL.G_NOの場合、ルール・セット・チェックを無効にします。
  • NULLの場合、現在の値を変更しません。(デフォルト)

eval_options

1つのルール・セットに複数のルールが追加されている場合は、いずれかのルールを評価するか、すべてのルールを評価するかを決定します。この設定を変更しない場合は、省略するか、NULLに設定します。

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

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

  • NULLの場合、現在の設定を変更しません。(デフォルト)

audit_options

次のアクションのいずれかを実行します。

  • このルール・セット・ポリシーに対して従来の監査を無効にするには、DBMS_MACUTL.G_RULESET_AUDIT_OFFを設定します。
  • この従来の監査設定を引き続き使用する場合は、現在のaudit_options設定をそのままにします。これを行うには、このルール・セットに対して現在の既存のaudit_optionsと同じ設定を指定するか、audit_optionsを指定しません(NULL)。

Oracle Database 23ai以降、従来の監査はサポートされなくなりました。ルール・セットを監査するには、統合監査を使用する必要があります。ルール・セットの統合監査ポリシーを作成する方法の例は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

fail_options

エラーをレポートするオプションこの設定を変更しない場合は、省略するか、NULLに設定します。

  • DBMS_MACUTL.G_RULESET_FAIL_SHOWの場合、ルール・セットの評価が失敗したときにカスタム・エラー・コードおよびメッセージを表示します。

  • DBMS_MACUTL.G_RULESET_FAIL_SILENTの場合、ルール・セットの評価が失敗したときにカスタム・エラー・コードおよびメッセージを表示しません。かわりに、デフォルトのエラー・メッセージを使用します。

  • NULLの場合、現在の設定を変更しません。(デフォルト)

fail_message

失敗を示すエラー・メッセージ。大/小文字混在の最大80文字で、fail_codeで指定した失敗コードに関連付けます。この設定を変更しない場合は、省略するか、NULLに設定します。

fail_code

-20000から-20999または20000から20999の範囲の数値を入力し、fail_messageパラメータに関連付けます。この設定を変更しない場合は、省略するか、NULLに設定します。

handler_options

ハンドラの動作を制御します。この設定を変更しない場合は、省略するか、NULLに設定します。

  • DBMS_MACUTL.G_RULESET_HANDLER_OFFの場合、エラー処理を無効にします。

  • DBMS_MACUTL.G_RULESET_HANDLER_FAILの場合、ルール・セット失敗時にハンドラをコールします。

  • DBMS_MACUTL.G_RULESET_HANDLER_SUCCESSの場合、ルール・セット成功時にハンドラをコールします。

  • NULLまたは省略の場合、現在の設定を変更しません。(デフォルト)

handler

カスタム・イベント・ハンドラ・ロジックを定義するPL/SQLファンクションまたはプロシージャの名前。この設定を変更しない場合は、省略するか、NULLに設定します。

is_static

オプション。SQL文によってアクセスされる際に、ルール・セットが評価される頻度を決定します。この設定を変更しない場合は、省略するか、NULLに設定します。

  • TRUEの場合、ルール・セットを静的として設定します。ルール・セットが静的として指定されると、セッション内の最初のルール評価の結果がキャッシュされ、セッション内でルールを再評価する必要があるときに使用されます。
  • FALSEの場合、ルール・セットを動的として設定します。ルール・セットの結果は、ルール・セットがトリガーされるたびに評価されます。
  • NULLの場合、現在の設定を変更しません。(デフォルト)

この例では、この値を変更する必要がなかったため、enabledは省略されています。

BEGIN
 DBMS_MACADM.UPDATE_RULE_SET(
  rule_set_name    => 'Limit_DBA_Access', 
  description      => 'DBA access through predefined processes', 
  eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ANY,
  audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_OFF,
  fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SHOW,
  fail_message     => 'Access denied!',
  fail_code        => 20900,
  handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_OFF, 
  handler          => '',
  is_static        => TRUE);
END;
/

ルール・セットのaudit_optionsパラメータを変更しなかった場合は、既存の従来の監査ポリシーが引き続き有効になります。ルール・セットのaudit_optionsパラメータを更新した場合は、リリース23ai以降で従来の監査がサポートされなくなるため、この監査が無効になります。新しい監査レコードを取得するには、AUDIT_ADMIN Oracle DatabaseロールおよびAUDIT_ADMIN Oracle Database Vault認可を付与されたユーザーとして、統合監査ポリシーを作成して有効にします。たとえば:

CREATE AUDIT POLICY Limit_DBA_Access_pol 
 ACTIONS COMPONENT=DV RULE SET FAILURE ON "Limit_DBA_Access";

AUDIT POLICY Limit_DBA_Access_pol;

UNIFIED_AUDIT_TRAILデータ・ディクショナリ・ビューを問い合せることで、監査レコードを確認できます。この仕組みについては、Oracle Databaseセキュリティ・ガイドを参照してください。

16.2 Oracle Database VaultのPL/SQLルール・セット・ファンクション

Oracle Database Vaultには、ルール・セットで保護されるSQL文を検査するためにルール・セットで使用されるファンクションが用意されています。

16.2.1 DV_SYSEVENTファンクション

DV_SYSEVENTファンクションは、ルール・セットを起動するシステム・イベントを返します。

イベント名は、SQL文の構文のものと同じで、INSERTCREATEなどです。戻り型はVARCHAR2です。

構文

DV_SYSEVENT ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Get System Event Firing the Maintenance Rule Set',
  rule_expr => 'DV_SYSEVENT = ''CREATE''');
END;
/

16.2.2 DV_LOGIN_USERファンクション

DV_LOGIN_USERファンクションは、セッション・ユーザー名をVARCHAR2データ型で返します。

構文

DV_LOGIN_USER ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check Session User Name',
  rule_expr => 'DV_LOGIN_USER = ''SEBASTIAN''');
END;
/

16.2.3 DV_INSTANCE_NUMファンクション

DV_INSTANCE_NUMファンクションは、データベース・インスタンス番号をNUMBERデータ型で返します。

構文

DV_INSTANCE_NUM ()
RETURN NUMBER;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check Database Instance Number',
  rule_expr => 'DV_INSTANCE_NUM BETWEEN 6 AND 9');
END;
/

16.2.4 DV_DATABASE_NAMEファンクション

DV_DATABASE_NAMEファンクションは、データベース名をVARCHAR2データ型で返します。

構文

DV_DATABASE_NAME ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check Database Name',
  rule_expr => 'DV_DATABASE_NAME = ''ORCL''');
END;
/

16.2.5 DV_DICT_OBJ_TYPEファンクション

DV_DICT_OBJ_TYPEファンクションは、データベース操作が発生したディクショナリ・オブジェクトのタイプを返します。

たとえば、戻されるディクショナリ・オブジェクトは表、プロシージャまたはビューです。戻り型はVARCHAR2です。

構文

DV_DICT_OBJ_TYPE ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check Dictionary Object Type',
  rule_expr => 'DV_DICT_OBJ_TYPE IN (''TABLE'', ''VIEW'')');
END;
/

16.2.6 DV_DICT_OBJ_OWNERファンクション

DV_DICT_OBJ_OWNERファンクションは、データベース操作が発生したディクショナリ・オブジェクトの所有者の名前を返します。

戻り型はVARCHAR2です。

構文

DV_DICT_OBJ_OWNER ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check Dictionary Object Owner',
  rule_expr => 'DV_DICT_OBJ_OWNER = ''JSMITH''');
END;
/

16.2.7 DV_DICT_OBJ_NAMEファンクション

DV_DICT_OBJ_NAMEファンクションは、データベース操作が発生したディクショナリ・オブジェクトの名前を返します。

戻り型はVARCHAR2です。

構文

DV_DICT_OBJ_NAME ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check Dictionary Object Name',
  rule_expr => 'DV_DICT_OBJ_NAME = ''SALES''');
END;
/

16.2.8 DV_SQL_TEXTファンクション

DV_SQL_TEXTファンクションは、操作で使用されるデータベース文のSQLテキストの最初の4000文字を返します。

戻り型はVARCHAR2です。

構文

DV_SQL_TEXT ()
RETURN VARCHAR2;

パラメータ

なし

BEGIN 
 DBMS_MACADM.CREATE_RULE(
  rule_name => 'Check SQL Text',
  rule_expr => 'DV_SQL_TEXT = ''SELECT SALARY FROM HR.EMPLOYEES''');
END;
/