128 DBMS_REDACT

DBMS_REDACTパッケージは、権限の低いユーザーやアプリケーションによって発行された問合せから戻されるデータをマスク(リダクション)できる、Oracle Data Redactionへのインタフェースを提供します。

この章のトピックは、次のとおりです:

参照:

128.1 DBMS_REDACTの概要

Data Redactionを使用すると、アプリケーションのマスキング・ポリシーを定義できます。Oracle Data Redactionでは、アプリケーション内でユーザーのSELECT問合せから戻されるデータをマスク(リダクション)するための機能が提供されます。マスキングはリアルタイムで発生します。データ・リダクション・ポリシーは、問合せ元のユーザーのSYS_CONTEXTまたはXS_SYS_CONTEXTの値に応じて、そのユーザーに適用されます。このリダクション・プロセスでは、問合せ対象のデータが静的または不変である必要はなく、データ・セット全体をオフラインで同時にリダクションする必要もありません。Oracle Databaseでは、エントリ列のデータではなく、ユーザーの問合せで指定された行のデータのみがリダクションされます。リダクションは、データが問合せ元のユーザーまたはアプリケーションに戻される直前に発生します。

128.2 DBMS_REDACTのセキュリティ・モデル

問合せ元のユーザーにEXEMPT REDACTION POLICYシステム権限が付与されている場合、リダクションは実行されません。問合せ元のユーザーにEXEMPT REDACTION POLICYシステム権限が付与されていない場合、現行ユーザーの環境内で、ポリシーの式が評価されます。ポリシーの式がTRUEと評価された場合はリダクションが実行され、そうでない場合は実行されません。

DBMS_REDACTパッケージのサブプログラムを実行するには、そのパッケージのEXECUTE権限が必要です。インタフェースに含まれるプロシージャは、現在のユーザーの権限で実行されます。

128.3 DBMS_REDACTの定数

DBMS_REDACTパッケージは、パラメータ値の指定に使用するいくつかの定数を定義します。

表128-1 DBMS_REDACT.ADD_POLICYのfunction_typeパラメータの値

定数 タイプ 説明

NONE

0

BINARY_INTEGER

リダクションなし。

FULL

1

BINARY_INTEGER

固定値へのリダクション。

NULLIFY

6

BINARY_INTEGER

リダクションされた値としてNULL値を戻します。

PARTIAL

2

BINARY_INTEGER

部分的なリダクション。列データの一部をリダクションします。

RANDOM

4

BINARY_INTEGER

ランダム・リダクション。各問合せの結果は、異なるランダムな値になります。

REGEXP

5

BINARY_INTEGER

正規表現ベースのリダクション。

REGEXP_WIDTH

7

BINARY_INTEGER

正規表現を使用する列の幅を保持する正規表現に基づいたリダクション。Oracle OLE DBプロバイダ・インタフェースのOCI_ATTR_CHAR_SIZE属性を使用するアプリケーション向けに設計されています。

表128-2 DBMS_REDACT.ALTER_POLICYのactionパラメータの値

定数 タイプ 説明

ADD_COLUMN

1

BINARY_INTEGER

リダクション・ポリシーに列を追加します。

DROP_COLUMN

2

BINARY_INTEGER

リダクション・ポリシーから列を削除します。

MODIFY_EXPRESSION

3

BINARY_INTEGER

リダクション・ポリシーの式を変更します(この式はBOOLEAN値に評価されます。TRUEの場合はリダクションが適用され、そうでない場合は適用されません)。

MODIFY_COLUMN

4

BINARY_INTEGER

リダクション・ポリシーに含まれる列を変更することによって、リダクションのfunction_typeまたはfunction_parametersを変更します。

SET_POLICY_DESCRIPTION

5

BINARY_INTEGER

リダクション・ポリシーの説明を設定します。

SET_COLUMN_DESCRIPTION

6

BINARY_INTEGER

列に対して実行されるリダクションの説明を設定します。

128.4 DBMS_REDACTのプロシージャの使用

次の表に、リダクションする列のデータ・タイプに基づく、リダクション・ファンクションのタイプとそのパラメータの関係を示します。様々な書式文字列の例を提供することによって、文字列データ・タイプ(この場合は社会保障番号(SSN))やDATEデータ・タイプに対していくつかの一般的なリダクションを実行する方法を示します。また、数値データ・タイプに対するリダクションの様々な例も提供します。

表128-3 データ・リダクション・ファンクションのタイプ

function_type function_parameters

DBMS_REDACT.NONE

-

-

DBMS_REDACT.FULL

-

-

DBMS_REDACT.PARTIAL (文字型用)

次の5つのフィールドを含むカンマ区切りリスト(フィールドを区切るカンマの後にはスペースを入れません)。

  • REDACT_PARTIAL_INPUT_FORMAT

  • REDACT_PARTIAL_OUTPUT_FORMAT

  • REDACT_PARTIAL_MASKCHAR

  • REDACT_PARTIAL_MASKFROM

  • REDACT_PARTIAL_MASKTO

表128-4を参照してください。

'VVVFVVFVVVV,VVV-VV-VVVV,X,1,5'123-45-6789のようなSSN文字列の最初の5桁をマスクし、ダッシュを戻して書式設定し、XXX-XX-6789のような文字列にします。

'VVVFVVFVVVV,VVV VV VVVV,X,1,5'123-45-6789のようなSSN文字列の最初の5桁をマスクし、スペースを追加して書式設定し、XXX XX 6789のような文字列にします。

DBMS_REDACT.PARTIAL (文字型用)、続き

REDACT_PARTIAL_INPUT_FORMAT - 入力形式: 値をリダクションする可能性がある場合はV、書式文字を無視する場合はFを指定します。

REDACT_PARTIAL_INPUT_FORMATのフィールド値VVVFVVFVVVVは、123-45-6789のようなSSN文字列に一致します。

