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);

ここでは次のように指定します:

3.8.3 固定文字形式を使用した部分リダクション・ポリシーの作成

DBMS_REDACT.ADD_POLICY function_parametersパラメータは、固定文字データ型のリダクションをサポートするように構成できます。

3.8.3.1 固定文字形式の設定

Oracle Data Redactionには、固定文字を使用するポリシーを構成するための、特別な事前定義形式が用意されています。

表3-9では、DBMS_REDACT.ADD_POLICYfunction_parametersパラメータの形式について説明します。これは、一般にリダクションされることが多い、ID番号(社会保障番号またはカナダ社会保険番号など)、郵便番号およびクレジット・カード番号(それらの列ではVARCHAR2またはNUMBERデータ型のどちらかが使用される)に対して使用できます。

表3-9 部分固定文字リダクションの形式

形式 説明

DBMS_REDACT.REDACT_US_SSN_F5

列がVARCHAR2データ型の場合に社会保障番号の先頭の5つの数字をリダクションします。たとえば、番号987-65-4320XXX-XX-4320になります。

DBMS_REDACT.REDACT_US_SSN_L4

列がVARCHAR2データ型の場合に社会保障番号の最後の4つの数字をリダクションします。たとえば、番号987-65-4320987-65-XXXXになります。

DBMS_REDACT.REDACT_US_SSN_ENTIRE

列がVARCHAR2データ型の場合に社会保障番号全体をリダクションします。たとえば、番号987-65-4320XXX-XX-XXXXになります。

DBMS_REDACT.REDACT_NUM_US_SSN_F5

列がNUMBERデータ型の場合に社会保障番号の先頭の5つの数字をリダクションします。たとえば、番号987654320XXXXX4320になります。

DBMS_REDACT.REDACT_NUM_US_SSN_L4

列がNUMBERデータ型の場合に社会保障番号の最後の4つの数字をリダクションします。たとえば、番号98765432098765XXXXになります。

DBMS_REDACT.REDACT_NUM_US_SSN_ENTIRE

列がNUMBERデータ型の場合に社会保障番号全体をリダクションします。たとえば、番号987654320XXXXXXXXXになります。

DBMS_REDACT.REDACT_SIN_NUMBER

カナダ社会保険番号の先頭6桁を9 (数字)で置き換えてリダクションします。たとえば、123456789999999789にリダクションされます。

DBMS_REDACT.REDACT_SIN_UNFORMATTED

カナダ社会保険番号の先頭6桁をX (文字列)で置き換えてリダクションします。たとえば、123456789XXXXXX789にリダクションされます。

DBMS_REDACT.REDACT_SIN_FORMATTED

カナダ社会保険番号の先頭6桁をX (文字列)で置き換えてリダクションします。たとえば、123-456-789XXX-XXX-789にリダクションされます。

DBMS_REDACT.REDACT_UK_NIN_FORMATTED

英国国民保険番号の先頭6桁をX (文字列)で置き換えてリダクションしますが、英字はそのまま残します。たとえば、ET 27 02 23 DET XX XX XX Dにリダクションされます。

DBMS_REDACT.REDACT_UK_NIN_UNFORMATTED

英国国民保険番号の先頭6桁をX (文字列)で置き換えてリダクションし、英字はそのまま残します。たとえば、ET270223DETXXXXXXDにリダクションされます。

DBMS_REDACT.REDACT_CCN_FORMATTED

クレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁を残してすべて*に置き換えてリダクションします。たとえば、クレジット・カード番号5105–1051–0510–5100は、****—****—****—5100にリダクションされます。

DBMS_REDACT.REDACT_CCN_NUMBER

クレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁を残してすべて9に置き換えてリダクションします。たとえば、クレジット・カード番号5105105105105100は、9999999999995100にリダクションされます。最後の4桁はリダクションされないことに注意してください。

DBMS_REDACT.REDACT_CCN16_F12

16桁のクレジット・カード番号(アメリカン・エキスプレス以外)を末尾4桁の表示を残してすべてリダクションします。たとえば、5105 1051 0510 5100****-****-****-5100になります。

DBMS_REDACT.REDACT_AMEX_CCN_FORMATTED

アメリカン・エキスプレス・クレジット・カード番号の末尾5桁以外の桁を*に置き換えてリダクションします。たとえば、クレジット・カード番号3782 822463 10005は、**** ****** 10005にリダクションされます。

DBMS_REDACT.REDACT_AMEX_CCN_NUMBER

