3.3 DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文

データ・リダクション・ポリシーを作成するには、DBMS_REDACT.ADD_POLICYプロシージャを使用する必要があります。

DBMS_REDACT.ADD_POLICYプロシージャの完全な構文は次のとおりです。

DBMS_REDACT.ADD_POLICY (
 object_schema               IN VARCHAR2 := NULL,
 object_name                 IN VARCHAR2,
 policy_name                 IN VARCHAR2, 
 policy_description          IN VARCHAR2 := NULL,
 column_name                 IN VARCHAR2 := NULL,
 column_description          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);

ここでは次のように指定します:

表3-2 DBMS_REDACT.ADD_POLICYのパラメータ

パラメータ 説明
object_schema データ・リダクション・ポリシーを適用するオブジェクトのスキーマを指定します。この設定を省略(またはNULLを入力)する場合、Oracle Databaseは現在のユーザー名を使用します。ここでの"現在のユーザー"の意味は、DBMS_REDACT.ADD_POLICYプロシージャを呼び出す場所によって変わる可能性があることに注意してください。

たとえば、ユーザーmpikeは、ユーザーfbrownに、mpikeのスキーマ内のmpike.protect_dataという名前の定義者権限のPL/SQLパッケージに対するEXECUTE権限を付与すると仮定します。このパッケージ内から、mpikeは、protect_cust_dataと呼ばれるプロシージャをコード化し、これにより、DBMS_REDACT.ADD_POLICYが呼び出されます。ユーザーmpikeは、object_schemaパラメータをNULLに設定しました。

fbrownmpike.protect_dataパッケージのprotect_cust_dataプロシージャを呼び出すと、Oracle Databaseは、fbrownのスキーマのcust_dataオブジェクトではなく、mpikeスキーマのオブジェクトcust_dataの周りにデータ・リダクション・ポリシーを定義しようとします。

object_name 必須

データ・リダクション・ポリシーの適用先の表またはビューの名前を指定します。

policy_name 必須

作成するポリシーの名前を指定します。この名前は、データベース・インスタンス内で必ず一意である必要があります。REDACTION_POLICIESデータ・ディクショナリ・ビューのPOLICY_NAME列を問い合せることで、既存のデータ・リダクション・ポリシーのリストを検索できます。

expression

必須

ポリシーが適用されるタイミングを決定するブール型SQL式を指定します。リダクションは、ポリシー式がTRUEと評価された場合にのみ実行されます。データ・リダクション・ポリシーの条件を定義する式の使用を参照してください。

デフォルトでは、データ・リダクション・ポリシー式は、その表またはビューに対して定義されているデータ・リダクション・ポリシーに属するすべての列に適用されます。あるいは、個々の列に対してポリシー式を作成して関連付けることにより既存の式をオーバーライドすることもできます。これらの列レベルの式は、名前付きポリシー式と呼ばれます。複数の名前付きポリシー式の作成および管理を参照してください。

policy_description

ポリシーの目的についての簡単な説明を指定します。

column_name

データをリダクションする列を指定します。次のことに注意してください:

  • データ・リダクション・ポリシーを複数の列に適用できます。データ・リダクション・ポリシーを複数の列に適用する場合、DBMS_REDACT.ADD_POLICYを使用してポリシーを作成した後、DBMS_REDACT.ALTER_POLICYプロシージャを必要な回数実行して、必要な残りの列それぞれをポリシーに追加します。Oracle Data Redactionポリシーの変更を参照してください。

  • 表またはビューに定義できるポリシーは1つだけです。ただし、表に新しいビューを作成できるため、2つ目のリダクション・ポリシーをこの新しいビューに定義することで、この新しいビューに対して問合せを発行するときに、異なる方法で列をリダクションできます。指定された列のリダクション方法を決める際、Oracle Databaseは、ビュー・チェーンの最初のビューのポリシーを使用します。たとえば、表table_1と2つのビューview_1およびview_2があり、それぞれに次のようなデータ・リダクション・ポリシーがあるとします。

    • table_1には、データ・リダクション・ポリシーtable_1_polがあります。
    • view_1は、table_1に作成されます。view_1には、データ・リダクション・ポリシーview_1_polがあります。
    • view_2は、view_1に作成されます。view_2には、データ・リダクション・ポリシーview_2_polがあります。

    table_1を問い合せると、列に対してポリシーtable_1_polが適用されます。view_1を問い合せると、ポリシーview_1_polが適用されます。同様に、view_2を問い合せると、view_2の列はview_2_polに従ってリダクションされます。

  • 列を指定しない場合(たとえば、NULLを入力)、いずれの列もポリシーによるリダクションは行われません。これにより、ユーザー自身のポリシーを作成して配置できるようになるため、後で準備ができたときに列の仕様を追加することができます。DBMS_REDACT.ADD_POLICYの設定時に列名を省略した場合は、expressionパラメータのみが必要です。

  • Oracle Virtual Private Database (VPD)の行フィルタ処理条件で現在使用されている列は使用しないでください。つまり、列は、VPDポリシー関数によって生成されるVPD述語の一部にすることはできません。(VPDでデータ・リダクションを使用する方法の詳細は、Oracle Data RedactionとOracle Virtual Private Databaseを参照してください。)

