日本語PDF

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

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

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

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

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

15.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, 
 rule_order     IN NUMBER, 
 enabled        IN VARCHAR2,
 scope          IN NUMBER DEFAULT);

パラメータ

表15-1 ADD_RULE_TO_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現行のデータベース・インスタンスで既存のルール・セットを確認するには、「DBA_DV_RULE_SETビュー」で説明されているDBA_DV_RULE_SETビューを問い合せます。

rule_name

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

既存のルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULEビューに問い合せます。

ルール・セットに関連付けられているルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULE_SET_RULEを使用します。

rule_order

このリリースには適用されませんが、ADD_RULE_TO_RULE_SETプロシージャを機能させるには値を指定する必要があります。1を入力します。

enabled

オプション。ルール・セットの評価時にルールをチェックする必要があるかどうかを判断します。使用される値は、次のとおりです。

  • DBMS_MACUTL.G_YES (デフォルト)。ルール・セットの評価時にルールをチェックできるようにします。

  • DBMS_MACUTL.G_NOは、ルール・セットの評価時にルールをチェックできないようにします。

詳細は、表20-1を参照してください。

scope

マルチテナント環境の場合は、このプロシージャの実行方法を決定します。デフォルトはローカルです。オプションは次のとおりです。

  • ルールおよびルール・セットが現在のPDBでローカルである場合は、DBMS_MACUTL.G_SCOPE_LOCAL (または1)

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

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

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

次の例では、ルールをルール・セットに追加しますが、ルール・チェックを無効化します。

BEGIN
 DBMS_MACADM.ADD_RULE_TO_RULE_SET(
  rule_set_name => 'Limit_DBA_Access',
  rule_name     => 'Check UPDATE operations',
  rule_order    => 1,
  enabled       => DBMS_MACUTL.G_NO);
END;
/

15.1.2 CREATE_RULEプロシージャ

CREATE_RULEプロシージャは、後でルール・セットに追加できるコマンド・ルールを作成します。

マルチテナント環境では、共通およびローカルの両方のルールを作成できます。

構文

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

パラメータ

表15-2 CREATE_RULEのパラメータ

パラメータ 説明

rule_name

ルール名(大/小文字混在で最大128文字)。空白を使用できます。

現行のデータベース・インスタンスで既存のルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULEビューに問い合せます。

ルール・セットに関連付けられているルールを確認するには、「DBA_DV_RULE_SET_RULEビュー」で説明されているDBA_DV_RULE_SET_RULEに問い合せます。

rule_expr

PL/SQL BOOLEAN式。

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

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

ルール式の詳細は、「新規ルールの作成」を参照してください。

scope

マルチテナント環境の場合は、このプロシージャの実行方法を決定します。デフォルトはローカルです。オプションは次のとおりです。

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

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

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

BEGIN
 DBMS_MACADM.CREATE_RULE(
  rule_name  => 'Check UPDATE operations', 
  rule_expr  =>'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''SYSADM''',
  scope      => DBMS_MACUTL.G_SCOPE_LOCAL);
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);
END;
/

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

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

15.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, 
 enabled          IN VARCHAR2, 
 eval_options     IN NUMBER, 
 audit_options    IN NUMBER, 
 fail_options     IN NUMBER, 
 fail_message     IN VARCHAR2, 
 fail_code        IN NUMBER, 
 handler_options  IN NUMBER, 
 handler          IN VARCHAR2,
 is_static        IN BOOLEAN DEFAULT,
 scope            IN NUMBER DEFAULT);

パラメータ

表15-3 CREATE_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

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

現行のデータベース・インスタンスで既存のルール・セットを確認するには、「DBA_DV_RULE_SETビュー」で説明されているDBA_DV_RULE_SETビューを問い合せます。

description

ルール・セットの目的の説明(大/小文字混在で最大1024文字)。

enabled

DBMS_MACUTL.G_YES(Yes)では、ルール・セットが有効になり、DBMS_MACUTL.G_NO(No)では無効になります。デフォルト値はDBMS_MACUTL.G_YESです。

