プライマリ・コンテンツに移動
Oracle® Database Advanced Security管理者ガイド
11gリリース2 (11.2)
B56286-10
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

4 Oracle Data Redactionの特徴と機能

Oracle Data Redactionには、データをリダクションする様々な方法があります。

この章の内容は次のとおりです。

4.1 完全データ・リダクションを使用した全データのリダクション

すべてのデータのリダクションを指定する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プロシージャを使用すると、完全リダクションの出力を別の値に変更できます。

4.2 部分データ・リダクションを使用したデータのセクションのリダクション

部分データ・リダクションでは、表示される出力の一部をリダクションします。実際のデータ内に、リダクションを開始する位置、その位置からリダクションする文字数および使用するリダクション文字を設定できます。このタイプのリダクションは、なんらかの方法でデータがリダクションされたことを、データを表示しているユーザーに明らかにしたい場合に便利です。通常、このタイプのリダクションは、クレジット・カードや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',
    

4.3 正規表現を使用したデータのパターンのリダクション

正規表現を使用して、パターン検索に基づいて列データの値内にある特定のデータをリダクションできます。たとえば、ドメインのみが表示されるように電子メール・アドレスのユーザー名をリダクションできます(電子メール・アドレスhpreston@example.comhpreston[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
    

デフォルトのパラメータに加え、電話番号、電子メール・アドレスおよびクレジット・カード番号に、よく使用される正規表現を使用できるように事前定義されたショートカットのセットを使用できます。

4.4 ランダム・データ・リダクションを使用したランダム化された値の生成

ランダム・データ・リダクションでは、値全体がランダムな値に置換されてリダクションされます。問合せの結果セットに表示されるリダクションされた値は、アプリケーション・ユーザーが問合せを実行するたびに、ランダムに変更されます。このタイプのリダクションは、データがリダクションされていることを明らかにしたくない場合に便利です。ランダム・データか実際のデータか区別するのが難しい数値および日時データ型の場合に、特に最適です。

ランダム値として表示される出力は、次のように、リダクションされた列のデータ型によって異なります。

  • 文字データ型: ランダムな出力は、文字が混合されています(たとえば、HTU[G{\pjkEWcK)。CHARVARCHAR2のデータ型では、次に示すように動作が異なります。

    • CHARデータ型: リダクションされた出力のキャラクタ・セットは、常に列のキャラクタ・セットと同一になります。リダクションされた出力のバイト長は、常に列定義の長さ(つまり、表の作成時に指定した列の長さ)と同一になります。たとえば、列がCHAR(20)である場合、ユーザー問合せのリダクションされた出力には、ランダムな20文字が提供されます。

    • VARCHAR2データ型: VARCHARデータ型のランダム・リダクションでは、リダクションされた出力のキャラクタ・セットは、常に列のキャラクタ・セットと同一になります。リダクションされた出力の長さは、列の実際のデータの長さに基づいて制限されます。実際のデータの長さを超える文字は表示されません。たとえば、列がVARCHAR2(20)で、リダクションされる行に長さ12の実際のデータが含まれている場合、その行に対するユーザー問合せのリダクションされた出力には、ランダムな12文字(20文字ではない)が提供されます。

  • 数値データ型: 実際の各数値が、実際のデータの絶対値のモジュロである、ランダムな非負値に置換されてリダクションされます。このリダクション結果は、実際のデータの精度を超えないランダムな数値になります。たとえば、数値987654321は、数値12345678135790または987654320のいずれかに置換されてリダクションされます。数値98765432199987654321または-1に置換されることはありません。数値-123は、数値1220または83に置換されてリダクションされますが、数値1231123または-2のいずれかに置換されることはありません。

    前述の例の唯一の例外は、実際の値が-1から9の間の整数である場合です。この場合、実際のデータは、ランダムな非負整数であるmodulo 10に置換されてリダクションされます。

  • 日時データ型: 日付データ型の値がランダム・データ・リダクションを使用してリダクションされる場合、Oracle Databaseには、実際のデータの日付と異なるランダムな日付が常に表示されます。

ランダム・リダクションを使用する設定は、次のとおりです。

function_type    => DBMS_REDACT.RANDOM

4.5 データ型に基づいた完全、部分およびランダム・リダクションの比較

完全、部分およびランダムのどのデータ・リダクション方式を使用するかによって、Oracle組込み、ANSI、ユーザー定義、およびオラクル社提供のデータ型に対する影響は異なります。

この項の内容は次のとおりです。

4.5.1 Oracle組込みデータ型のリダクション機能

表4-1では、Oracle組込みデータ型に対する、完全、部分およびランダム・リダクションの機能の違いを比較します。

表4-1 Oracle組込みデータ型のリダクション機能

データ型 注意 完全リダクション 部分リダクション ランダム・リダクション

文字: CHARVARCHAR2(たとえばVARCHAR2(20000)などの長いVARCHAR2)、NCHARNVARCHAR2

なし

デフォルトのリダクションされた値は、空白1つです。

サポートされているデータ型

サポートされているデータ型

数値: NUMBERFLOATBINARY_FLOATBINARY_DOUBLE

なし

デフォルトのリダクションされた値はゼロ(0)です。

サポートされているデータ型

サポートされているデータ型

Raw: LONGRAWRAW

なし

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型

日時: DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE

なし

デフォルトのリダクションされた値は、01-01-01、または01-01-01 01:00:00

サポートされているデータ型

サポートされているデータ型

インターバル: INTERVAL YEAR TO MONTHINTERVAL DAY TO SECOND

なし

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型

ラージ・オブジェクト: BFILE

なし

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型

ラージ・オブジェクト: BLOB

リダクションなしの型(DBMS_REDACT.NONE)はLOBデータ型をサポートしません。

Oracleの[redacted]のRAW表現

サポート外のデータ型

サポート外のデータ型

ラージ・オブジェクト: CLOBNCLOB

リダクションなしの型(DBMS_REDACT.NONE)はLOBデータ型をサポートしません。

デフォルトのリダクションされた値は、[redacted]です。

サポート外のデータ型

サポート外のデータ型

Rowid: ROWIDUROWID

なし

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型


4.5.2 ANSIデータ型のリダクション機能

表4-2では、ANSIデータ型に対する、完全、部分およびランダム・リダクションの機能の違いを比較します。

表4-2 ANSIデータ型のリダクション機能

データ型 変換方法 完全リダクション 部分リダクション ランダム・リダクション

CHARACTER(n)

CHAR(n)

CHAR(n)に変換

デフォルトのリダクションされた値は、空白1つです。

サポートされているデータ型

サポートされているデータ型

CHARACTER VARYING(n)

CHAR VARYING(n)

VARCHAR2(n)に変換

デフォルトのリダクションされた値は、空白1つです。

サポートされているデータ型

サポートされているデータ型

NATIONAL CHARACTER(n)

NATIONAL CHAR(n)

NCHAR(n)

NCHAR(n)に変換

デフォルトのリダクションされた値は、空白1つです。

サポートされているデータ型

サポートされているデータ型

NATIONAL CHARACTER VARYING(n)

NATIONAL CHAR VARYING(n)

NCHAR VARYING(n)

NVARCHAR2(n)に変換

デフォルトのリダクションされた値は、空白1つです。

サポートされているデータ型

サポートされているデータ型

NUMERIC[(p,s)]

DECIMAL[(p,s)]

NUMBER(p,s)に変換

デフォルトのリダクションされた値はゼロ(0)です。

サポートされているデータ型

サポートされているデータ型

INTEGER

INT

SMALLINT

NUMBER(38)に変換

デフォルトのリダクションされた値はゼロ(0)です。

サポートされているデータ型

サポートされているデータ型

FLOAT

DOUBLE PRECISION

FLOAT(126)に変換

デフォルトのリダクションされた値はゼロ(0)です

サポートされているデータ型

サポートされているデータ型

REAL

FLOAT(63)に変換

デフォルトのリダクションされた値はゼロ(0)です。

サポートされているデータ型

サポートされているデータ型

GRAPHIC

LONG VARGRAPHIC

VARGRAPHIC

TIME

なし

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型


4.5.3 ユーザー定義データ型またはオラクル社提供データ型のリダクション機能

表4-3では、ユーザー定義およびオラクル社提供データ型に対する、完全、部分およびランダム・リダクションの機能の違いを比較します。

表4-3 ユーザー定義データ型またはOracle指定データ型のリダクション機能

データ型またはタイプ 完全リダクション 部分リダクション ランダム・リダクション

ユーザー定義データ型

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型

任意の型、XML型、Oracle Spatial型、Oracle Media型

サポート外のデータ型

サポート外のデータ型

サポート外のデータ型


4.6 テストを目的にリダクションしない場合

リダクションを実行しないデータ・リダクション・ポリシーを作成できます。これは、リダクションされたベース表があるが、特定のアプリケーション・ユーザーのビューには実際のデータを常に表示する必要があるケースで便利です。リダクションされた表の新しいビューを作成して、このビューにデータ・リダクション・ポリシーを定義できます。ポリシーは引き続きベース表に存在しますが、DBMS_REDACT.NONE function_type設定を使用してビューにポリシーを作成した場合、アプリケーションがビューを使用して問い合せてもリダクションは実行されません。