12 Oracle Data Redactionの特徴と機能
Oracle Data Redactionには、データをリダクションする様々な方法があります。
- 全データをリダクションする完全データ・リダクション
完全データ・リダクションでは、表またはビューの指定した列の内容全体がリダクションされます。 - データのセクションをリダクションする部分データ・リダクション
部分データ・リダクションでは、表示される出力の一部をリダクションします。 - データのパターンをリダクションする正規表現
正規表現によって、パターン検索に基づいて列データの値内にある特定のデータをリダクションします。 - NULL値を使用したリダクション
列データをNULL値で置き換えてリダクションするOracle Data Redactionポリシーを作成できます。 - ランダム値を生成するランダム・データ・リダクション
ランダム・データ・リダクションでは、値全体がランダムな値に置換されてリダクションされます。 - データ型に基づいた完全、部分およびランダム・リダクションの比較
完全、部分およびランダムのどのデータ・リダクション方式を使用するかによって、Oracle組込み、ANSI、ユーザー定義、およびOracle提供のデータ型に対する影響は異なります。 - テストを目的にリダクションしない場合
リダクションを実行しないデータ・リダクション・ポリシーを作成できます。 - 名前付きデータ・リダクション・ポリシー式の集中管理
複数の表およびビューの列に使用できる、名前付きポリシー式のライブラリを作成できます。
親トピック: Oracle Data Redactionの使用
12.1 全データをリダクションする完全データ・リダクション
完全データ・リダクションでは、表またはビューの指定した列の内容全体がリダクションされます。
デフォルトでは、出力は次のように表示されます。
-
文字データ型: 出力テキストは、空白1つです。
-
数値データ型: 出力テキストはゼロです(
0)です。 -
日時データ型: 出力テキストは、2001年1月1日に設定されており、
01-JAN-01と表示されます。
完全リダクションがデフォルトで、これは、データ・リダクション・ポリシーで列を指定されているが、function_typeパラメータ設定が指定されていないときに使用されます。完全リダクションにfunction_typeパラメータ設定を設定するには、DBMS_REDACT.ADD_POLICYプロシージャを実行するときに、次の設定を入力します。
function_type => DBMS_REDACT.FULL
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャを使用すると、完全リダクションの出力を別の値に変更できます。
関連項目
親トピック: Oracle Data Redactionの特徴と機能
12.2 データのセクションをリダクションする部分データ・リダクション
部分データ・リダクションでは、表示される出力の一部をリダクションします。
実際のデータ内に、リダクションを開始する位置、その位置からリダクションする文字数および使用するリダクション文字を設定できます。このタイプのリダクションは、なんらかの方法でデータがリダクションされたことを、データを表示しているユーザーに明らかにしたい場合に便利です。通常、このタイプのリダクションは、クレジット・カードやID番号に使用します。
部分データ・リダクションでは、データの幅が固定されている必要があることに注意してください。可変長の文字列値を含む列をリダクションする場合は、正規表現を使用する必要があります。
部分リダクションを指定するには、DBMS_REDACT.ADD_POLICYプロシージャのfunction_typeパラメータをDBMS_REDACT.PARTIALに設定し、function_parametersパラメータを使用して部分リダクション動作を定義する必要があります。
部分データ・リダクションで表示される出力は、次のとおりです。
-
文字データ型: 部分的にリダクションする場合、
987-65-4320という値の社会保障番号(文字データ型内で文字列がハイフンで連結されている)をリダクションすると、次の例のように表示されます。右側のコードは文字データのリダクション方法を指定します。このコードで、実際のデータの期待される入力形式、リダクションされる出力の表示に使用する形式、リダクションの開始位置、リダクションに使用する文字、リダクションする文字数が指定されます。最初の例では、文字データ型の社会保障番号に事前定義された形式(以前のリリースでは「ショートカット」)を使用し、2番目の例では、番号間のハイフン(-)を保持しながら最初の5つの番号をアスタリスク(*)で置換します。XXX-XX-4320 function_parameters => DBMS_REDACT.REDACT_US_SSN_F5, ***-**-4320 function_parameters => 'VVVFVVFVVVV,VVV-VV-VVVV,*,1,5',
-
数値データ型: 部分的にリダクションされた
NUMBERデータ型の社会保障番号987654328は、次のように表示されます。どちらも最初の5桁をリダクションします。最初の例では、NUMBERデータ型の社会保障番号のために設計されている事前定義された形式を使用し、2番目の例では、最初の5桁の番号が9で置換されます。XXXXX4328 function_parameters => DBMS_REDACT.REDACT_NUM_US_SSN_F5, 999994328 function_parameters => '9,1,5',
-
日時データ型: 部分的にリダクションされた日時の値を単純に別の日付に表示できます。たとえば、日付
29-AUG-11 10.20.50.000000 AMは、次のように表示されます。最初の例では、月の日付が02(d02という設定を使用)にリダクションされ、2番目の例では、月がDEC(m12を使用)にリダクションされます。大文字の値は、実際の月(M)、年(Y)、時間(H)、分(M)および秒(S)を示します。02-AUG-11 10.20.50.000000 AM function_parameters => 'Md02YHMS', 29-DEC-11 10.20.50.000000 AM function_parameters => 'm12DYHMS',
12.3 データのパターンをリダクションする正規表現
正規表現によって、パターン検索に基づいて列データの値内にある特定のデータをリダクションします。
たとえば、ドメインのみが表示されるように電子メール・アドレスのユーザー名をリダクションできます(電子メール・アドレスhpreston@example.comのhprestonを[redacted]に置き換えて、[redacted]@example.comと表示するなど)。リダクションを実行するには、DBMS_REDACT.ADD_POLICYプロシージャのfunction_typeパラメータをDBMS_REDACT.REGEXPまたはDBMS_REDACT.REGEXP_WIDTHのいずれかに設定し、さらに次のパラメータを使用して、正規表現を作成する必要があります。
-
文字列検索パターン(つまり、検索対象の値)で、例は次のとおりです。
regexp_pattern => '(.+)@(.+\.[A-Za-z]{2,4})'この設定では、次の形式のパターンが検索されます。
one_or_more_characters@one_or_more_characters.2-4_characters_in_range_A-Z_or_a-z
-
regexp_pattern設定で一致した値を置換する置換文字列です。置換文字列は、主要な正規表現パターンの副次式に後方参照を含めることができます。次の例では、(regexp_pattern設定の)@記号の前にあるデータをテキスト[redacted]に置き換えます。\2設定は、2番目の一致グループであるregexp_pattern設定の(.+\.[A-Za-z]{2,4})を示します。regexp_replace_string => '[redacted]@\2'
-
データの最初の文字などの文字列検索の文字の開始位置で、例は次のとおりです。
regexp_position => DBMS_REDACT.RE_BEGINNING
-
実行する検索および置換操作の種類(最初の出現、5回おきの出現、すべて出現)で、例は次のとおりです。
regexp_occurrence => DBMS_REDACT.RE_ALL
-
検索および置換操作のデフォルトの一致動作で、検索で大/小文字を区別するかどうかの例は次のとおりです(
iはこれを大/小文字の区別なしに設定します)。regexp_match_parameter => 'i
デフォルトのパラメータに加え、電話番号、電子メール・アドレスおよびクレジット・カード番号に、よく使用される正規表現を使用できるように事前定義された形式のセットを使用できます。
12.4 NULL値を使用したリダクション
列データをNULL値で置き換えてリダクションするOracle Data Redactionポリシーを作成できます。
この機能により、DBMS_REDACT.NULLIFYファンクションを使用して、表またはビューの列のすべての機密データを隠し、NULL値に置き換えることができます。このファンクションは、プロシージャDBMS_REDACT.ADD_POLICYまたはDBMS_REDACT.ALTER_POLICYのfunction_typeパラメータを使用して設定できます。
たとえば:
function_type => DBMS_REDACT.NULLIFY
12.5 ランダム値を生成するランダム・データ・リダクション
ランダム・データ・リダクションでは、値全体がランダムな値に置換されてリダクションされます。
問合せの結果セットに表示されるリダクションされた値は、アプリケーション・ユーザーが問合せを実行するたびに、ランダムに変更されます。
このタイプのリダクションは、データがリダクションされていることを明らかにしたくない場合に便利です。ランダム・データか実際のデータか区別するのが難しい数値および日時データ型の場合に、特に最適です。
ランダム値として表示される出力は、次のように、リダクションされた列のデータ型によって異なります。
-
文字データ型: ランダムな出力は、文字が混合されています(たとえば、
HTU[G{\pjkEWcK)。CHARとVARCHAR2のデータ型では、次に示すように動作が異なります。-
CHARデータ型: リダクションされた出力の文字セットは、常に列の文字セットと同一になります。リダクションされた出力のバイト長は、常に列定義の長さ(つまり、表の作成時に指定した列の長さ)と同一になります。たとえば、列が
CHAR(20)である場合、ユーザー問合せのリダクションされた出力には、ランダムな20文字が提供されます。 -
VARCHAR2データ型:
VARCHARデータ型のランダム・リダクションでは、リダクションされた出力の文字セットは、常に列の文字セットと同一になります。リダクションされた出力の長さは、列の実際のデータの長さに基づいて制限されます。実際のデータの長さを超える文字は表示されません。たとえば、列がVARCHAR2(20)で、リダクションされる行に長さ12の実際のデータが含まれている場合、その行に対するユーザー問合せのリダクションされた出力には、ランダムな12文字(20文字ではない)が提供されます。
-
-
数値データ型: 実際の各数値が、実際のデータの絶対値のモジュロである、ランダムな非負値に置換されてリダクションされます。このリダクション結果は、実際のデータの精度を超えないランダムな数値になります。たとえば、数値
987654321は、数値12345678、13579、0または987654320のいずれかに置換されてリダクションされます。数値987654321、99987654321または-1に置換されることはありません。数値-123は、数値122、0または83に置換されてリダクションされますが、数値123、1123または-2のいずれかに置換されることはありません。前述の例の唯一の例外は、実際の値が-1から9の間の整数である場合です。この場合、実際のデータは、ランダムな非負整数であるmodulo 10に置換されてリダクションされます。
-
日時データ型: 日付データ型の値がランダム・データ・リダクションを使用してリダクションされる場合、Oracle Databaseには、実際のデータの日付と異なるランダムな日付が常に表示されます。
ランダム・リダクションを使用する設定は、次のとおりです。
function_type => DBMS_REDACT.RANDOM
親トピック: Oracle Data Redactionの特徴と機能
12.6 データ型に基づいた完全、部分およびランダム・リダクションの比較
完全、部分およびランダムのどのデータ・リダクション方式を使用するかによって、Oracle組込み、ANSI、ユーザー定義、およびオラクル社提供のデータ型に対する影響は異なります。
- Oracle組込みデータ型のリダクション機能
Oracle Data Redactionでは、使用されるデータ・リダクション・ポリシーのタイプに応じてOracle組込みデータ型を扱います。 - ANSIデータ型のリダクション機能
Oracle Data Redactionでは、データ・リダクション・ポリシーのリダクション・タイプに応じて固有の方法でANSIデータ型を変換します。 - 組込みデータ型およびANSIデータ型の完全リダクション機能
完全リダクションでは、デフォルトのリダクション済の値は、データ型がOracle組込みであるかANSIであるかによって異なります。 - ユーザー定義データ型またはOracle提供データ型のリダクション機能
Oracle Data Redactionでは、いくつかのデータ型はサポートされていません。
親トピック: Oracle Data Redactionの特徴と機能
12.6.1 Oracle組込みデータ型のリダクション機能
Oracle Data Redactionでは、使用されるデータ・リダクション・ポリシーのタイプに応じてOracle組込みデータ型を扱います。
表12-1に、Oracle組込みデータ型のOracle Data Redactionのサポートを示します。
表12-1 Oracle組込みデータ型のリダクション・サポート
| 列のデータ型 | 完全 | 部分 | 正規表現 | ランダム |
|---|---|---|---|---|
|
文字脚注1 |
はい |
はい |
はい |
はい |
|
数値脚注2 |
はい |
はい |
なし |
はい |
|
Raw脚注3 |
なし |
なし |
なし |
なし |
|
日時脚注4 |
はい |
はい |
なし |
はい |
|
インターバル脚注5 |
なし |
なし |
なし |
なし |
|
|
なし |
なし |
なし |
なし |
|
|
はい |
なし |
なし |
なし |
|
|
はい |
なし |
はい |
なし |
|
|
はい |
なし |
はい |
なし |
|
|
なし |
なし |
なし |
なし |
|
|
なし |
なし |
なし |
なし |
脚注1
CHAR、VARCHAR2 (VARCHAR2(20000)などの長いVARCHAR2を含む)、NCHAR、NVARCHAR2を含みます
脚注2
NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLEを含みます
脚注3
LONG RAW、RAWを含みます
脚注4
DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONEを含みます
脚注5
INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECONDを含みます
12.6.2 ANSIデータ型のリダクション機能
Oracle Data Redactionでは、データ・リダクション・ポリシーのリダクション・タイプに応じて固有の方法でANSIデータ型を変換します。
表12-2では、ANSIデータ型に対して、完全、部分およびランダムのリダクション・スタイルがどのように機能するかを、変換方法およびサポート・ステータスについて比較します。
表12-2 ANSIデータ型のリダクション・サポート
| データ型 | 変換方法 | 完全リダクション | 部分リダクション | 正規表現 | NULLリダクション | ランダム・リダクション |
|---|---|---|---|---|---|---|
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
|
はい |
はい |
はい |
はい |
はい |
|
|
変換なし |
なし |
なし |
なし |
なし |
なし |
12.6.3 組込みデータ型およびANSIデータ型の完全リダクション機能
完全リダクションでは、デフォルトのリダクション済の値は、データ型がOracle組込みであるかANSIであるかによって異なります。
ANSIデータ型のリダクション機能に、完全リダクションを使用するOracle組込みデータ型の列とANSIデータ型の列の両方のデフォルト設定を示します。
表12-3 完全リダクションを使用する列のデフォルト設定およびカテゴリ
| データ型 | デフォルトのリダクション値 | データ型のカテゴリ |
|---|---|---|
|
|
シングル・スペース( |
Oracle組込み |
|
|
シングル・スペース( |
ANSI |
|
|
シングル・スペース( |
ANSI |
|
|
シングル・スペース( |
ANSI |
|
|
シングル・スペース( |
ANSI |
|
|
ゼロ( |
Oracle組込み |
|
|
ゼロ( |
Oracle組込み |
|
|
ゼロ( |
ANSI |
|
|
ゼロ( |
ANSI |
|
|
ゼロ( |
ANSI |
|
|
|
Oracle組込み |
|
|
Oracleの |
Oracle組込み |
|
|
|
Oracle組込み |
|
|
|
Oracle組込み |
脚注6
文字セットを変更した場合、DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャを呼び出して、次のように新しい文字セットで値をRAW表現に設定する必要があります。
DECLARE
new_red_blob BLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(new_red_blob, TRUE);
DBMS_LOB.WRITE(new_red_blob, 10, 1, UTL_RAW.CAST_TO_RAW('[redacted]'));
dbms_redact.update_full_redaction_values(
blob_val => new_red_blob);
DBMS_LOB.FREETEMPORARY(new_red_blob);
END;
/このプロシージャの実行後、データベースを再起動します。
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUESプロシージャの使用の詳細は、「デフォルトの完全データ・リダクション値の変更」も参照してください。
12.6.4 ユーザー定義データ型またはOracle提供データ型のリダクション機能
Oracle Data Redactionでは、いくつかのデータ型はサポートされていません。
表12-4では、ユーザー定義型およびOracle提供型で、完全、部分、正規表現およびランダムのリダクション・スタイルがどのように機能するかを比較します。
表12-4 ユーザー定義データ型またはOracle提供型のリダクション・サポート
| データ型またはタイプ | 完全リダクション | 部分リダクション | 正規表現 | NULLリダクション | ランダム・リダクション |
|---|---|---|---|---|---|
|
ユーザー定義データ型 |
なし |
なし |
なし |
なし |
なし |
|
Oracle提供の型: 任意の型、XML型、Oracle Spatial型、Oracle Media型 |
なし |
なし |
なし |
なし |
なし |
12.7 テストを目的にリダクションしない場合
リダクションを実行しないデータ・リダクション・ポリシーを作成できます。
これは、リダクションされたベース表があるが、特定のアプリケーション・ユーザーのビューには実際のデータを常に表示する必要があるケースで便利です。リダクションされた表の新しいビューを作成して、このビューにデータ・リダクション・ポリシーを定義できます。ポリシーは引き続きベース表に存在しますが、DBMS_REDACT.NONE function_type設定を使用してビューにポリシーを作成した場合、アプリケーションがビューを使用して問い合せてもリダクションは実行されません。
親トピック: Oracle Data Redactionの特徴と機能
12.8 名前付きデータ・リダクション・ポリシー式の集中管理
複数の表およびビューの列に使用できる、名前付きポリシー式のライブラリを作成できます。
名前付きポリシー式を使用すると、データベース内のすべてのポリシー式を集中的に管理できます。
ポリシー式を変更すると、その変更は式を使用する表のすべての列に反映されます。ポリシー式は、データ・リダクション・ポリシーのexpression設定よりも優先されます。ポリシー式を作成するには、DBMS_REDACT.CREATE_POLICY_EXPRESSIONプロシージャを使用する必要があり、ポリシー式を列に適用するにはDBMS_REDACT.APPLY_POLICY_EXPR_TO_COLを使用します。この機能により、異なる実行時条件に基づいて、表またはビューの異なる列をリダクションする柔軟性が提供されます。
たとえば、カスタマ・ケア・アプリケーションに関するユース・ケースを考えてみます。お客様がカスタマ・ケア・センターに電話して、最近の購入について返品を求めます。コール・センターのレベル1のサポート担当者は、返品を開始する前に、まず注文ID、お客様の名前および住所を確認する必要があります。処理中、レベル1のサポート担当者がお客様のクレジット・カード番号を表示する必要はありません。そのため、サポート担当者がコール・センターのアプリケーションでお客様の詳細を問い合せる際、クレジット・カード列はリダクションされます。返品が開始されると、返品部署の営業担当者は、返品を処理するため、クレジット・カード番号を表示する必要がある場合があります。ただし、営業担当者はクレジット・カードの有効期限を表示する必要はありません。そのため、営業担当者が同じアプリケーションでお客様の詳細を問い合せる際、クレジット・カード番号は表示できますが、有効期限はリダクションされます。
この場合、ログイン・ユーザーが誰であるかに基づいて、お客様詳細表の異なる列が異なる方法でリダクションされる必要があります。Oracle Data Redactionでは、名前付きデータ・リダクション・ポリシー式を使用して、このユースケースの実装を簡略化しています。このタイプのポリシー式では、同じ表またはビューの異なる列に異なるポリシー式を定義または関連付けることができます。さらに、データベース内の名前付きポリシー式を集中的に管理できます。名前付きポリシー式への更新は、関連付けられたすべての表またはビューの列にただちに伝播されます。
関連項目
親トピック: Oracle Data Redactionの特徴と機能