マスキング定義を作成する場合(「アプリケーション・データ・モデルおよびワークロードによるマスキング」)、フォーマットをインポートするか、「列マスクの定義」ページで使用できるいずれかの種類を選択します。フォーマット・エントリ・オプションは次のとおりです。
配列リスト
リストの各値のデータ型が、マスクされた列のデータ型と互換性を持つ必要があります。必要に応じて一意性が保証されることが必要です。たとえば、一意キー列にすでに10の固有値がある場合、配列リストにも少なくとも10の固有値が必要です。
削除
指定された行を条件句に従って削除します。条件の削除フォーマットが列に含まれていると、外部キー制約または依存列は表を参照できなくなります。
暗号化
正規表現を使用して列データを暗号化します。すべての行の列値が正規表現に一致する必要があります。このフォーマットは、データベース全体でデータを一貫してマスクするために使用されます。つまり、特定の値に対して、マスクされた同じ値が常に生成されます。
たとえば、正規表現[(][1-9][0-9]{2}[)][_][0-9]{3}[-][0-9]{4}によって、米国の電話番号((123) 456-7890など)が生成されます。
このフォーマットでは、正規表現言語のサブセットがサポートされます。固定幅の文字列の暗号化がサポートされます。ただし、*や+といった正規表現の構文はサポートされません。
指定されたフォーマットに値が一致しない場合、暗号化された値で1対1のマッピングが生成されない場合があります。すべての非確認の値が1つの暗号化された値にマップされるため、多対1マッピングが生成されます。
固定数値
このエントリに適用可能な列のタイプはNUMBER
列またはSTRING
列です。たとえば、社会保障番号を持つ列をマスクした場合、エントリの1つが固定数値900になる可能性があります。このフォーマットは結合できます。
固定文字列
このエントリに適用可能な列のタイプはSTRING
列です。たとえば、ライセンス・プレート番号を持つ列をマスクした場合、エントリの1つが固定文字列CAになる可能性があります。このフォーマットは結合できます。
NULL値
NULL
値を使用して列をマスキングします。列にはNULL値が設定可能でなければなりません。
後処理関数
これは、マスキング・エンジンが生成するマスク値に適用可能な特殊関数です。入力としてマスク値を使用し、マスキングに使用する実際のマスク値を返します。
後処理関数は、マスク値の生成後に呼び出されます。これにより、カンマやドル記号を値に追加できます。たとえば、マスク値が12000のような数値の場合、後処理関数を使用すると、この値を$12,000に変更できます。また、生成されたマスク値にチェックサムや特殊なエンコーディングを追加できます。
文の例:
Function post_proc_udf_func (rowid varchar2, column_name varchar2, mask_value varchar2) returns varchar2;
rowid
は、第3引数のmask_value
の値を含む行の最小値(rowid)です。
column_name
はマスキングされる列の名前です。
mask_value
はマスキングされる値です。
元のデータの保持
指定された条件句に一致する行の元の値を保持します。これは、条件を満たす行の中に、マスキングの必要がない行が含まれている場合に使用します。
ランダム日付
DATE列の一意性は、マスキング後は維持されません。このフォーマットは結合できます。
ランダム小数
混合ランダム文字列の一部として使用される場合、一意の値の生成に対する使用は制限されます。このマスキング・フォーマットは、指定された範囲内で一意の値を生成します。たとえば、開始値が5.5で終了値が9.99の場合、5.5以上9.99以下の範囲の小数が生成されます。このマスキング・フォーマットは結合できます。
ランダム桁数
このフォーマットは、指定範囲内で一意の値を生成します。たとえば、長さが[5,5]で、[0, 99999]間の整数のランダム桁数は、長さおよび一意性の要件を満たすよう左側が0で埋められてランダムに生成されます。これは、0で埋められることがないランダム数値の補完型です。ランダム桁数を使用する場合、文字列内で適切な長さになるように0が埋められます。番号の列に使用する場合、0は埋められません。このフォーマットは結合できます。
データのマスキングにより生成された値は一意です。ただし、十分な桁数を指定していない場合、指定した範囲内で一意の値がなくなる場合があります。
ランダム数値
混合ランダム文字列の一部として使用される場合、一意の値の生成に対する使用は制限されます。このフォーマットは、指定範囲内で一意の値を生成します。たとえば、開始値が100で終了値が200の場合、100以上200以下の範囲の整数が生成されます。Oracle Enterprise Managerリリース10.2.0.4.0はFLOAT数値をサポートしません。このフォーマットは結合できます。
ランダム文字列
このフォーマットは、指定範囲内で一意の値を生成します。たとえば、開始の長さが2で終了の長さが6の場合、2文字から6文字の長さのランダム文字列が生成されます。このフォーマットは結合できます。
正規表現
このフォーマットでは、正規表現を使用して、LOB (BLOB、CLOB、NCLOB)の機密データを検索し、データを固定文字列、固定数値、nullまたはSQL式でデータを置換します。LOB内の複数の文字列を検索するルールを使用します。
次に例を示します。
正規表現[0-9]{3}[.][0-9]{3}[.][0-9]{4}
を使用して、書式nnn.nnn.nnnnの文字列を照合し、***.***.****などのマスクされた値で置換します。
正規表現<SALARY>[0-9]{2,6}</SALARY>
を使用し、<SALARY>0</SALARY>
で置換して給与情報を消去します。
正規表現[A-Z]+@[A-Z]+\.[A-Z]{2,4}
を使用し、john.doe@acme.comで置換して電子メール・アドレスをマスクします。
データ型VARCHAR2のこのフォーマットを使用して、文字列の一部をマスクすることもできます。
シャッフル
このフォーマットでは、元の列データがランダムにシャッフルされます。列が条件付きでマスキングされており、その値が一意でない場合を除いて、データ配分は維持されます。
詳細は、「シャッフル・フォーマットの使用」を参照してください。
置換
このフォーマットは、元の値に対してハッシュ・ベースの置換を行い、任意の入力値に対して常に同じマスク値を生成します。置換マスキング表および列を指定します。このフォーマットには次のプロパティがあります。
マスキングされたデータは元に戻せません。つまり、このフォーマットでは、元の値は置換され、マスク値から元の値を取り出すことはできないため、外部のセキュリティ違反に対して脆弱ではありません。
別々のデータベースにおいて1つのハッシュ置換を使用して複数回マスキングを行うことで、同じマスク値を生成します。この特性は、複数のデータベース、または2回の実行で同じ置換値が使用されていれば複数回の実行にまたがって有効です。つまり、置換表の実際の行と値は変化しません。たとえば、2つの値JoeとTomがHenryとPeterにマスキングされたと想定します。同じ置換表を使用して、別のデータベースで同じマスキングを繰り返したとき、BobとTomが存在する場合に、LouiseとPeterに置換されるというような状況が起こります。2回の実行では異なるデータが使用されていますが、Tomは常にPeterに置換されていることに注意してください。
このフォーマットでは、一意性は得られません。
SQL式
このマスキング・フォーマットでは、SQL式を入力して列をマスキングすることができます。データ・マスキングはこの式を使用して、マスキングされた値を生成し、元のデータを置き換えます。「ランダム数値」と「ランダム文字列」のように、このマスキング・フォーマットと他のマスキング・フォーマットを使用して列を組み合せることはできません。
SQL式は1つ以上の値、演算子、および値に評価されるSQL関数で構成できます。置換列(マスキングされる列と同じ表の列)を含めることもできます。置換列は、パーセント記号(%)で囲んで指定してください。dbms_lob
を含むSQL式および他のユーザー定義関数をLOB (BLOB、CLOB、NCLOB)マスキングに使用します。
次に例を示します。
dbms_random.string('u', 8) || '@company.com'
ランダムな電子メール・アドレスを生成します。
%first_name% || '.' || %last_name% || '@company.com'
first_name
およびlast_name
列の値を使用して電子メール・アドレスを生成します。この例では、first_name
とlast_name
が置換列です。
CLOBのマスキング
dbms_lob.empty_clob()
CLOBを空にします。
custom_mask_clob(%CLOB_COL%)
CLOB列CLOB_COL
に、カスタム・マスク関数を適用します。
条件付マスク
(case when %PARTY_TYPE%='PERSON' then %PERSON_FIRST_NAME%|| ' ' ||%PERSON_LAST_NAME% else (select dbms_random.string('U', 10) from dual) end)
%%内の列は、同じ表に存在します。式はPERSON_FULL_NAME
を氏名でマスクし、それ以外の場合、マスクはランダム文字列になります。
置換マスク
select MASK_ZIPCODE from data_mask.DATA_MASK_ADDR where ADDR_SEQ = ora_hash( %ZIPCODE% , 1000, 1234)
置換表data_mask.DATA_MASK_ADDR
で1000行を選択します。%ZIPCODE%
を置換表のMASK_ZIPCODE
列でマスクします。選択した行はora_hash
に依存し、この場合は確定的です。dbms_random
プロシージャを使用する場合、選択はランダムです。
置換
このフォーマットは、元の値に対してハッシュ・ベースの置換を行い、任意の入力値に対して常に同じマスク値を生成します。置換マスキング表および列を指定します。このフォーマットには次のプロパティがあります。
マスキングされたデータは元に戻せません。つまり、このフォーマットでは、元の値は置き換えられ、マスク値から元の値を抽出できないため、外部のセキュリティ違反に対し脆弱ではありません。
別々のデータベースにおいて1つのハッシュ置換を使用して複数回マスキングを行うことで、同じマスク値を生成します。この特性は、複数のデータベース、または2回の実行で同じ置換値が使用されていれば複数回の実行にまたがって有効です。つまり、置換表の実際の行と値は変化しません。たとえば、2つの値JoeとTomがHenryとPeterにマスキングされたと想定します。同じ置換表を使用して、別のデータベースで同じマスキングを繰り返したとき、BobとTomが存在する場合に、LouiseとPeterに置換されるというような状況が起こります。2回の実行では異なるデータが使用されていますが、Tomは常にPeterに置換されていることに注意してください。
このフォーマットでは、一意性は保証されません。
部分文字列
部分文字列はデータベースのsubstr
関数と同様の動作をします。開始位置には正の整数または負の整数を設定できます。たとえば元の文字列がabcd
の場合、開始位置が2で長さが3の部分文字列は、マスクされた文字列bcdを生成します。開始位置が-2で長さが3の部分文字列は、マスクされた文字列cdを生成します。このフォーマットは結合できます。
表の列
表の列により、置換値またはその一部として選択された列から値を選択できます。データ・タイプおよび一意性には互換性がある必要があります。それ以外の場合、ジョブの実行に失敗します。このフォーマットは結合できます。
切捨て
表のすべての行で切捨てが実行されます。列の1つが切捨てとマークされていると、表全体で切捨てが実行されるため、他の列にマスキング・フォーマットは指定できません。表で切捨てが実行されると、外部キー制約または依存列による参照ができなくなります。
ユーザー定義関数
出力値のデータ型と一意性は、元の出力値と互換性がある必要があります。それ以外の場合、ジョブの実行に失敗します。
文の例:
Function udf_func (rowid varchar2, column_name varchar2, original_value varchar2) returns varchar2;
rowid
は、第3引数のoriginal_value
の値を含む行の最小値(rowid)になります。
column_name
はマスキングされる列の名前です。
original_value
はマスキングされる値です。