3.8 部分リダクション・ポリシーの作成
部分データ・リダクションでは、様々な種類のデータ型のデータの一部をリダクションできます。
3.8.1 部分リダクション・ポリシーの作成について
データの部分リダクションでは、ID番号の最初の5桁など、データの一部のみがリダクションされます。
たとえば、クレジット・カードの番号の大半(最後の4桁以外)をアスタリスク(*)でリダクションできます。文字、数値または日時のデータ型を使用する列に対してポリシーを作成できます。文字データ型のリダクションを行うポリシーには、固定文字リダクション形式を使用できます。Enterprise Manager for Oracle Database 12.1.0.7プラグインがシステムにデプロイされている場合は、カスタム・リダクション形式を作成して保存することもできます。
ノート:
以前のリリースでは、「形式」のかわりに「ショートカット」という用語が使用されていました。
3.8.2 部分リダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY文では、アプリケーションに戻されるデータの特定の部分をリダクションするポリシーを作成できます。
部分リダクション・ポリシーを作成する場合の DBMS_REDACT.ADD_POLICYフィールドは次のとおりです。
DBMS_REDACT.ADD_POLICY ( object_schema IN VARCHAR2 := NULL, object_name IN VARCHAR2, column_name IN VARCHAR2 := NULL, policy_name IN VARCHAR2, function_type IN BINARY_INTEGER := NULL, function_parameters IN VARCHAR2 := NULL, expression IN VARCHAR2, enable IN BOOLEAN := TRUE);
ここでは次のように指定します:
-
object_schema、object_name、column_name、policy_name、expression、enable: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください -
function_type: リダクションのタイプの設定に使用するファンクションを指定します。DBMS_REDACT.PARTIALと入力します。 -
function_parameters: ここで設定するパラメータは、column_nameパラメータに指定された列のデータ型によって異なります。詳細は次の項を参照してください。
3.8.3 固定文字形式を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY function_parametersパラメータは、固定文字データ型のリダクションをサポートするように構成できます。
3.8.3.1 固定文字形式の設定
Oracle Data Redactionには、固定文字を使用するポリシーを構成するための、特別な事前定義形式が用意されています。
表3-9では、DBMS_REDACT.ADD_POLICYのfunction_parametersパラメータの形式について説明します。これは、一般にリダクションされることが多い、ID番号(社会保障番号またはカナダ社会保険番号など)、郵便番号およびクレジット・カード番号(それらの列ではVARCHAR2またはNUMBERデータ型のどちらかが使用される)に対して使用できます。
表3-9 部分固定文字リダクションの形式
| 形式 | 説明 |
|---|---|
|
|
列が |
|
|
列が |
|
|
列が |
|
|
列が |
|
|
列が |
|
|
列が |
|
|
カナダ社会保険番号の先頭6桁を |
|
|
カナダ社会保険番号の先頭6桁を |
|
|
カナダ社会保険番号の先頭6桁を |
|
|
英国国民保険番号の先頭6桁を |
|
|
英国国民保険番号の先頭6桁を |
|
|
クレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁を残してすべて |
|
|
クレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁を残してすべて |
|
|
16桁のクレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁の表示を残してすべてリダクションします。たとえば、 |
|
|
アメリカン・エキスプレス・クレジット・カード番号の末尾5桁以外の桁を |
|
|
アメリカン・エキスプレス・クレジット・カード番号の末尾5桁以外の桁を |
|
|
列が |
|
|
列が |
|
|
すべての日付を |
|
|
北米の電話番号をエリア・コードを残して他をすべて |
|
|
北米の電話番号をエリア・コードを残して他をすべて |
|
|
北米の電話番号をエリア・コードを残して他をすべて |
|
|
|
3.8.3.2 例: 固定文字形式を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY PL/SQLプロシージャを使用して、固定文字形式を使用する部分リダクション・ポリシーを作成できます。
例3-3に、VARCHAR2データ型の列にある社会保障番号をREDACT_US_SSN_F5形式を使用してリダクションする方法を示します。
例3-3 部分的にリダクションされる文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'ssn', policy_name => 'redact_cust_ssns3', function_type => DBMS_REDACT.PARTIAL, function_parameters => DBMS_REDACT.REDACT_US_SSN_F5, expression => '1=1', policy_description => 'Partially redacts 1st 5 digits in Social Security Numbers', column_description => 'ssn contains Social Security Numbers'); END; /
問合せおよびリダクションされた結果:
SELECT ssn FROM mavis.cust_info; SSN ------- XXX-XX-4320 XXX-XX-4323 XXX-XX-4325 XXX-XX-4329
3.8.4 文字データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY function_parametersパラメータは、文字データ型のリダクションをサポートするように構成できます。
3.8.4.1 文字データ型の設定
Oracle Data Redactionには、文字データ型を使用するポリシーを構成するための、特別な設定が用意されています。
DBMS_REDACT.ADD_POLICYのfunction_parametersパラメータを設定して文字データ型の部分リダクションを定義するときは、次の順序で次の設定の値を入力します。各値はカンマで区切ります。
ノート:
部分リダクションには、固定幅の文字セットを使用する必要があることに注意してください。つまり、リダクションされる各文字は、バイト長が等しい別の文字に置換される必要があります。可変長の文字セット(たとえば、UTF-8)を使用する場合、正規表現ベースのリダクションを使用する必要があります。
設定は次のとおりです。
-
入力形式: データが現在どのようにフォーマットされているかを指定します。クレジット・カード番号の全桁など、リダクションされる可能性のある各文字に
Vを入力します。クレジット・カード番号のハイフンまたは空白のような書式化文字を使用して書式化する場合、Fを入力します。各文字に、対応するVまたはF値があるか確認します。(入力形式の値は大/小文字を区別しません。) -
出力形式: 表示されるデータを書式化する方法を定義します。リダクションされる可能性のある各文字に
Vを入力します。入力形式の各文字Fをハイフンなど表示される文字に使用する文字に置換します。(出力形式の値は大/小文字を区別しません。) -
マスク文字: リダクションに使用する文字を指定します。アスタリスク(*)など、リダクションに使用する単一の文字を入力します。
-
開始する数字位置: リダクションで開始する
Vの数字位置を指定します。 -
終了する数字位置: リダクションで終了する
Vの数字位置を指定します。終了する位置の値を決めるときは、Fの位置を含めないでください。
たとえば、次の設定は、クレジット・カード番号5105 1051 0510 5100の最初の12桁のVをリダクションし、Fの位置(空白)をハイフンに置換することでクレジット・カード番号で通常使用されるスタイルに書式化し、その結果****-****-****-4320と表示されます。
function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,*,1,12',
3.8.4.2 例: 文字データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICY PL/SQLプロシージャにより、文字データ型を使用する部分リダクション・ポリシーを作成できます。
例3-4に、VARCHAR2データ型の列にある社会保障番号をリダクションする方法と、社会保障番号に含まれているハイフンを保持する方法を示します。
例3-4 部分的にリダクションされる文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'ssn', policy_name => 'redact_cust_ssns2', function_type => DBMS_REDACT.PARTIAL, function_parameters => 'VVVFVVFVVVV,VVV-VV-VVVV,*,1,5', expression => '1=1', policy_description => 'Partially redacts Social Security Numbers', column_description => 'ssn contains character Social Security Numbers'); END; /
問合せおよびリダクションされた結果:
SELECT ssn FROM mavis.cust_info; SSN ----------- ***-**-4320 ***-**-4323 ***-**-4325 ***-**-4329
3.8.5 数値データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY function_parametersパラメータは、数値データ型のリダクションをサポートするように構成できます。
3.8.5.1 数値データ型の設定
数値データ型の値を設定する場合、リダクション文字、開始する数字位置および終了する数字位置を指定する必要があります。
数値データ型の部分リダクションの場合、DBMS_REDACT.ADD_POLICY function_parametersパラメータについて、次の設定項目の値を記載されている順番に入力できます。
-
リダクション文字: 表示する文字を指定します。
0から9までの数値を入力します。 -
開始する数字位置: 最初の数字に
1を指定するなど、リダクションで開始するの数字位置を指定します。 -
終了する数字位置: リダクションで終了する数字位置を指定します。
たとえば、次の設定では、社会保障番号987654321の最初の5桁がリダクションされて、その結果、999994321になります。
function_parameters => '9,1,5',
3.8.5.2 例: 数値データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICYプロシージャにより、数値データ型を使用する部分リダクション・ポリシーを作成できます。
例3-5では、ログインしているアプリケーション・ユーザーに対してmavis.cust_info表にある一連の社会保障番号を部分的にリダクションする方法を示します。(そのため、expressionパラメータはTRUEと評価されます。)
このタイプのリダクションが役立つのは、文字列ではなく書式設定された数値をアプリケーションが想定している場合です。このシナリオでは、社会保障番号はデータ型NUMBERの列にあります。つまり、ssn列に含まれるのは数字のみで、ハイフンまたは空白など他の文字は含まれせん。
例3-5 部分的にリダクションされるデータ・リダクションの数値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'ssn', policy_name => 'redact_cust_ssns1', function_type => DBMS_REDACT.PARTIAL, function_parameters => '7,1,5', expression => '1=1', policy_description => 'Partially redacts Social Security Numbers', column_description => 'ssn contains numeric Social Security Numbers'); END; /
問合せおよびリダクションされた結果:
SELECT ssn FROM mavis.cust_info; SSN --------- 777774320 777774323 777774325 777774329
3.8.6 日時データ型を使用した部分リダクション・ポリシーの作成
DBMS_REDACT.ADD_POLICY function_parametersパラメータは、日時データ型のリダクションをサポートするように構成できます。
3.8.6.1 日時データ型の設定
Oracle Data Redactionには、日時データ型を構成するための特別な設定が用意されています。
日時データ型の部分リダクションの場合、次のDBMS_REDACT.ADD_POLICY function_parametersパラメータ設定項目の値を入力します。
値は次に示す順序で入力します。
-
m: 月をリダクションします。月の名前でリダクションするには、1から12を小文字のmに追加します。たとえば、m5は、MAYと表示されます。リダクションを省略するには、大文字のMを入力します。 -
d: 月の日をリダクションします。月の日でリダクションするには、1から31を小文字のdに追加します。たとえば、d7は、07と表示されます。月の日よりも大きい数値(たとえば、2月に31を入力)を入力すると、その月の最終日(たとえば、28)が表示されます。リダクションを省略するには、大文字のDを入力します。 -
y: 年をリダクションします。年でリダクションするには、1から9999を小文字のyに追加します。たとえば、y1984は、84と表示されます。リダクションを省略するには、大文字のYを入力します。 -
h: 時間をリダクションします。時間でリダクションするには、0から23を小文字のhに追加します。たとえば、h20は、20と表示されます。リダクションを省略するには、大文字のHを入力します。 -
m: 分をリダクションします。分でリダクションするには、0から59を小文字のmに追加します。たとえば、m30は、30と表示されます。リダクションを省略するには、大文字のMを入力します。 -
s: 秒をリダクションします。秒でリダクションするには、0から59を小文字のsに追加します。たとえば、s45は、45と表示されます。リダクションを省略するには、大文字のSを入力します。
3.8.6.2 例: 日時データ型を使用した部分リダクション・ポリシー
DBMS_REDACT.ADD_POLICYプロシージャにより、日時データ型を使用する部分リダクション・ポリシーを作成できます。
例3-6では、日付を部分的にリダクションする方法を示します。この例では顧客の誕生年をリダクションし、それを13に置き換え、残りの値はそのまま保持します。
例3-6 日時値を使用した部分リダクションによるデータ・リダクション
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'birth_date', policy_name => 'redact_cust_bdate', function_type => DBMS_REDACT.PARTIAL, function_parameters => 'MDy2013HMS', expression => '1=1', policy_description => 'Replaces birth year with 2013', column_description => 'birth_date contains customer's birthdate'); END; /
問合せおよびリダクションされた結果:
SELECT birth_date FROM mavis.cust_info; BIRTH_DATE 07-DEC-13 09.45.40.000000 AM 12-OCT-13 04.23.29.000000 AM