eval_options

ルール・セットに複数のルールを割り当てる場合は、次の設定のいずれかを入力します。

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

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

audit_options

次の設定のいずれかを選択します。

  • DBMS_MACUTL.G_RULESET_AUDIT_OFF: ルール・セットの監査を無効にします(デフォルト)。

  • DBMS_MACUTL.G_RULESET_AUDIT_FAIL: ルール・セット違反が発生した場合に監査レコードを作成します。

  • DBMS_MACUTL.G_RULESET_AUDIT_SUCCESS: ルール・セット評価が合格の場合に監査レコードを作成します。

  • DBMS_MACUTL.G_RULESET_AUDIT_FAIL + DBMS_MACUTL.G_RULESET_AUDIT_SUCCESS: ルール・セット評価が合格と不合格のどちらの場合も監査レコードを作成します。

audit_optionsパラメータは、従来の監査にのみ適用されます。統合監査を有効にした場合は、audit_optionsを使用するかわりに統合監査ポリシーを作成します。

fail_options

エラーをレポートするオプション:

  • DBMS_MACUTL.G_RULESET_FAIL_SHOW: エラー・メッセージを表示します(デフォルト)。

  • DBMS_MACUTL.G_RULESET_FAIL_SILENT: エラー・メッセージを表示しません。

fail_message

大/小文字混在の最大80文字で、失敗を示すエラー・メッセージを入力し、fail_codeで指定した失敗コードに関連付けます。

fail_code

-20000から-20999または20000から20999の範囲の数値を入力し、fail_messageパラメータに関連付けます。

handler_options

次の設定のいずれかを選択します。

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

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

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

handler

カスタム・イベント・ハンドラ・ロジックを定義するPL/SQLファンクションまたはプロシージャの名前。

is_static

オプション。アクセスされる際にルール・セットが評価される頻度を決定します。デフォルトはFALSEです。

  • TRUE: ルール・セットはユーザー・セッション中に1回、評価されます。その後、値は再利用されます。

  • FALSE: ルール・セットは毎回評価されます。

scope

マルチテナント環境の場合は、このプロシージャの実行方法を決定します。デフォルトはローカルです。オプションは次のとおりです。

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

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

次の例では、ルール・セット自体でtrueに評価されるには少なくとも1つのルールでtrueに評価される必要があるように設定されている、失敗した試みと成功した試みの両方を監査する、有効化されたルール・セットを作成します。エラー・メッセージは表示しませんが、失敗の追跡に失敗コード20461を使用します。また、ルール・セットに対して違反がある場合は、ハンドラを使用して適切なユーザーに電子メール・アラートを送信します。

BEGIN
 DBMS_MACADM.CREATE_RULE_SET(
  rule_set_name    => 'Limit_DBA_Access', 
  description      => 'DBA access through predefined processes', 
  enabled          => DBMS_MACUTL.G_YES,
  eval_options     => DBMS_MACUTL.G_RULESET_EVAL_ANY,
  audit_options    => DBMS_MACUTL.G_RULESET_AUDIT_FAIL + DBMS_MACUTL.G_RULESET_AUDIT_SUCCESS,
  fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
  fail_message     => '',
  fail_code        => 20461,
  handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_FAIL, 
  handler          => 'dbavowner.email_alert',
  is_static        => TRUE);
END;
/

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

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_FAIL,
 fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
 fail_message     => '',
 fail_code        => '',
 handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_OFF, 
 handler          => '',
 is_static        => TRUE,
 scope            => DBMS_MACUTL.G_SCOPE_COMMON);
END;
/

このルール・セットは、前のルール・セットのローカル・バージョンです。このルール・セットを作成するユーザーは、このルール・セットが存在することになるPDBにいる必要があります。既存のPDBを確認するには、DBA_PDBSデータ・ディクショナリ・ビューを問い合せます。このルール・セットに関連付けられているルールまたはコマンド・ルールは、ローカルである必要があります。

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_FAIL,
 fail_options     => DBMS_MACUTL.G_RULESET_FAIL_SILENT,
 fail_message     => '',
 fail_code        => '',
 handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_OFF, 
 handler          => '',
 is_static        => TRUE,
 scope            => DBMS_MACUTL.G_SCOPE_LOCAL);