DBMS_REDACT.PARTIAL (文字型用)、続き

REDACT_PARTIAL_OUTPUT_FORMAT - 出力形式: リダクションの出力にはVを指定します。その他の文字はすべて書式文字として処理され、文字どおりに出力されます。

REDACT_PARTIAL_OUTPUT_FORMATのフィールド値VVV-VV-VVVVを使用すると、SSN文字列をXXX-XX-6789にリダクションできます(XREDACT_PARTIAL_MASKCHARフィールドから取得します)。

DBMS_REDACT.PARTIAL (文字型用)、続き

REDACT_PARTIAL_MASKCHAR - 入力のリダクションに使用する文字。

X。SSN文字列をXXX-XX-6789にリダクションします。

DBMS_REDACT.PARTIAL (文字型用)、続き

REDACT_PARTIAL_MASKFROM - REDACT_PARTIAL_INPUT_FORMAT内のどのVからリダクションを開始するかを指定します(次の項目REDACT_PARTIAL_MASKTOの説明を参照)。

1REDACT_PARTIAL_INPUT_FORMATの値VVVFVVFVVVVの最初のVから始まるSSN文字列をXXX-XX-6789のような文字列にリダクションします。

DBMS_REDACT.PARTIAL (文字型用)、続き

REDACT_PARTIAL_MASKTO - REDACT_PARTIAL_INPUT_FORMAT内のどのVでリダクションを終了するかを指定します。

5REDACT_PARTIAL_INPUT_FORMATの値VVVFVVFVVVVの5番目のVまでのSSN文字列をXXX-XX-6789のような文字列にリダクションします。リダクションという点から、書式文字'-' (REDACT_PARTIAL_INPUT_FORMAT内の最初のFに対応します)がどのように無視されるかに注目してください。これが6ではなく5を値に使用する理由です。

DBMS_REDACT.PARTIAL (文字型用)、続き

REDACT_PARTIAL_MASKFROMおよびREDACT_PARTIAL_MASKTOフィールドの値は、REDACT_PARTIAL_INPUT_FORMATフィールドに含まれる文字Vの数(左端のVから目的の位置まで)として指定されます。これにより、REDACT_PARTIAL_MASKFROMREDACT_PARTIAL_MASKTOは、データの特定の書式に依存しなくなります。たとえば、SSNをマスクして最後の4桁のみを表示する一般的な使用例において、123456789のようなデータ(REDACT_PARTIAL_INPUT_FORMATVVVVVVVVV)と123-45-6789のようなデータ(REDACT_PARTIAL_INPUT_FORMATVVVFVVFVVVV)は、どちらもREDACT_PARTIAL_MASKFROM1REDACT_PARTIAL_MASKTO5を使用することが考えられます。

-

DBMS_REDACT.PARTIAL(数値型用)

次の3つのフィールドを含むカンマ区切りリスト(フィールドを区切るカンマの後にはスペースを入れません)。

  • REDACT_PARTIAL_MASKCHAR

  • REDACT_PARTIAL_MASKFROM

  • REDACT_PARTIAL_MASKTO

表128-4を参照してください。

'9,1,5'はSSN番号123456789の最初の5桁を999996789にリダクションし、'0,1,2'は数値1.230.03にリダクションします。

DBMS_REDACT.PARTIAL (数値型用)、続き

REDACT_PARTIAL_MASKCHAR - 入力のリダクションに使用する文字(0から9)。

REDACT_PARTIAL_MASKFROM - リダクションの開始位置(1以上)。小数点は、存在しても位置には含まれません。

REDACT_PARTIAL_MASKTO - リダクションの終了位置。

-

DBMS_REDACT.PARTIAL (日時データ・タイプの場合)

次の5つのフィールドを含むリスト(フィールド間にスペースが入らないように連結されます)。

  • REDACT_PARTIAL_DATE_MONTH

  • REDACT_PARTIAL_DATE_DAY

  • REDACT_PARTIAL_DATE_YEAR

  • REDACT_PARTIAL_DATE_HOUR

  • REDACT_PARTIAL_DATE_MINUTE

  • REDACT_PARTIAL_DATE_SECOND

表128-4を参照してください。

'm12DYHMS'01-May-01 01:01:0101-Dec-01 01:01:01に変更します。

DBMS_REDACT.PARTIAL (日時データ・タイプの場合)、続き

REDACT_PARTIAL_DATE_MONTH: 'M' (月をマスクしない)または'm#' (可能な場合は月を特定の月にマスクする)。# (数字によって指定する月)は1から12