アメリカン・エキスプレス・クレジット・カード番号の末尾5桁以外の桁を0に置き換えてリダクションします。たとえば、クレジット・カード番号3782 822463 10005は、0000 000000 10005にリダクションされます。

DBMS_REDACT.REDACT_ZIP_CODE

列がVARCHAR2データ型の場合、5桁の郵便番号をリダクションします。たとえば、95476XXXXXになります。

DBMS_REDACT.REDACT_NUM_ZIP_CODE

列がNUMBERデータ型の場合、5桁の郵便番号をリダクションします。たとえば、9547699999になります。

DBMS_REDACT.REDACT_DATE_EPOCH

すべての日付を01-JAN-70にリダクションします。

DBMS_REDACT.REDACT_NA_PHONE_FORMATTED

北米の電話番号をエリア・コードを残して他をすべてXに置き換えてリダクションします。たとえば、650-555–0100650-XXX-XXXXにリダクションされます。

DBMS_REDACT.REDACT_NA_PHONE_NUMBER

北米の電話番号をエリア・コードを残して他をすべて0に置き換えてリダクションします。たとえば、65055501006500000000にリダクションされます。

DBMS_REDACT.REDACT_NA_PHONE_UNFORMATTED

北米の電話番号をエリア・コードを残して他をすべてXに置き換えてリダクションします。たとえば、6505550100650XXXXXXXにリダクションされます。

DBMS_REDACT.REDACT_DATE_MILLENNIUM

DD-MON-YY形式の日付を01-JAN-00 (2000年1月1日)にリダクションします。

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_POLICYfunction_parametersパラメータを設定して文字データ型の部分リダクションを定義するときは、次の順序で次の設定の値を入力します。各値はカンマで区切ります。

ノート:

部分リダクションには、固定幅の文字セットを使用する必要があることに注意してください。つまり、リダクションされる各文字は、バイト長が等しい別の文字に置換される必要があります。可変長の文字セット(たとえば、UTF-8)を使用する場合、正規表現ベースのリダクションを使用する必要があります。

設定は次のとおりです。

  1. 入力形式: データが現在どのようにフォーマットされているかを指定します。クレジット・カード番号の全桁など、リダクションされる可能性のある各文字にVを入力します。クレジット・カード番号のハイフンまたは空白のような書式化文字を使用して書式化する場合、Fを入力します。各文字に、対応するVまたはF値があるか確認します。(入力形式の値は大/小文字を区別しません。)

  2. 出力形式: 表示されるデータを書式化する方法を定義します。リダクションされる可能性のある各文字にVを入力します。入力形式の各文字Fをハイフンなど表示される文字に使用する文字に置換します。(出力形式の値は大/小文字を区別しません。)

  3. マスク文字: リダクションに使用する文字を指定します。アスタリスク(*)など、リダクションに使用する単一の文字を入力します。

  4. 開始する数字位置: リダクションで開始するVの数字位置を指定します。

  5. 終了する数字位置: リダクションで終了する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パラメータについて、次の設定項目の値を記載されている順番に入力できます。

  1. リダクション文字: 表示する文字を指定します。0から9までの数値を入力します。

  2. 開始する数字位置: 最初の数字に1を指定するなど、リダクションで開始するの数字位置を指定します。

  3. 終了する数字位置: リダクションで終了する数字位置を指定します。

たとえば、次の設定では、社会保障番号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パラメータ設定項目の値を入力します。

値は次に示す順序で入力します。

  1. m: 月をリダクションします。月の名前でリダクションするには、1から12を小文字のmに追加します。たとえば、m5は、MAYと表示されます。リダクションを省略するには、大文字のMを入力します。

  2. d: 月の日をリダクションします。月の日でリダクションするには、1から31を小文字のdに追加します。たとえば、d7は、07と表示されます。月の日よりも大きい数値(たとえば、2月に31を入力)を入力すると、その月の最終日(たとえば、28)が表示されます。リダクションを省略するには、大文字のDを入力します。

  3. y: 年をリダクションします。年でリダクションするには、1から9999を小文字のyに追加します。たとえば、y1984は、84と表示されます。リダクションを省略するには、大文字のYを入力します。

  4. h: 時間をリダクションします。時間でリダクションするには、0から23を小文字のhに追加します。たとえば、h20は、20と表示されます。リダクションを省略するには、大文字のHを入力します。

  5. m: 分をリダクションします。分でリダクションするには、0から59を小文字のmに追加します。たとえば、m30は、30と表示されます。リダクションを省略するには、大文字のMを入力します。

  6. 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