END;
/

関連項目:

例20-2

15.1.4 DELETE_RULEプロシージャ

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

構文

DBMS_MACADM.DELETE_RULE(
 rule_name IN VARCHAR2); 

パラメータ

表15-4 DELETE_RULEのパラメータ

パラメータ 説明

rule_name

ルール名。

現行のデータベース・インスタンスで既存のルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULEビューに問い合せます。

ルール・セットに関連付けられているルールを確認するには、「DBA_DV_RULE_SET_RULEビュー」で説明されているDBA_DV_RULE_SET_RULEに問い合せます。

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

15.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);

パラメータ

表15-5 DELETE_RULE_FROM_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現行のデータベース・インスタンスで既存のルール・セットを確認するには、「DBA_DV_RULE_SETビュー」で説明されているDBA_DV_RULE_SETビューを問い合せます。

rule_name

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

現行のデータベース・インスタンスで既存のルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULEビューに問い合せます。

ルール・セットに関連付けられているルールを確認するには、「DBA_DV_RULE_SET_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;
/

15.1.6 DELETE_RULE_SETプロシージャ

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

構文

DBMS_MACADM.DELETE_RULE_SET(
 rule_set_name IN VARCHAR2); 

パラメータ

表15-6 DELETE_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現行のデータベース・インスタンスで既存のルール・セットを確認するには、「DBA_DV_RULE_SETビュー」で説明されているDBA_DV_RULE_SETビューを問い合せます。

EXEC DBMS_MACADM.DELETE_RULE_SET('Limit_DBA_Access'); 

15.1.7 RENAME_RULEプロシージャ

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

構文

DBMS_MACADM.RENAME_RULE(
 rule_name  IN VARCHAR2, 
 new_name   IN VARCHAR2,
 scope      IN NUMBER DEFAULT); 

パラメータ

表15-7 RENAME_RULEのパラメータ

パラメータ 説明

rule_name

現在のルール名。

現行のデータベース・インスタンスで既存のルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULEビューに問い合せます。

ルール・セットに関連付けられているルールを確認するには、「DBA_DV_RULE_SET_RULEビュー」で説明されているDBA_DV_RULE_SET_RULEに問い合せます。

new_name

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

scope

マルチテナント環境の場合は、このプロシージャの実行方法を決定します。デフォルトはローカルです。オプションは次のとおりです。

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

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

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

15.1.8 RENAME_RULE_SETプロシージャ

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

構文

DBMS_MACADM.RENAME_RULE_SET(
 rule_set_name IN VARCHAR2, 
 new_name      IN VARCHAR2,
 scope         IN NUMBER DEFAULT); 

パラメータ

表15-8 RENAME_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

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

現行のデータベース・インスタンスで既存のルール・セットを確認するには、「DBA_DV_RULE_SETビュー」で説明されているDBA_DV_RULE_SETビューを問い合せます。

new_name

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

scope

マルチテナント環境の場合は、このプロシージャの実行方法を決定します。デフォルトはローカルです。オプションは次のとおりです。

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

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

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

15.1.9 UPDATE_RULEプロシージャ

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

構文

DBMS_MACADM.UPDATE_RULE(
 rule_name  IN VARCHAR2, 
 rule_expr  IN VARCHAR2);

パラメータ

表15-9 UPDATE_RULEのパラメータ

パラメータ 説明

rule_name

ルール名。

現行のデータベース・インスタンスで既存のルールを確認するには、「DBA_DV_RULEビュー」で説明されているDBA_DV_RULEビューに問い合せます。

ルール・セットに関連付けられているルールを確認するには、「DBA_DV_RULE_SET_RULEビュー」で説明されているDBA_DV_RULE_SET_RULEに問い合せます。

rule_expr

PL/SQL BOOLEAN式。

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

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

ルール式の詳細は、「新規ルールの作成」を参照してください。

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

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%'' )'
               );