REDACT_PARTIAL_DATE_DAY: 'D'(日をマスクしない)または'd#'(可能な場合は日を#にマスクする)。#1から31

REDACT_PARTIAL_DATE_YEAR: 'Y'(年をマスクしない)または'y#'(可能な場合は年を#にマスクする)。#1から9999

REDACT_PARTIAL_DATE_HOUR: 'H'(時間をマスクしない)または'h#'(可能な場合は時間を#にマスクする)。#0から23

REDACT_PARTIAL_DATE_MINUTE: 'M'(分をマスクしない)または'm#'(可能な場合は分を#にマスクする)。#0から59

REDACT_PARTIAL_DATE_SECOND: 'S'(秒をマスクしない)または's#'(可能な場合は秒を#にマスクする)。#0から59

-

DBMS_REDACT.PARTIAL_WIDTH

DBMS_REDACT.PARTIALと同じ

-

DBMS_REDACT.RANDOM

-

-

表128-4 書式記述子と構成要素のフィールド名およびデリミタ

データ・タイプ 部分リダクション用の書式記述子

文字

REDACT_PARTIAL_INPUT_FORMAT || ',' || REDACT_PARTIAL_OUTPUT_FORMAT || ',' || REDACT_PARTIAL_MASKCHAR || ',' || REDACT_PARTIAL_MASKFROM || ',' || REDACT_PARTIAL_MASKTO

数値

REDACT_PARTIAL_MASKCHAR || ',' || REDACT_PARTIAL_MASKFROM || ',' || REDACT_PARTIAL_MASKTO

日時

REDACT_PARTIAL_DATE_MONTH || REDACT_PARTIAL_DATE_DAY || REDACT_PARTIAL_DATE_YEAR || REDACT_PARTIAL_DATE_HOUR || REDACT_PARTIAL_DATE_MINUTE || REDACT_PARTIAL_DATE_SECOND

128.5 DBMS_REDACTサブプログラムの要約

この表では、DBMS_REDACTパッケージのサブプログラムをリストし、簡単に説明します。

表128-5 DBMS_REDACTパッケージのサブプログラム

サブプログラム 説明

ADD_POLICYプロシージャ

表またはビューのデータ・リダクション・ポリシーを定義します。

ALTER_POLICYプロシージャ

表またはビューのデータ・リダクション・ポリシーを変更します。

APPLY_POLICY_EXPR_TO_COLプロシージャ

データ・リダクション・ポリシー式をリダクションされた列に適用します。

CREATE_POLICY_EXPRESSIONプロシージャ

データ・リダクション・ポリシー式を作成します

DISABLE_POLICYプロシージャ

データ・リダクション・ポリシーを無効化します

DROP_POLICYプロシージャ

データ・リダクション・ポリシーを削除します

DROP_POLICY_EXPRESSIONプロシージャ

データ・リダクション・ポリシー式を削除します

ENABLE_POLICYプロシージャ

データ・リダクション・ポリシーを有効化します

UPDATE_FULL_REDACTION_VALUESプロシージャ

完全リダクションのデータ・リダクション・ポリシーでデフォルトで表示される値を変更します。

UPDATE_POLICY_EXPRESSIONプロシージャ

データ・リダクション・ポリシー式を更新します

128.5.1 ADD_POLICYプロシージャ

このプロシージャは、表またはビューのデータ・リダクション・ポリシーを定義します。

構文

DBMS_REDACT.ADD_POLICY (
   object_schema                IN    VARCHAR2 := NULL,
   object_name                  IN    VARCHAR2,
   policy_name                  IN    VARCHAR2,
   column_name                  IN    VARCHAR2 := NULL,
   function_type                IN    BINARY_INTEGER := DBMS_REDACT.FULL,
   function_parameters          IN    VARCHAR2 := NULL,
   expression                   IN    VARCHAR2,
   enable                       IN    BOOLEAN := TRUE,
   regexp_pattern               IN    VARCHAR2 := NULL,
   regexp_replace_string        IN    VARCHAR2 := NULL,
   regexp_position              IN    BINARY_INTEGER := 1,
   regexp_occurrence            IN    BINARY_INTEGER := 0,
   regexp_match_parameter       IN    VARCHAR2 := NULL,
   policy_description           IN    VARCHAR2 := NULL,
   column_description           IN    VARCHAR2 := NULL);

パラメータ

表128-6 ADD_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表を所有するスキーマ。NULLの場合は現行ユーザーになります。

object_name

データ・リダクション・ポリシーが追加される表またはビューの名前です。

policy_name

ポリシー名。

column_name

(オプション)リダクション・ポリシーを適用する列の名前。複数の列をリダクションする必要がある場合は、ALTER_POLICYプロシージャを使用して列を追加します。

function_type

使用するリダクション・ファンクションのタイプ。使用可能な値は次のとおりです。

- DBMS_REDACT.NONE

- DBMS_REDACT.FULL (デフォルト)

- DBMS_REDACT.NULLIFY

- DBMS_REDACT.PARTIAL

- DBMS_REDACT.RANDOM

- DBMS_REDACT.REGEXP

- DBMS_REDACT.REGEXP_WIDTH

function_typeDBMS_REDACT.REGEXPまたはDBMS_REDACT.REGEXP_WIDTHの場合は、function_parametersパラメータを省略し、regexp_*パラメータを使用してデータ・リダクション・ポリシーを定義する必要があります。

これらの値の意味の概要と使用例は、表128-1を参照してください。

function_parameters

リダクション・ファンクションのパラメータ。指定できる値は、提供されたfunction_typeの値によって異なります。

function_typeDBMS_REDACT.REGEXPまたはDBMS_REDACT.REGEXP_WIDTHの場合は、function_parametersパラメータを省略し、regexp_*パラメータを使用してデータ・リダクション・ポリシーを定義する必要があります。

- DBMS_REDACT.NONE: 全体として省略可能で、デフォルトはNULLです。

- DBMS_REDACT.FULL: 全体として省略可能で、デフォルトはNULLです。

- 部分文字マスキングのマスキング・パラメータ。文字データ・タイプの場合、カンマ区切りリストには次のフィールドが含まれます。

  • 入力形式: 値をマスクする可能性がある場合は'V'、書式文字を無視する場合は'F'を指定します。

  • 出力形式: マスキングの出力には'V'を指定します。その他の文字は書式文字として処理されます。

  • マスク文字: 実際の値を置き換えるために使用する文字です。たとえば、'*''x'があります。

  • 開始桁の位置: 実際の値をマスキング文字に置き換える処理の開始(文字)位置を指定します。文字列は位置1から始まります。書式文字は位置に含まれません。

  • 終了桁の位置: マスキングの終了(文字)位置を指定します。たとえば'VVVFVVFVVVV,VVV-VV-VVVV,X,1,5'は、SSN文字列123-45-6789の最初の5桁をマスクし、ダッシュを戻してSSNのように書式設定し、XXX-XX-6789にします。

数値データ・タイプの場合、カンマ区切りリストには次のフィールドが含まれます。

  • マスク文字: 実際の値を置き換えるために使用する、'0'から'9'の文字です。

  • 開始桁の位置: 実際の値をマスキング文字に置き換える処理の開始(桁)位置を指定します。文字列は位置1から始まります。小数点は位置に含まれません。

  • 終了桁の位置: マスキングの終了(桁)位置を指定します。たとえば'9,1,5'は、社会保障番号123456789の最初の5桁をマスクし、999996789にします。

日時データ・タイプの場合、この書式は、次の一連のフィールドを含む、間にスペースやカンマがない文字列になります。各フィールドは1つ以上の文字から構成され、フィールドの長さは、マスキングが必要であるかどうかによって異なります。1文字のフィールドは、日時値のその構成要素のリダクションは発生しないことを指定するために使用されます。それよりも長いフィールドは、日時値のその構成要素をリダクションした後の値として使用する、特定の時間または日付を示します。

  • 月: 'M' (月をマスクしない)または'm#' (可能な場合は月を特定の月にマスクする)。# (数字によって指定する月)は1から12

  • 日: 'D'(日をマスクしない)または'd#'(可能な場合は日を#にマスクする)。#1から31

  • 年: 'Y'(年をマスクしない)または'y#'(可能な場合は年を#にマスクする)。#1から9999

  • 時間: 'H'(時間をマスクしない)または'h#'(可能な場合は時間を#にマスクする)。#0から23

  • 分: 'M'(分をマスクしない)または'm#'(可能な場合は分を#にマスクする)。#0から59

  • 秒: 'S'(秒をマスクしない)または's#'(可能な場合は秒を#にマスクする)。#0から59

たとえば、'm12d1y2001h1m1s1'では、02-May-13 12:30:23から01-Dec-01 01:01:01に変更されます。

部分文字と番号マスキング・ショートカットの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

expression

表またはビューのデフォルトのブール式。この式を使用する場合、リダクションは、ポリシー式がTRUEと評価された場合にのみ実行されます。

参照

次のファンクションがサポートされています。

  • SYS_CONTEXT

  • XS_SYS_CONTEXT

  • SUBSTRファンクション(SUBSTRBSUBSTRCSUBSTR2SUBSTR4を含む)

  • LENGTHファンクション(LENGTHBLENGTHCLENGTH2LENGTH4を含む)

  • V (APEX_UTIL.GET_SESSION_STATE)

  • NV (APEX_UTIL.GET_NUMERIC_SESSION_STATE)

  • OLS_LABEL_DOMINATES

  • DOMINATES

  • OLS_DOMINATES

  • OLS_DOM

  • DOM

  • OLS_STRICTLY_DOMINATES

  • STRICTLY_DOMINATES

  • S_DOM

  • SA_UTL.DOMINATES

  • SA_UTL.CHECK_READ

  • SA_UTL.NUMERIC_LABEL

  • CHAR_TO_LABEL

  • SA_SESSION.LABEL

これらのサポートされているファンクションの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

enable

データ・リダクション・ポリシーを作成時に有効にするかどうかを決定するブール値。

デフォルト値のTRUEは、ポリシーが作成時に自動的に有効になることを意味します。enableパラメータをFALSEに設定した場合、ポリシーが有効になるのは、その後DBMS_REDACT.ENABLE_POLICYプロシージャをコールしてそのポリシーを有効にした場合のみです。

regexp_pattern

最大512バイトの正規表現パターン。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。function_typeDBMS_REDACT.REGEXPの場合、function_parametersパラメータは指定しないでください。

正規表現パターンの使用およびその例については、『Oracle Database SQL言語リファレンス』を参照してください。

regexp_replace_string

この置換文字列(最大4000文字)には、最大500個の部分正規表現への後方参照を\nという書式で指定できます。nは、1から9の数値です。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

regexp_position

1から始まる整数。検索の開始位置を指定します。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

regexp_occurrence

  • 一致するすべての文字を置き換えるには、0を使用します。

  • n番目に一致する文字を置き換えるには、正の整数nを使用します。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

regexp_match_parameter

デフォルトの一致動作を変更します。'i'、'c'、'n'、'm'、'x'を組み合せた値を指定できます。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

正規表現一致パラメータの使用およびその例については、『Oracle Database SQL言語リファレンス』を参照してください。

policy_description

リダクション・ポリシーの説明です。

column_description

リダクションされた列の説明です。

例外

  • ORA-28060: この列には、すでにデータ・リダクション・ポリシーが存在します。

  • ORA-28061: このオブジェクトには、データ・リダクション・ポリシーを定義できません。

  • ORA-28062: ポリシー式が長すぎます。

  • ORA-28063: ポリシー式が空です。

  • ORA-28064: リダクション・ファンクションのタイプが無効です。

  • ORA-28066: 列columnは無効です。

  • ORA-28069 - このオブジェクトには、すでにデータ・リダクション・ポリシーが存在します。

  • ORA-28073 - 列column_nameにサポートされていないデータ型があります。

  • ORA-28074 - マスキング・パラメータのfield field_nameが無効です。

    このフィールドには、次のいずれかを指定できます。

    • REDACT_PARTIAL_INPUT_FORMAT

    • REDACT_PARTIAL_OUTPUT_FORMAT

    • REDACT_PARTIAL_MASKCHAR

    • REDACT_PARTIAL_MASKFROM

    • REDACT_PARTIAL_MASKTO

    • REDACT_PARTIAL_DATE_MONTH

    • REDACT_PARTIAL_DATE_DAY

    • REDACT_PARTIAL_DATE_YEAR

    • REDACT_PARTIAL_DATE_HOUR

    • REDACT_PARTIAL_DATE_MINUTE

    • REDACT_PARTIAL_DATE_SECOND

    フィールド・コンテンツおよびフィールド順序の例は、表128-3および表128-4を参照してください。

  • ORA-28075: ポリシー式にサポートされていない機能が含まれています

  • ORA-28076: SYS_SESSION_ROLESに属性が指定されていません

  • ORA-28077: 指定された属性(attribute)が最大長を超えています

  • ORA-28078: 正規表現パラメータがないか無効です

  • ORA-28082 - パラメータparameterは無効です(ここで使用可能な値は、function_parameterscolumn_descriptionpolicy_nameおよびpolicy_descriptionです)。

  • ORA-28085 - リダクションの入力と出力の長さが一致しません。

使用上のノート

ファンクション・タイプとファンクション・パラメータ、およびそれに関連する例については、「プロシージャの使用」を参照してください。

リダクションされた列に適用された名前付きデータ・リダクション・ポリシー式は、expressionパラメータで定義された式より優先されます。名前付きポリシー式の影響を受けるリダクションされた列を検索するには、REDACTION_EXPRESSIONSデータ・ディクショナリ・ビューを問い合せます。

部分リダクション・ポリシー:

BEGIN
   DBMS_REDACT.ADD_POLICY(
     object_schema        => 'hr',
     object_name          => 'employees',
     column_name          => 'employee_id',
     policy_name          => 'mask_emp_id_nums',
     function_type        => DBMS_REDACT.PARTIAL,
     function_parameters  => '7,1,5',
     expression           => '1=1');
END;

完全リダクション・ポリシー:

BEGIN
   DBMS_REDACT.ADD_POLICY(
     object_schema        => 'hr',
     object_name          => 'employees',
     column_name          => 'employee_id',
     policy_name          => 'mask_emp_ids',
     function_type        => DBMS_REDACT.FULL,
     expression           => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''CLERK'') 
                                                                    = ''FALSE''');
END;

128.5.2 ALTER_POLICYプロシージャ

このプロシージャは、表またはビューの既存のデータ・リダクション・ポリシーを変更します。

次の1つ以上の方法でポリシーを変更します。

  • ポリシーの式の変更。

  • 指定した列のリダクション・タイプの変更。

  • 指定した列のリダクション・ファンクションのパラメータの変更。

  • リダクション・ポリシーへの列の追加(リダクション・タイプと任意のパラメータを指定する必要がある)。

  • リダクション・ポリシーからの列の削除。

構文

DBMS_REDACT.ALTER_POLICY (
   object_schema                IN    VARCHAR2 := NULL,
   object_name                  IN    VARCHAR2,
   policy_name                  IN    VARCHAR2,
   action                       IN    BINARY_INTEGER := DBMS_REDACT.ADD_COLUMN,
   column_name                  IN    VARCHAR2 := NULL,
   function_type                IN    BINARY_INTEGER := DBMS_REDACT.FULL,
   function_parameters          IN    VARCHAR2 := NULL,
   expression                   IN    VARCHAR2,
   regexp_pattern               IN    VARCHAR2 := NULL,
   regexp_replace_string        IN    VARCHAR2 := NULL,
   regexp_position              IN    BINARY_INTEGER := 1,
   regexp_occurrence            IN    BINARY_INTEGER := 0,
   regexp_match_parameter       IN    VARCHAR2 := NULL,
   policy_description           IN    VARCHAR2 := NULL,
   column_description           IN    VARCHAR2 := NULL);

パラメータ

表128-7 ALTER_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表を所有するスキーマ。NULLの場合は現行ユーザーになります。

object_name

データ・リダクション・ポリシーが変更される表またはビューの名前です。

policy_name

30バイトに制限されているポリシーの名前です。

action

実行するアクション。詳細は、表128-2を参照してください。

column_name

(オプション)リダクション・ポリシーを適用する列の名前。

function_type

使用するリダクション・ファンクションのタイプ。使用可能な値は次のとおりです。

- DBMS_REDACT.NONE

- DBMS_REDACT.FULL (デフォルト)

- DBMS_REDACT.NULLIY

- DBMS_REDACT.PARTIAL

- DBMS_REDACT.RANDOM

- DBMS_REDACT.REGEXP

- DBMS_REDACT.REGEXP_WIDTH

function_typeDBMS_REDACT.REGEXPまたはDBMS_REDACT.REGEXP_WIDTHの場合は、function_parametersパラメータを省略し、regexp_patternregexp_replace_stringregexp_positionregexp_occurrenceおよびregexp_match_parameterを使用してデータ・リダクション・ポリシーを定義する必要があります。

これらの値の意味の概要と使用例は、表128-1を参照してください。

function_parameters

リダクション・ファンクションのパラメータ。指定できる値は、提供されたfunction_typeの値によって異なります。

function_typeDBMS_REDACT.REGEXPまたはDBMS_REDACT.REGEXP_WIDTHの場合は、function_parametersパラメータを省略し、regexp_patternregexp_replace_stringregexp_positionregexp_occurrenceおよびregexp_match_parameterを使用してデータ・リダクション・ポリシーを定義する必要があります。

- function_typeDBMS_REDACT.NONEの場合は、function_parametersパラメータを完全に省略でき、その場合デフォルトのNULLになります。

- function_typeDBMS_REDACT.FULLの場合は、function_parametersパラメータを完全に省略でき、その場合デフォルトのNULLになります。

- function_typeDBMS_REDACT.PARTIALの場合は、function_parametersパラメータは部分マスクのマスキング・パラメータを表します。

  • 入力形式: 値をマスクする可能性がある場合は'V'、書式文字を無視する場合は'F'を指定します。

  • 出力形式: マスキングの出力には'V'を指定します。その他の文字は書式文字として処理されます。

  • マスク文字: 実際の値を置き換えるために使用する文字です。たとえば、'*''x'があります。

  • 開始桁の位置: 実際の値をマスキング文字に置き換える処理の開始(文字)位置を指定します。文字列は位置1から始まります。書式文字は位置に含まれません。

  • 終了桁の位置: マスキングの終了(文字)位置を指定します。たとえば'VVVFVVFVVVV,VVV-VV-VVVV,X,1,5'は、SSN文字列123-45-6789の最初の5桁をマスクし、ダッシュを戻してSSNのように書式設定し、XXX-XX-6789にします。

数値データ・タイプの場合、カンマ区切りリストには次のフィールドが含まれます。

  • マスク文字: 実際の値を置き換えるために使用する、'0'から'9'の文字です。

  • 開始桁の位置: 実際の値をマスキング文字に置き換える処理の開始(桁)位置を指定します。文字列は位置1から始まります。小数点は位置に含まれません。

  • 終了桁の位置: マスキングの終了(桁)位置を指定します。たとえば'9,1,5'は、社会保障番号123456789の最初の5桁をマスクし、999996789にします。

日時データ・タイプの場合、この書式は、次の一連のフィールドを含む、間にスペースやカンマがない文字列になります。各フィールドは1つ以上の文字から構成され、フィールドの長さは、マスキングが必要であるかどうかによって異なります。1文字のフィールドは、日時値のその構成要素のリダクションは発生しないことを指定するために使用されます。それよりも長いフィールドは、日時値のその構成要素をリダクションした後の値として使用する、特定の時間または日付を示します。

  • 月: 'M' (月をマスクしない)または'm#' (可能な場合は月を特定の月にマスクする)。# (数字によって指定する月)は1から12

  • 日: 'D'(日をマスクしない)または'd#'(可能な場合は日を#にマスクする)。#1から31

  • 年: 'Y'(年をマスクしない)または'y#'(可能な場合は年を#にマスクする)。#1から9999

  • 時間: 'H'(時間をマスクしない)または'h#'(可能な場合は時間を#にマスクする)。#0から23

  • 分: 'M'(分をマスクしない)または'm#'(可能な場合は分を#にマスクする)。#0から59

  • 秒: 'S'(秒をマスクしない)または's#'(可能な場合は秒を#にマスクする)。#0から59

たとえば、'm12DYHMS'では、01-May-01 01:01:01から01-Dec-01 01:01:01に変更されます。

部分文字と番号マスキング・ショートカットの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

expression

表またはビューのデフォルトのブール式。この式を使用する場合、リダクションは、ポリシー式がTRUEと評価された場合にのみ実行されます。

次のファンクションがサポートされています。

  • SYS_CONTEXT

  • NV (APEX_UTIL.GET_NUMERIC_SESSION_STATE)

  • V (APEX_UTIL.GET_SESSION_STATE)

  • OLS_LABEL_DOMINATES

  • DOMINATES

  • OLS_DOMINATES

  • OLS_DOM

  • DOM

  • OLS_STRICTLY_DOMINATES

  • STRICTLY_DOMINATES

  • S_DOM

  • SA_UTL.DOMINATES

  • SA_UTL.CHECK_READ

  • SA_UTL.NUMERIC_LABEL

  • CHAR_TO_LABEL

  • SA_SESSION.LABEL

regexp_pattern

最大512バイトの正規表現パターン。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。function_typeDBMS_REDACT.REGEXPの場合、function_parametersパラメータは指定しないでください。

正規表現パターンの使用およびその例については、『Oracle Database SQL言語リファレンス』を参照してください。

regexp_replace_string

この置換文字列(最大4000文字)には、最大500個の部分正規表現への後方参照を\nという書式で指定できます。nは、1から9の数値です。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

regexp_position

1から始まる整数。検索の開始位置を指定します。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

regexp_occurrence

  • 一致するすべての文字を置き換えるには、0を使用します。

  • n番目に一致する文字を置き換えるには、正の整数nを使用します。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

regexp_match_parameter

デフォルトの一致動作を変更します。'i'、'c'、'n'、'm'、'x'を組み合せた値を指定できます。

function_typeパラメータがDBMS_REDACT.REGEXPの場合のみ使用します。

正規表現一致パラメータの使用およびその例については、『Oracle Database SQL言語リファレンス』を参照してください。

policy_description

リダクション・ポリシーの説明です。

column_description

リダクションされた列の説明です。

例外

  • ORA-28062: ポリシー式が長すぎます。

  • ORA-28063: ポリシー式が空です。

  • ORA-28064: リダクション・ファンクションのタイプが無効です。

  • ORA-28066: 列columnは無効です。

  • ORA-28067: 列名がないか無効です

  • ORA-28068: オブジェクト"object"には、データ・リダクション・ポリシーがありません。

  • ORA-28070: 列"column"には、データ・リダクション・ポリシーがありません。

  • ORA-28071: アクションが無効です。

  • ORA-28072: 指定されたポリシー名が正しくありません。

  • ORA-28073 - 列column_nameにサポートされていないデータ型があります。

  • ORA-28074 - マスキング・パラメータのfield field_nameが無効です。

    このフィールドには、次のいずれかを指定できます。

    • REDACT_PARTIAL_INPUT_FORMAT

    • REDACT_PARTIAL_OUTPUT_FORMAT

    • REDACT_PARTIAL_MASKCHAR

    • REDACT_PARTIAL_MASKFROM

    • REDACT_PARTIAL_MASKTO

    • REDACT_PARTIAL_DATE_MONTH

    • REDACT_PARTIAL_DATE_DAY

    • REDACT_PARTIAL_DATE_YEAR

    • REDACT_PARTIAL_DATE_HOUR

    • REDACT_PARTIAL_DATE_MINUTE

    • REDACT_PARTIAL_DATE_SECOND

    フィールド・コンテンツおよびフィールド順序の例は、表128-3および表128-4を参照してください。

  • ORA-28075: ポリシー式にサポートされていない機能が含まれています。

  • ORA-28076: SYS_SESSION_ROLESに属性が指定されていません。

  • ORA-28077: 指定された属性(attribute)が最大長を超えています。

  • ORA-28078: 正規表現パラメータがないか無効です。

  • ORA-28082 - パラメータparameterは無効です(ここで使用可能な値は、function_parameterscolumn_descriptionpolicy_nameおよびpolicy_descriptionです)。

  • ORA-28085 - リダクションの入力と出力の長さが一致しません。

使用上のノート

ファンクション・タイプとファンクション・パラメータ、およびそれに関連する例については、「プロシージャの使用」を参照してください。

リダクションされた列に適用された名前付きデータ・リダクション・ポリシー式は、expressionパラメータで定義された式より優先されます。名前付きポリシー式の影響を受けるリダクションされた列を検索するには、REDACTION_EXPRESSIONSデータ・ディクショナリ・ビューを問い合せます。

BEGIN
   DBMS_REDACT.ALTER_POLICY(
     object_schema          => 'HR',
     object_name            => 'EMPLOYEES',
     policy_name            => 'mask_emp_id_nums',
     action                 => DBMS_REDACT.DROP_COLUMN,
     column_name            => 'EMAIL');
END;

128.5.3 APPLY_POLICY_EXPR_TO_COLプロシージャ

このプロシージャは、名前付きOracle Data Redactionポリシー式を、表またはビューからリダクションされた列に関連付けます。

構文

DBMS_REDACT.APPLY_POLICY_EXPR_TO_COL (
   object_schema                IN VARCHAR2 := NULL,
   object_name                  IN VARCHAR2,
   column_name                  IN VARCHAR2, 
   policy_expression_name       IN VARCHAR2 := NULL);

パラメータ

表128-8 APPLY_POLICY_EXPR_TO_COLプロシージャのパラメータ

パラメータ 説明

object_schema

リダクションされた列を含むスキーマの名前。

object_name

リダクションされた列を含むオブジェクト(表またはビュー)の名前。

column_name

ポリシー式を適用するリダクションされた列の名前。

POLICY_EXPRESSION_NAME

ポリシー式の名前。

例外

  • ORA-28068: オブジェクト"object"には、データ・リダクション・ポリシーがありません。

  • ORA–28082 - パラメータparameterが無効です。

  • ORA-28092 - 値valueのパラメータparameterにエラーがあります。

使用上のノート

REDACTION_EXPRESSIONSデータ・ディクショナリ・ビューを問い合せることで、既存のデータ・リダクション・ポリシー式を検索できます。リダクションされた列を検索するには、REDACTION_COLUMNSデータ・ディクショナリ・ビューを問い合せます。

BEGIN
   DBMS_REDACT.APPLY_POLICY_EXPR_TO_COL(
      object_schema           => 'OE',
      object_name             => 'CUSTOMERS',
      column_name             => 'INCOME_LEVEL',
      policy_expression_name  => 'oe_redact_pol');
END;

128.5.4 CREATE_POLICY_EXPRESSIONプロシージャ

このプロシージャは、名前付きOracle Data Redactionポリシー式を作成します。

構文

DBMS_REDACT.CREATE_POLICY_EXPRESSION (
   policy_expression_name          IN    VARCHAR2,
   expression                      IN    VARCHAR2,
   policy_expression_description   IN    VARCHAR2 := NULL);

パラメータ

表128-9 CREATE_POLICY_EXPRESSIONプロシージャのパラメータ

パラメータ 説明

POLICY_EXPRESSION_NAME

ポリシー式の名前。

expression

ポリシー式の定義。

policy_expression_description

ポリシー式の説明。

例外

  • ORA–28082 - パラメータparameterが無効です。

  • ORA-28092 - 値valueのパラメータparameterにエラーがあります。

使用上のノート

ファンクション・タイプとファンクション・パラメータ、およびそれに関連する例については、「プロシージャの使用」を参照してください。

ポリシー式を作成した後、DBMS_REDACT.APPLY_POLICY_EXPR_TO_COLプロシージャを実行して、リダクションされた表またはビュー列に関連付けることができます。既存のリダクションされた列を検索するには、REDACTION_COLUMNSデータ・ディクショナリ・ビューを問い合せます。

BEGIN
   DBMS_REDACT.CREATE_POLICY_EXPRESSION(
     policy_expression_name          => 'oe_redact_pol',
     expression                      => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''OE'''),
     policy_expression_description   => 'Enables policy for user OE ');
END;

128.5.5 DISABLE_POLICYプロシージャ

このプロシージャは、データ・リダクション・ポリシーを無効にします。

構文

DBMS_REDACT.DISABLE_POLICY (
   object_schema                IN    VARCHAR2 := NULL,
   object_name                  IN    VARCHAR2,
   policy_name                  IN    VARCHAR2);

パラメータ

表128-10 DISABLE_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表またはビューを所有するスキーマ。NULLの場合は現行ユーザーになります。

object_name

データ・リダクション・ポリシーが無効化される表またはビューの名前です。

policy_name

無効にするポリシーの名前。

例外

  • ORA-28068: オブジェクト"object"には、データ・リダクション・ポリシーがありません。

  • ORA-28072: 指定されたポリシー名が正しくありません。

  • ORA-28080: ポリシーはすでに無効化されています。

BEGIN
   DBMS_REDACT.DISABLE_POLICY (
     object_schema    => 'hr',
     object_name      => 'employees',
     policy_name      => 'mask_emp_ids');
END;

128.5.6 DROP_POLICYプロシージャ

このプロシージャは、表またはビューからマスキング・ポリシーを削除することによって、データ・リダクション・ポリシーを削除します。

構文

DBMS_REDACT.DROP_POLICY (
   object_schema                IN    VARCHAR2 := NULL,
   object_name                  IN    VARCHAR2,
   policy_name                  IN    VARCHAR2);

パラメータ

表128-11 DROP_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表またはビューを所有するスキーマ。NULLの場合は現行ユーザーになります。

object_name

データ・リダクション・ポリシーが削除される表またはビューの名前です。

policy_name

削除するポリシーの名前。

例外

  • ORA-28068: オブジェクト"object"には、データ・リダクション・ポリシーがありません。

  • ORA-28072: 指定されたポリシー名が正しくありません。

BEGIN
   DBMS_REDACT.DROP_POLICY (
      object_schema    =>  'hr',
      object_name      =>  'employees',
      policy_name      =>  'mask_emp_ids');
END;

128.5.7 DROP_POLICY_EXPRESSIONプロシージャ

このプロシージャは、名前付きポリシー式を削除します。

構文

DBMS_REDACT.DROP_POLICY_EXPRESSION (
   policy_expression_name       IN    VARCHAR2);

パラメータ

表128-12 DROP_POLICY_EXPRESSIONプロシージャのパラメータ

パラメータ 説明

POLICY_EXPRESSION_NAME

ポリシー式の名前。

例外

  • ORA–28082 - パラメータparameterが無効です。

  • ORA-28092 - 値valueのパラメータparameterにエラーがあります。

使用上のノート

REDACTION_EXPRESSIONSデータ・ディクショナリ・ビューを問い合せることで、既存のデータ・リダクション・ポリシー式を検索できます。

BEGIN
   DBMS_REDACT.DROP_POLICY_EXPRESSION(
     policy_expression_name  => 'oe_redact_pol');
END;

128.5.8 ENABLE_POLICYプロシージャ

このプロシージャは、データ・リダクション・ポリシーを再度有効にします。

構文

DBMS_REDACT.ENABLE_POLICY (
   object_schema                IN    VARCHAR2 := NULL,
   object_name                  IN    VARCHAR2,
   policy_name                  IN    VARCHAR2);

パラメータ

表128-13 ENABLE_POLICYプロシージャのパラメータ

パラメータ 説明

object_schema

表またはビューを所有するスキーマ。NULLの場合は現行ユーザーになります。

object_name

データ・リダクション・ポリシーが有効化される表またはビューの名前です。

policy_name

有効にするポリシーの名前。

例外

  • ORA-28068: オブジェクト"object"には、データ・リダクション・ポリシーがありません。

  • ORA-28071: アクションが無効です。

  • ORA-28072: 指定されたポリシー名が正しくありません。

  • ORA-28079: ポリシーはすでに有効化されています。

BEGIN
   DBMS_REDACT.ENABLE_POLICY (
      object_schema    =>  'hr',
      object_name      =>  'employees',
      policy_name      =>  'mask_emp_ids');
END;

128.5.9 UPDATE_FULL_REDACTION_VALUESプロシージャ

このプロシージャは、完全リダクションのデータ・リダクション・ポリシーでデフォルトで表示される値を変更します。

構文

DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES (
   number_val       IN NUMBER                    :=  NULL,
   binfloat_val     IN BINARY_FLOAT              :=  NULL,
   bindouble_val    IN BINARY_DOUBLE             :=  NULL,
   char_val         IN CHAR                      :=  NULL,
   varchar_val      IN VARCHAR2                  :=  NULL,
   nchar_val        IN NCHAR                     :=  NULL,
   nvarchar_val     IN NVARCHAR2                 :=  NULL,
   date_val         IN DATE                      :=  NULL,
   ts_val           IN TIMESTAMP                 :=  NULL,
   tswtz_val        IN TIMESTAMP WITH TIME ZONE  :=  NULL,
   blob_val         IN BLOB                      :=  NULL,
   clob_val         IN CLOB                      :=  NULL,
   nclob_val        IN NCLOB                     NULL);

パラメータ

表128-14 UPDATE_FULL_REDACTION_VALUESプロシージャのパラメータ

パラメータ 説明

number_val

NUMBERデータ・タイプの列のデフォルト値を変更します。

binfloat_val

BINARY_FLOATデータ・タイプの列のデフォルト値を変更します。

bindouble_val

BINARY_DOUBLEデータ・タイプの列のデフォルト値を変更します。

char_val

CHARデータ・タイプの列のデフォルト値を変更します。

varchar_val

VARCHAR2データ・タイプの列のデフォルト値を変更します。

nchar_val

NCHARデータ・タイプの列のデフォルト値を変更します。

nvarchar_val

NVARCHAR2データ・タイプの列のデフォルト値を変更します。

date

DATEデータ・タイプの列のデフォルト値を変更します。

ts_val

TIMESTAMPデータ・タイプの列のデフォルト値を変更します。

tswtz_val

TIMESTAMP WITH TIME ZONEデータ・タイプの列のデフォルト値を変更します。

blob_val

BLOBデータ・タイプの列のデフォルト値を変更します。

clob_val

CLOBデータ・タイプの列のデフォルト値を変更します。

nclob_val

NCLOBデータ・タイプの列のデフォルト値を変更します。

例外

ORA-28082 - パラメータparameterは無効です(ここで使用可能な値は、char_valnchar_valvarchar_valおよびnvarchar_valです)。

128.5.10 UPDATE_POLICY_EXPRESSIONプロシージャ

このプロシージャは、名前付きOracle Data Redactionポリシー式を更新します。

構文

DBMS_REDACT.UPDATE_POLICY_EXPRESSION (
   policy_expression_name          IN    VARCHAR2,
   expression                      IN    VARCHAR2,
   policy_expression_description   IN    VARCHAR2 := NULL);

パラメータ

表128-15 UPDATE_POLICY_EXPRESSIONプロシージャのパラメータ

パラメータ 説明

POLICY_EXPRESSION_NAME

ポリシー式の名前。

expression

ポリシー式の定義。

policy_expression_description

ポリシー式の説明。

例外

  • ORA–28082 - パラメータparameterが無効です。

  • ORA-28092 - 値valueのパラメータparameterにエラーがあります。

使用上のノート

REDACTION_EXPRESSIONSデータ・ディクショナリ・ビューを問い合せることで、既存のポリシー式を検索できます。

BEGIN
   DBMS_REDACT.UPDATE_POLICY_EXPRESSION(
     policy_expression_name         => 'oe_redact_pol',
     expression                     => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''OE'''),
     policy_expression_description  => 'Disables policy for user OE ');
END;