Oracle Data Redactionには、データをリダクションする様々な方法があります。
内容は次のとおりです。
完全データ・リダクションでは、表またはビューの指定した列の内容全体がリダクションされます。
デフォルトでは、出力は次のように表示されます。
文字データ型: 出力テキストは、空白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
プロシージャを使用すると、完全リダクションの出力を別の値に変更できます。
部分データ・リダクションでは、表示される出力の一部をリダクションします。
実際のデータ内に、リダクションを開始する位置、その位置からリダクションする文字数および使用するリダクション文字を設定できます。このタイプのリダクションは、なんらかの方法でデータがリダクションされたことを、データを表示しているユーザーに明らかにしたい場合に便利です。通常、このタイプのリダクションは、クレジット・カードや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',
正規表現を使用して、パターン検索に基づいて列データの値内にある特定のデータをリダクションできます。
たとえば、ドメインのみが表示されるように電子メール・アドレスのユーザー名をリダクションできます(電子メール・アドレスhpreston@example.com
のhpreston
を[redacted]
に置き換えて、[redacted]@example.com
と表示するなど)。リダクションを実行するには、DBMS_REDACT.ADD_POLICY
プロシージャのfunction_type
パラメータをDBMS_REDACT.REGEXP
に設定し、さらに次のパラメータを使用して、正規表現を作成する必要があります。
文字列検索パターン(つまり、検索対象の値)で、例は次のとおりです。
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
デフォルトのパラメータに加え、電話番号、電子メール・アドレスおよびクレジット・カード番号に、よく使用される正規表現を使用できるように事前定義された形式のセットを使用できます。
ランダム・データ・リダクションでは、値全体がランダムな値に置換されてリダクションされます。
問合せの結果セットに表示されるリダクションされた値は、アプリケーション・ユーザーが問合せを実行するたびに、ランダムに変更されます。
このタイプのリダクションは、データがリダクションされていることを明らかにしたくない場合に便利です。ランダム・データか実際のデータか区別するのが難しい数値および日時データ型の場合に、特に最適です。
ランダム値として表示される出力は、次のように、リダクションされた列のデータ型によって異なります。
文字データ型: ランダムな出力は、文字が混合されています(たとえば、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組込み、ANSI、ユーザー定義、およびオラクル社提供のデータ型に対する影響は異なります。
内容は次のとおりです。
Oracle Data Redactionでは、使用されるデータ・リダクション・ポリシーのタイプに応じてOracle組込みデータ型を処理します。
表9-1では、Oracle組込みデータ型に対する、完全、部分およびランダム・リダクションの機能の違いを比較します。
表9-1 Oracle組込みデータ型のリダクション機能
データ型 | 完全リダクション | 部分リダクション | ランダム・リダクション |
---|---|---|---|
文字: |
デフォルトのリダクションされた値は、空白1つです。 |
サポートされているデータ型 |
サポートされているデータ型 |
数値: |
デフォルトのリダクションされた値はゼロ( |
サポートされているデータ型 |
サポートされているデータ型 |
Raw: |
サポート外のデータ型 |
サポート外のデータ型 |
サポート外のデータ型 |
日時: |
デフォルトのリダクションされた値は、 |
サポートされているデータ型 |
サポートされているデータ型 |
インターバル: |
サポート外のデータ型 |
サポート外のデータ型 |
サポート外のデータ型 |
ラージ・オブジェクト: |
サポート外のデータ型 |
サポート外のデータ型 |
サポート外のデータ型 |
ラージ・オブジェクト: |
Oracleの |
サポート外のデータ型 |
サポート外のデータ型 |
ラージ・オブジェクト: |
デフォルトのリダクションされた値は、 |
サポート外のデータ型 |
サポート外のデータ型 |
Rowid: |
サポート外のデータ型 |
サポート外のデータ型 |
サポート外のデータ型 |
脚注1
文字セットを変更した場合、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プロシージャの使用の詳細は、「デフォルトの完全データ・リダクション値の変更」も参照してください。
Oracle Data Redactionでは、データ・リダクション・ポリシーのリダクション・タイプに応じて固有の方法でANSIデータ型を変換します。
表9-2では、ANSIデータ型に対する、完全、部分およびランダム・リダクションの機能の違いを比較します。
表9-2 ANSIデータ型のリダクション機能
データ型 | 変換方法 | 完全リダクション | 部分リダクション | ランダム・リダクション |
---|---|---|---|---|
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
|
はい |
はい |
はい |
|
変換なし |
なし |
なし |
なし |
Oracle Data Redactionでは、いくつかのデータ型はサポートされていません。
表9-3では、ユーザー定義およびオラクル社提供データ型に対する、完全、部分およびランダム・リダクションの機能の違いを比較します。
表9-3 ユーザー定義データ型またはOracle指定データ型のリダクション機能
データ型またはタイプ | 完全リダクション | 部分リダクション | ランダム・リダクション |
---|---|---|---|
ユーザー定義データ型 |
サポート外のデータ型 |
サポート外のデータ型 |
サポート外のデータ型 |
Oracle提供の型: 任意の型、XML型、Oracle Spatial型、Oracle Media型 |
サポート外のデータ型 |
サポート外のデータ型 |
サポート外のデータ型 |
リダクションを実行しないデータ・リダクション・ポリシーを作成できます。
これは、リダクションされたベース表があるが、特定のアプリケーション・ユーザーのビューには実際のデータを常に表示する必要があるケースで便利です。リダクションされた表の新しいビューを作成して、このビューにデータ・リダクション・ポリシーを定義できます。ポリシーは引き続きベース表に存在しますが、DBMS_REDACT.NONE
function_type
設定を使用してビューにポリシーを作成した場合、アプリケーションがビューを使用して問い合せてもリダクションは実行されません。