3.9 正規表現ベースのリダクション・ポリシーの作成
正規表現ベースのリダクション・ポリシーでは、検索置換モデルに基づいてデータをリダクションできます。
3.9.1 正規表現ベースのリダクション・ポリシーの作成について
正規表現ベースのリダクションでは、リダクションするデータのパターンを検索できます。
たとえば、正規表現を使用して、文字の長さが変化する可能性のある電子メール・アドレスをリダクションできます。これは、文字データのみで使用するように設計されています。検索および置換操作に形式を使用することも、カスタム・パターン形式を作成することもできます。
列内の値のサブセットのリダクションに正規表現は使用できません。REGEXP_REPLACE_STRING
の設定を有効にするには、REGEXP_PATTERN (正規表現パターン)がすべての
値に一致する必要があり、REGEXP_REPLACE_STRING
が値を変更する必要があります。
REGEXP_PATTERN
が一致しない行では、データ・リダクションはDBMS_REDACT.FULL
リダクションを実行します。これにより、REGEXP_PATTERN
に誤りがあったために正規表現が列内のすべての値との照合に失敗し、それらの行に対して実際のデータを表示するリスクが軽減されます。
さらに、正規表現の置換操作中に、REGEXP_REPLACE_STRING
設定の結果として発生する値への変更がない場合、データ・リダクションはDBMS_REDACT.FULL
リダクションを実行します。
3.9.2 正規表現ベースのリダクション・ポリシーを作成する構文
DBMS_REDACT.ADD_POLICY
プロシージャのregexp_*
パラメータによって、正規表現ベースのリダクション・ポリシーを作成できます。
正規表現ベース完全データ・リダクション・ポリシーを作成する場合の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, expression IN VARCHAR2, enable IN BOOLEAN := TRUE, regexp_pattern IN VARCHAR2 := NULL, regexp_replace_string IN VARCHAR2 := NULL, regexp_position IN BINARY_INTEGER := 1, regexp_occurrence IN BINARY_INTEGER := 0, regexp_match_parameter IN VARCHAR2 := NULL);
ここでは次のように指定します:
-
object_schema
、object_name
、column_name
、policy_name
、expression
、enable
: 「DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文」を参照してください。 -
function_type
: リダクションのタイプを指定します。正規表現に基づくリダクションには、DBMS_REDACT.REGEXP
またはDBMS_REDACT.REGEXP_WIDTH
のいずれかを使用します。DBMS_REDACT.REGEXP
リダクション・タイプを使用した場合、切捨ては行われません。これは、リダクションされる値が列幅よりも広い場合やOracle Call Interfaceの列の幅属性(OCI_ATTR_CHAR_SIZE
)が保持されていない場合でも当てはまります。(これは、REGEXP_REPLACE
SQL演算子が列で使用されているとき同じように4000になります。)DBMS_REDACT.REGEXP_WIDTH
リダクション・タイプを使用すると、列の幅を超えるリダクション済の値が切り捨てられ、列のOCI幅属性(OCI_ATTR_CHAR_SIZE
)が変更されないままになります。次のことに注意してください:
-
アプリケーションが
OCI_ATTR_CHAR_SIZE
属性の値に依存する場合、DBMS_REDACT.REGEXP_WIDTH
ファンクション・タイプを使用します。たとえば、Oracle OLE DB Providerインタフェースを使用して構築されたアプリケーションは、OCI_ATTR_CHAR_SIZE
属性の値に影響を受けやすくなります。DBMS_REDACT.REGEXP
をリダクション・タイプとして使用した場合、OCI_ATTR_CHAR_SIZE
は常に4000になります。この設定は、Oracle OLE DBベースのアプリケーションに使用される表に対するポリシーのリダクション・タイプとしては不適切になります。Oracle Call Interfaceのパラメータ属性の詳細は、Oracle Call Interface開発者ガイドを参照してください。 -
function_type
パラメータをDBMS_REDACT.REGEXP
またはDBMS_REDACT.REGEXP_WIDTH
に設定するときには、DBMS_REDACT.ADD_POLICY
プロシージャからのfunction_parameters
パラメータを省略します。 -
引数
pattern
、replace
、position
、occurrence
およびmatch_parameter
をREGEXP_REPLACE
SQLファンクションに指定したのとほぼ同じ方法で正規表現パラメータを指定します。REGEXP_REPLACE
SQLファンクションの詳細は、Oracle Database SQL言語リファレンスを参照してください。
-
-
regexp_pattern
: 一致する必要のあるデータの検索パターンを説明します。一致が見つかった場合、Oracle Databaseは、regexp_replace_string
設定で指定されたとおりにデータを置換します。詳細は、次の各項を参照してください。 -
regexp_replace_string
: データのリダクション方法を指定します。詳細は、次の各項を参照してください。 -
regexp_position
: 文字列検索の開始位置を指定します。入力する値は、Oracle Databaseが検索を開始するcolumn_name
データの文字を示す正の整数です。デフォルトは、1
またはDBMS_REDACT.RE_BEGINNING
形式で、Oracle Databaseがcolumn_name
データの最初の文字で検索を開始することを意味します。 -
regexp_occurrence
: 検索および置換操作の実行方法を指定します。入力する値は、置換操作の回数を示す正の整数です:-
0
またはDBMS_REDACT.RE_ALL
形式を指定する場合、Oracle Databaseは、一致したすべてのものを置換します。 -
DBMS_REDACT.RE_FIRST
形式を指定する場合、Oracle Databaseは、最初に一致したものを置換します。 -
正の整数
n
を指定すると、Oracle Databaseは、n
番目の一致を置換します。
出現が1より大きい場合、1番目のパターンが検出された後に続く1文字目から、2番目(以降)の出現を検索します。
-
-
regexp_match_parameter
: ファンクションが持つデフォルトの照合動作を変更できるテキスト・リテラルを指定します。このパラメータの動作は、REGEXP_REPLACE
SQLファンクションのこのファンクションの動作と同じです。詳細は、Oracle Database SQL言語リファレンスを参照してください。大文字と小文字を区別せずに検索をフィルタするには、
RE_CASE_INSENSITIVE
形式を指定します。
3.9.3 形式を使用した正規表現ベースのリダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャは、regexp_pattern
パラメータとregexp_replace_string
パラメータの両方をサポートします。
3.9.3.1 正規表現の形式
正規表現の形式によって、クレジット・カード番号の数を置換する場合などによく使用される表現を表します。
表3-10では、DBMS_REDACT.ADD_POLICY
プロシージャでのregexp_pattern
パラメータで使用できる形式について説明します。
表3-10 regexp_patternパラメータの形式
形式 | 説明 |
---|---|
|
任意の桁を検索します。識別されたパターンを、 regexp_replace_string => DBMS_REDACT.RE_REDACT_WITH_SINGLE_X この設定によって、一致した任意の桁が 次の設定では、一致した任意の桁が regexp_replace_string => DBMS_REDACT.RE_REDACT_WITH_SINGLE_1 |
|
先頭6桁および末尾4桁を持つ任意のクレジット・カード(アメリカン・エキスプレス以外)の中央の桁を検索します。識別されたパターンを、 この形式で使用する適切な |
|
アメリカン・エキスプレス・クレジット・カード番号以外のクレジット・カード番号に一致します。この形式で使用する適切な |
|
アメリカン・エキスプレス・クレジット・カード番号に一致します。この形式で使用する適切な |
|
任意の米国の電話番号を検索します。識別されたパターンを、 この形式で使用する必要のある適切な |
|
任意の電子メール・アドレスを検索します。識別されたパターンを、 この形式で使用できる適切な
|
|
任意のIPアドレスを検索します。識別されたパターンを、 この形式で使用する必要のある適切な |
下の表では、DBMS_REDACT.ADD_POLICY
プロシージャでのregexp_replace_string
パラメータで使用できる形式について説明します。
表3-11 regexp_replace_stringパラメータの形式
形式 | 説明 |
---|---|
|
実際のデータの各文字を単一の文字 |
|
|
|
クレジット・カード番号の中央の桁を、 |
|
アメリカン・エキスプレスのカード番号以外のクレジット・カード番号の先頭12桁をリダクションします。たとえば、 |
|
アメリカン・エキスプレスの番号の先頭10桁をリダクションします。たとえば、 |
|
米国の電話番号の最後の7桁を、 |
|
電子メール・アドレスを、 |
|
電子メール・ドメイン名を、 |
|
IPアドレスの最後の3桁を、 |
3.9.3.2 例: 形式を使用した正規表現リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャによって、形式を使用した正規表現リダクション・ポリシーを作成できます。
例3-7では、正規表現形式を使用してクレジット・カード番号をリダクションする方法を示します。
例3-7 正規表現によるデータ・リダクションの文字値
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'cc_num', policy_name => 'redact_cust_cc_nums', function_type => DBMS_REDACT.REGEXP, expression => '1=1', regexp_pattern => DBMS_REDACT.RE_PATTERN_CC_L6_T4, regexp_replace_string => DBMS_REDACT.RE_REDACT_CC_MIDDLE_DIGITS, regexp_position => DBMS_REDACT.RE_BEGINNING, regexp_occurrence => DBMS_REDACT.RE_FIRST, regexp_match_parameter => DBMS_REDACT.RE_CASE_INSENSITIVE, policy_description => 'Regular expressions to redact credit card numbers', column_description => 'cc_num contains customer credit card numbers'); END; /
問合せおよびリダクションされた結果:
SELECT cc_num FROM mavis.cust_info; CC_NUM ------- 401288XXXXXX1881 411111XXXXXX1111 555555XXXXXX1111 511111XXXXXX1118
3.9.4 カスタム正規表現リダクション・ポリシー
データ・リダクション・ポリシーで正規表現をカスタマイズできます。
3.9.4.1 カスタム正規表現の設定
Oracle Data Redactionには、正規表現を使用するポリシーを構成するための、特別な設定が用意されています。
カスタム正規表現リダクション・ポリシーを作成するには、DBMS_REDACT.ADD_POLICY
プロシージャで次のパラメータを使用します。
-
regexp_pattern
: このパターンは通常テキスト・リテラルであり、データ型はCHAR
、VARCHAR2
、NCHAR
またはNVARCHAR2
のいずれかになります。パターンには、 512バイトまで入力できます。regexp_pattern
パラメータの正規表現を記述する方法の詳細は、『Oracle Database SQL言語リファレンス』にあるREGEXP_REPLACE
SQL関数のpattern
引数の説明を参照してください(データ・リダクションがサポートする正規表現の一致は、REGEXP_REPLACE
SQL関数のものとよく似ているため)。 -
regexp_replace_string
: データ型はCHAR
、VARCHAR2
、NCHAR
またはNVARCHAR2
のいずれかになります。regexp_replace_string
には、最大500個の部分正規表現への後方参照を\
n
という書式で指定でき、n
は、1から9の数値です。regexp_replace_string
設定にバックスラッシュ(\)を含める場合、その前にエスケープ文字(これもバックスラッシュ)を付ける必要があります。たとえば、一致したパターンを文字どおり\2
に置換するには(それを一致したパターンで2番目に一致した部分正規表現に置換するのではない場合)、regexp_replace_string
設定に\\2
を入力します。詳細は、Oracle Database SQL言語リファレンスを参照してください。
関連項目:
その他のDBMS_REDACT.ADD_POLICY
パラメータの詳細は、DBMS_REDACT.ADD_POLICYプロシージャの一般的な構文を参照してください。
3.9.4.2 例: カスタム正規表現リダクション・ポリシー
DBMS_REDACT.ADD_POLICY
プロシージャのregexp*パラメータによって、カスタム正規表現リダクション・ポリシーを作成できます。
例3-8では、emp_id
列データをリダクションするための正規表現の使用方法を示します。次の例では、regexp_pattern
パラメータとregexp_replace_string
パラメータが組み合されて、最初に9桁のパターンが検索されます。参照用に、それらは最初の3桁、次の2桁、最後の4桁を含む3つのグループに分割されます。その後、最初の5桁が、元のパターンで検索された3番目のグループ(最後の4桁)と連結されたXXXXX
に置換されます。
例3-8 正規表現を使用した部分的にリダクションされるデータ・リダクション
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'mavis', object_name => 'cust_info', column_name => 'emp_id', policy_name => 'redact_cust_ids', function_type => DBMS_REDACT.REGEXP, expression => '1=1', regexp_pattern => '(\d\d\d)(\d\d)(\d\d\d\d)', regexp_replace_string => 'XXXXX\3', regexp_position => 1, regexp_occurrence => 0, regexp_match_parameter => 'i', policy_description => 'Redacts employee IDs using regular expression', column_description => 'emp_id contains employee ID numbers'); END; /
問合せおよびリダクションされた結果:
SELECT emp_id FROM mavis.cust_info; EMP_ID ------------ XXXXX1234 XXXXX5678