column_description

ポリシーの目的についての簡単な説明を指定します。

function_type

リダクションのタイプを設定するファンクションを指定します。column_nameが指定されている場合にのみ指定できます。

function_typeパラメータを省略する場合、デフォルトのリダクションfunction_type設定は、DBMS_REDACT.FULLです。

詳細は、次の各項を参照してください。

function_parameters 部分リダクションの場合に列のリダクションをどのように発生させるかを指定します。function_typeDBMS_REDACT.PARTIALの場合は必須です。部分リダクション・ポリシーを作成する構文を参照してください。
enable

TRUE (デフォルト)に設定すると、そのポリシーが作成時に有効になります。FALSEに設定すると、無効化されたポリシーとしてポリシーが作成されます。ポリシーを作成した後、そのポリシーを無効化または有効化できます。次の項を参照してください。

regexp_pattern 正規表現を使用してデータを完全または部分的にリダクションできます。実際のデータにregexp_patternに一致するものがない場合は完全リダクションが実行されるので、regexp_patternを指定するときは注意してください。列のすべての値が、使用している正規表現のセマンティクスに一致しているか確認します。詳細は、正規表現ベースのリダクション・ポリシーを作成する構文を参照してください。
regexp_replace_string リダクションするデータをどのように置き換えるかを指定します。このデータは、CHARVARCHAR2NCHARまたは NVARCHAR2のどのデータ型にもできます。regexp_replace_stringには、\nという書式で部分正規表現への後方参照を500個まで含めることができます。ここでのnは、1から9までの数値です。regexp_replace_string設定にバックスラッシュ(\)を含める場合は、その前にエスケープ文字(これもバックスラッシュ)を付ける必要があります。

たとえば、一致したパターンを文字どおり\2に置換するには(それを一致したパターンで2番目に一致した部分正規表現に置換するのではない)、regexp_replace_string setting設定に\\2を入力します。

詳細は、Oracle Database SQL言語リファレンスを参照してください。

regexp_position 文字列検索の開始位置を指定します。入力する値は、Oracle Databaseが検索を開始するcolumn_nameデータの文字を示す正の整数です。デフォルトは1または DBMS_REDACT.RE_BEGINNING形式であり、これは、Oracle Databaseでcolumn_nameデータの最初の文字で検索が開始されることを意味します。
regexp_occurrence 検索および置換操作の実行方法を指定します。入力する値は、置換操作の回数を示す正の整数です

0またはDBMS_REDACT.RE_ALL形式を指定する場合、Oracle Databaseは、一致したすべてのものを置換します。

DBMS_REDACT.RE_FIRST形式を指定する場合、Oracle Databaseは、最初に一致したものを置換します。

正の整数nを指定した場合は、Oracle Databaseにより、n番目の一致が置換されます。出現が1より大きい場合、1番目のパターンが検出された後に続く1文字目から、2番目(以降)の出現を検索します。

regexp_match_parameter ファンクションのデフォルトの照合動作を変更できる、テキスト・リテラルを指定します。このパラメータの動作は、REGEXP_REPLACE SQLファンクションのこのファンクションの動作と同じです。大文字と小文字を区別せずに検索をフィルタするには、RE_CASE_INSENSITIVE形式を指定します。

詳細は、Oracle Database SQL言語リファレンスを参照してください。

リダクション・ポリシーについての情報を検索するには、REDACTION_POLICIESデータ・ディクショナリ・ビューを問い合せます。

COMPATIBLEデータベース初期化パラメータを23以上に設定した後、初めて完全なリダクション・ポリシーをブール列に追加すると、REDACTION_VALUES_FOR_TYPE_FULLのカタログ・ビューにBOOLEAN_VALUE列が表示され、BOOLCOL列がSYS.RADM_FPTM$データ・ディクショナリ表に表示されます。