END;
/

15.1.10 UPDATE_RULE_SETプロシージャ

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

構文

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

パラメータ

表15-10 UPDATE_RULE_SETのパラメータ

パラメータ 説明

rule_set_name

ルール・セット名。

現行のデータベース・インスタンスで既存のルール・セットを確認するには、「DBA_DV_RULE_SETビュー」で説明されているDBA_DV_RULE_SETビューを問い合せます。

description

ルール・セットの目的の説明(大/小文字混在で最大1024文字)。

enabled

DBMS_MACUTL.G_YES(Yes)では、ルール・セット・チェックが有効になり、DBMS_MACUTL.G_NO(No)では無効になります。

enabled設定のデフォルトは設定済の値であり、DBA_DV_RULE_SETデータ・ディクショナリ・ビューに問い合せることで確認できます。

eval_options

ルール・セットに複数のルールを割り当てる場合は、次の設定のいずれかを入力します。

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

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

eval_optionsのデフォルトは設定済の値であり、DBA_DV_RULE_SETデータ・ディクショナリ・ビューに問い合せることで確認できます。

audit_options

次の設定のいずれかを選択します。

  • DBMS_MACUTL.G_RULESET_AUDIT_OFF: ルール・セットの監査を無効にします。

  • DBMS_MACUTL.G_RULESET_AUDIT_FAIL: ルール・セット違反が発生した場合に監査レコードを作成します。

  • DBMS_MACUTL.G_RULESET_AUDIT_SUCCESS: ルール・セット評価が合格の場合に監査レコードを作成します。

  • DBMS_MACUTL.G_RULESET_AUDIT_FAIL + DBMS_MACUTL.G_RULESET_AUDIT_SUCCESS: ルール・セット評価が合格と不合格のどちらの場合も監査レコードを作成します。

audit_optionsのデフォルトは設定済の値であり、DBA_DV_RULE_SETデータ・ディクショナリ・ビューに問い合せることで確認できます。

fail_options

エラーをレポートするオプション:

  • DBMS_MACUTL.G_RULESET_FAIL_SHOW: エラー・メッセージを表示します。

  • DBMS_MACUTL.G_RULESET_FAIL_SILENT: エラー・メッセージを表示しません。

fail_optionsのデフォルトは設定済の値であり、DBA_DV_RULE_SETデータ・ディクショナリ・ビューに問い合せることで確認できます。

fail_message

失敗を示すエラー・メッセージ。大/小文字混在の最大80文字で、fail_codeで指定した失敗コードに関連付けます。

fail_code

-20000から-20999または20000から20999の範囲の数値を入力し、fail_messageパラメータに関連付けます。

handler_options

次の設定のいずれかを選択します。

  • DBMS_MACUTL.G_RULESET_HANDLER_OFF: エラー処理を無効にします。

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

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

handler_optionsのデフォルトは設定済の値であり、DBA_DV_RULE_SETデータ・ディクショナリ・ビューに問い合せることで確認できます。

handler

カスタム・イベント・ハンドラ・ロジックを定義するPL/SQLファンクションまたはプロシージャの名前。

is_static

オプション。SQL文によってアクセスされる際に、ルール・セットが評価される頻度を決定します。デフォルトはFALSEです。

  • TRUE: ルール・セットはユーザー・セッション中に1回、評価されます。その後、値は再利用されます。

  • FALSE: ルール・セットは、SQL文でアクセスされるたびに評価されます。

BEGIN
 DBMS_MACADM.UPDATE_RULE_SET(
  rule_set_name    => 'Limit_DBA_Access', 
  description      => 'DBA access through predefined processes', 
  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_SHOW,
  fail_message     => 'Access denied!',
  fail_code        => 20900,
  handler_options  => DBMS_MACUTL.G_RULESET_HANDLER_OFF, 
  handler          => '',
  is_static        =  TRUE);
END;
/

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

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

15.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;
/

15.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;
/

15.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;
/

15.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;
/

15.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;
/

15.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;
/

15.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;
/

15.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;
/