秘匿化ポリシーとは、アプリケーションからのアクセス時に特定の条件下でデータを改訂する方法を規定したものです。一つのテーブルに対し一つの秘匿化ポリシーが作成できます。秘匿化ポリシーには、秘匿化対象、秘匿化種別、秘匿化条件、秘匿化形式などが設定できます。
注意
秘匿化ポリシーを定義することにより、対応するテーブルの検索性能が劣化する場合があります。
秘匿化対象とは、秘匿化ポリシーを適用する列です。秘匿化対象または秘匿化対象を含む関数を参照した場合、該当する実行結果は改訂されて取得されます。
注意
秘匿化対象をSELECT対象列以外に指定した場合は、改訂前のデータで処理を実施します。
秘匿化対象をデータ型が変換される関数に指定した場合はエラーになります。
秘匿化種別とは、列データを改訂する方法です。秘匿化種別はfunction_typeパラメーターに指定します。秘匿化種別には、以下の3つが指定でき、秘匿化対象のデータの特性によって選択することが可能です。
全秘匿化
列データの内容を全て改訂します。問合せを行ったアプリケーションに返される改訂された値は列のデータ型によって異なります。
例えば、数値型の列は0で改訂され、文字型の列は空白で改訂されます。
部分秘匿化
列データの一部を改訂します。
例えば、従業員番号の最後の4桁以外を“*”で改訂できます。
正規表現秘匿化
正規表現を用いた検索を利用して列データを改訂します。
例えば、文字の長さが変化する可能性のある電子メールアドレスなどの文字列に対し、正規表現を用いることで“@”以前を“*”で改訂できます。正規表現秘匿化は文字型データのみで使用可能です。
注意
複数の有効な秘匿化対象を1つの関数に指定した場合は、最も左にある秘匿化対象の秘匿化種別が適用されます。
例えば、数値型の秘匿化対象c1、c2について“SELECT GREATEST(c1, c2) FROM t1”を実行した場合、c1の秘匿化種別が適用されます。
マルチバイト文字を含むデータを秘匿化する場合、秘匿化種別に部分秘匿化を指定しないでください。期待した結果が得られない場合があります。
秘匿化条件とは、秘匿化が実行されるための条件です。秘匿化条件はexpressionパラメーターに指定します。秘匿化条件を定義することで、異なるユーザーに改訂されたデータまたは実際のデータのいずれかを表示させることが可能です。秘匿化条件には、boolean型の結果を返す式を指定する必要があり、TRUEと評価された場合にのみ秘匿化が実行されます。指定できる式の詳細は、“PostgreSQL文書”の“評価式”を参照してください。ただし、列を含む式は指定できません。
例えば、“symfoasuser”ユーザーのみにデータを秘匿化する場合、秘匿化条件に'current_user = ''symfoasuser'''を指定してください。
参考
秘匿化が常に実行されるためには、秘匿化条件が常にTRUEと評価されるよう'1=1'のように指定します。
秘匿化形式とは、秘匿化条件が成立した時の改訂する方法と表示される文字の組み合わせです。秘匿化形式は秘匿化種別ごとに異なっています。秘匿化形式については以下に示します。
全秘匿化
全秘匿化では、全ての文字をデータベースで決められた値に改訂します。改訂後の文字はpgxa_confidential_valuesシステム表を参照することで確認できます。また、改訂後の文字はpgxa_update_confidential_valuesシステム関数で変更可能です。
参照
秘匿化が可能なデータ型は、“H.2 秘匿化が可能なデータ型”を参照してください。
部分秘匿化
部分秘匿化では、データをfunction_parametersの内容に従って改訂します。function_parametersはデータ型によって指定方法が異なります。
カテゴリ | function_parametersの指定方法 |
---|---|
数値型 | '改訂文字, 開始位置, 終了位置'
例 1桁目から5桁目までを9に秘匿化する場合は以下を指定します。 function_parameters := '9, 1, 5' この場合、元データが“123456789”の場合は、“999996789”に改訂されます。 |
文字型 | '入力形式, 出力形式, 改訂文字, 開始位置, 終了位置'
例 電話番号の始めの3桁を除いて*に秘匿化する場合は以下を指定します。 function_parameters := 'VVVFVVVVFVVVV, VVV-VVVV-VVVV, *, 4, 11' この場合、元データが“012-3456-7890”の場合は、“012-****-****”に改訂されます。 |
日付/タイムスタンプ型 | 'MDYHMS'
例 時間、分、秒を0時0分0秒に秘匿化する場合は以下を指定します。 function_parameters := 'MDYh0m0s0' この場合、元データが“2010-10-10 10:10:10”の場合は、“2010-10-10 00:00:00”に改訂されます。 |
参照
function_parametersについては、“J.4.13 pgxa_create_confidential_policy”を参照してください。
秘匿化が可能なデータ型は、“H.2 秘匿化が可能なデータ型”を参照してください。
正規表現秘匿化
正規表現秘匿化では、データをregexp_pattern、regexp_replacement、regexp_flagsの内容に従って改訂します。regexp_patternには、正規表現による改訂方法を指定します。regexp_replacementには、正規表現の改定後の文字を指定します。regexp_flagsには、正規表現のフラグを指定します。
例
bから始まる3文字を全てXに改訂する場合は以下を指定します。
regexp_pattern := 'b..'
regexp_replacement:= 'X'
regexp_flags := 'g'
この場合、元データが“foobarbaz”の場合は、“fooXX”に改訂されます。
参照
regexp_pattern、regexp_replacement、regexp_flagsに指定できる値は、“PostgreSQL文書”の“POSIX正規表現”のpattern、replacement、flagsを参照してください。
秘匿化が可能なデータ型は、“H.2 秘匿化が可能なデータ型”を参照してください。
注意
列のデータ型がcharacter(n)、char(n)の場合、改訂後の文字列長が列の長さ(n)を超えると、列の長さまで切り詰められて表示されます。
列のデータ型がcharacter varying(n)、varchar(n)の場合、改訂後の文字列長が改訂前の文字列長の長さを超えると、改訂前の文字列長まで切り詰められて表示されます。