すべてのプロダクト
Search
ドキュメントセンター

PolarDB:DBMS_REDACT

最終更新日:Jun 28, 2024

組み込みDBMS_REDACTパッケージは、特権ユーザーまたはアプリケーションによって照会されたデータをマスクし、データセキュリティを保護するために使用されます。

サブプログラム

サブプログラム

説明

ADD_POLICYプロシージャ

データマスキングポリシーを追加します。

ALTER_POLICYプロシージャ

データマスキングポリシーを変更します。

DISABLE_POLICYプロシージャ

データマスキングポリシーを無効にします。

ENABLE_POLICYプロシージャ

データマスキングポリシーを有効にします。

DROP_POLICYプロシージャ

データマスキングポリシーを削除します。

UPDATE_FULL_REDACTION_VALUES手続き

完全データマスキング後に、異なるデータ型の列のデフォルト値を更新します。

DBMS_REDACTパッケージには、次のGrand Unified Configuration (GUC) パラメーターが含まれています。

  • polar_enable_masking_policy: データマスキング機能を有効にするかどうかを指定します。

  • polar_enable_subquery_masking: データマスキング機能が有効になっているときにサブクエリをマスクするかどうかを指定します。

説明

PolarDBが組み込みのDBMS_REDACTパッケージを使用してデータをマスクする場合、サブクエリのマスクされた列が上位層のSQLクエリによって参照されている場合、マスクされた値が使用されます。 たとえば、mask_tbl(a int, b int); という名前のテーブルにaに指定されたデータマスキングポリシーが含まれている場合、次のSELECTステートメントを実行します。

SELECT t1.a, t2.a FROM (SELECT a FROM mask_tbl) t1 LEFT JOIN (SELECT a FROM mask_tbl) t2 ON t1.a=t2.a;

前述のSELECTステートメントでは、JOIN句のON条件はマスクされた値に基づいて決定されます。 データマスキング前の値に基づいて条件を判断する場合は、次のSET文を実行して、サブクエリのデータマスキング機能を無効にします。

SET polar_enable_subquery_masking = off;

この場合、上記のSELECTステートメントを再度実行すると、データマスキング前の値はJOIN句のLEFT JOIN操作に使用され、ステートメントに返される値はマスクされません。

ADD_POLICY

このストアドプロシージャは、テーブルのデータマスキングポリシーを追加するために使用されます。

構文

DBMS_REDACT.ADD_POLICY (
    object_schema VARCHAR2 DEFAULT NULL、
    object_name VARCHAR2、
    policy_name VARCHAR2、
    policy_description VARCHAR2 DEFAULT NULL、
    column_name VARCHAR2 DEFAULT NULL、
    column_description VARCHAR2 DEFAULT NULL、
    function_type INTEGERデフォルト1、
    function_parameters VARCHAR2 DEFAULT NULL、
    式VARCHAR2、
    BOOLEAN DEFAULT TRUEを有効にし、
    regexp_pattern VARCHAR2 DEFAULT NULL、
    regexp_replace_string VARCHAR2 DEFAULT NULL、
    regexp_position INTEGERデフォルト1、
    regexp_occurrence INTEGERデフォルト0、
    regexp_match_parameter VARCHAR2 DEFAULT NULL); 

Parameters

パラメーター

説明

object_schema

(オプション) データマスキングポリシーを追加するテーブルのスキーマ。 このパラメーターを設定しない場合、現在のユーザーの既定のスキーマが使用されます。

object_name

データマスキングポリシーが適用されるテーブルの名前。

policy_name

データマスキングポリシーの名前。

column_name

(オプション) データマスキングポリシーが適用される列の名前。

function_type

(オプション) 指定されたデータマスキング関数の型。 有効な値:

  • DBMS_REDACT.NONE

  • DBMS_REDACT.FULL (デフォルト)

  • DBMS_REDACT.NULLIFY

  • DBMS_REDACT.PARTIAL

  • DBMS_REDACT.RANDOM

  • DBMS_REDACT.REGEXP

  • DBMS_REDACT.REGEXP_WIDTH。 この値は、Oracleとの互換性のプロバイダーであり、REGEXPと同じように動作します。

function_parameters

(オプション) データマスキング関数を指定するパラメーター。 このパラメーターは、PARTIALデータがマスクされている場合、文字列、数値、および日付の種類に対してのみ有効です。

  • String型: たとえば、パラメーター形式はVVVFFVVVV, VV-VVVV-VV, X, 1, 4です。 この形式では、パラメーターはコンマ (,) で区切ります。

    最初の部分は入力パラメータを示します。 この部分において、「V」はマスクされ得る文字を示し、「F」は無視される文字を示す。 2番目の部分は出力パラメータを示します。 この部分では、「V」は、入力パラメータの最初の部分で同じ数の文字を持つ文字のシーケンスに続きます。 第3の部分は、データマスキング後に表示される文字を示す。 第4の部分は、データマスキングの開始位置を示す。 5番目の部分は、データマスキングの終了位置を示す。 開始位置および終了位置は、第1の部分の入力パラメータにおけるVに相対的である。

    例えば、ストリング「abcdefg」は、VVFFVVV, VV-VV-VV, X, 1, 3によってXX − Xe − fgとしてマスクされる。

  • 数値型: たとえば、パラメーター形式は0、1、4です。

    最初の部分は、データマスキング後に生成される数字を示し、0から9の範囲である。 第2の部分は、データマスキングの開始位置を示す。 第3の部分は、データマスキングの終了位置を示す。 開始位置と終了位置は、テーブルの数値データ型の列を基準にしています。

    例えば、123456789は、5、2、5によって155556789< としてマスクされる。

  • 日付タイプ: たとえば、パラメータ形式はm12d1y2001h1m1s1です。

    このフォーマットでは、左から右への文字は、月、日、年、時、分、および秒を示す。

    フィールドに大文字を使用する場合、フィールドをマスクする必要はありません。 フィールドに小文字と数字を使用する場合、表示されるフィールド値はデータマスキング後に生成された値になります。

    たとえば、Dは日付フィールド値をマスクする必要がないことを示し、d15はマスクされた日付フィールド値が15番目として表示されることを示します。 2023-01-01 12:00:002001-12-01 12:01:01としてm12Dy2001Hm1s1によってマスクする。

expression

データマスキングポリシーのBOOLEAN式。 データマスキングポリシーは、この式に対して "TRUE" が返された場合にのみ実行されます。

enable

ポリシーの作成時にデータマスキングポリシーのBOOLEAN値を有効にするかどうかを指定します。

regexp_pattern

(オプション) 正規表現が一致するパターン。

regexp_replace_string

(オプション) 置換用の正規表現で定義されている文字列。

regexp_position

(オプション) 正規表現が検索用に定義する文字の位置。 デフォルト値は 1 です。

regexp_occurrence

(オプション) 正規表現と一致したパターンが置き換えられる回数。 このパラメーターを0に設定すると、一致したパターンのすべてのオカレンスが置き換えられます。 このパラメーターを正の整数 "n" に設定すると、一致したパターンの最初の "n" 個の出現のみが置き換えられます。

regexp_match_parameter

(オプション) デフォルトの一致動作。 有効値: i、c、n、m、x。

policy_description

(オプション) データマスキングポリシーの説明。

column_description

(オプション) マスクされた列の説明。

次の例は、テーブルにデータマスキングポリシーを追加する方法を示しています。

CREATE TABLE masktbl(name varchar2(40), num integer);

INSERT INTO masktbl VALUES('Alice', 123456789);
INSERT INTO masktbl VALUES('Bob', 234567890);

-- 1. Create a data masking policy.
BEGIN
    DBMS_REDACT.ADD_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            expression => '1=1',
                            column_name => 'num',
                            function_type => DBMS_REDACT.PARTIAL,
                            function_parameters => '5,1,4');
END;

-- 2. The num column in SELECT query results is masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 555556789
    Bob   | 555567890
(2 rows)

ALTER_POLICY

このストアドプロシージャは、データマスキングポリシーを変更するために使用されます。

構文

DBMS_REDACT.ALTER_POLICY (
    object_schema              VARCHAR2 DEFAULT NULL,
    object_name                VARCHAR2,
    policy_name                VARCHAR2,
    action                     INTEGER  DEFAULT 1,
    column_name                VARCHAR2 DEFAULT NULL,
    function_type              INTEGER  DEFAULT 1,
    function_parameters        VARCHAR2 DEFAULT NULL,
    expression                 VARCHAR2 DEFAULT NULL,
    regexp_pattern             VARCHAR2 DEFAULT NULL,
    regexp_replace_string      VARCHAR2 DEFAULT NULL,
    regexp_position            INTEGER  DEFAULT 1,
    regexp_occurrence          INTEGER  DEFAULT 0,
    regexp_match_parameter     VARCHAR2 DEFAULT NULL,
    policy_description         VARCHAR2 DEFAULT NULL,
    column_description         VARCHAR2 DEFAULT NULL);

Parameters

パラメーター

説明

object_schema

データマスキングポリシーを変更するテーブルのスキーマ。 このパラメーターを設定しない場合、現在のユーザーの既定のスキーマが使用されます。

object_name

データマスキングポリシーが適用されるテーブルの名前。

policy_name

データマスキングポリシーの名前。

action

(オプション) 実行する操作のタイプ。 有効な値:

  • DBMS_REDACT.ADD_COLUMN

  • BMS_REDACT.DROP_COLUMN

  • DBMS_REDACT.MODIFY_EXPRESSION

  • DBMS_REDACT.MODIFY_COLUMN

  • DBMS_REDACT.SET_POLICY_DESCRIPTION

  • DBMS_REDACT.SET_COLUMN_DESCRIPTION

column_name

(オプション) データマスキングポリシーが適用される列の名前。

function_type

(オプション) 指定されたデータマスキング関数の型。 有効な値:

  • DBMS_REDACT.NONE

  • DBMS_REDACT.FULL (デフォルト)

  • DBMS_REDACT.NULLIFY

  • DBMS_REDACT.PARTIAL

  • DBMS_REDACT.RANDOM

  • DBMS_REDACT.REGEXP

  • DBMS_REDACT.REGEXP_WIDTH。 この値は、Oracleとの互換性のプロバイダーであり、REGEXPと同じように動作します。

function_parameters

(オプション) データマスキング関数を指定するパラメーター。 このパラメーターは、PARTIALデータがマスクされている場合、文字列、数値、および日付の種類に対してのみ有効です。

  • String型: たとえば、パラメーター形式はVVVFFVVVV, VV-VVVV-VV, X, 1, 4です。 この形式では、パラメーターはコンマ (,) で区切ります。

    最初の部分は入力パラメータを示します。 この部分において、「V」はマスクされ得る文字を示し、「F」は無視される文字を示す。 2番目の部分は出力パラメータを示します。 この部分では、「V」は、入力パラメータの最初の部分で同じ数の文字を持つ文字のシーケンスに続きます。 第3の部分は、データマスキング後に表示される文字を示す。 第4の部分は、データマスキングの開始位置を示す。 5番目の部分は、データマスキングの終了位置を示す。 開始位置および終了位置は、第1の部分の入力パラメータにおけるVに相対的である。

    例えば、ストリング「abcdefg」は、VVFFVVV, VV-VV-VV, X, 1, 3によってXX − Xe − fgとしてマスクされる。

  • 数値型: たとえば、パラメーター形式は0、1、4です。

    最初の部分は、データマスキング後に生成される数字を示し、0から9の範囲である。 第2の部分は、データマスキングの開始位置を示す。 第3の部分は、データマスキングの終了位置を示す。 開始位置と終了位置は、テーブルの数値データ型の列を基準にしています。

    例えば、123456789は、5、2、5によって155556789されるようにマスクされる。

  • 日付タイプ: たとえば、パラメータ形式はm12d1y2001h1m1s1です。

    このフォーマットでは、左から右への文字は、月、日、年、時、分、および秒を示す。

    フィールドに大文字を使用する場合、フィールドをマスクする必要はありません。 フィールドに小文字と数字を使用する場合、表示されるフィールド値はデータマスキング後に生成された値になります。

    たとえば、Dは日付フィールド値をマスクする必要がないことを示し、d15はマスクされた日付フィールド値が15番目として表示されることを示します。 2023-01-01 12:00:002001-12-01 12:01:01としてm12Dy2001Hm1s1によってマスクする。

expression

データマスキングポリシーのBOOLEAN式。 データマスキングポリシーは、この式に対して "TRUE" が返された場合にのみ実行されます。

expression

(オプション) データマスキングポリシーのBOOLEAN式。 データマスキングポリシーは、この式に対して "TRUE" が返された場合にのみ実行されます。

regexp_pattern

(オプション) 正規表現が一致するパターン。

regexp_replace_string

(オプション) 置換用の正規表現で定義されている文字列。

regexp_position

(オプション) 正規表現が検索用に定義する文字の位置。 デフォルト値は 1 です。

regexp_occurrence

(オプション) 正規表現と一致したパターンが置き換えられる回数。 このパラメーターを0に設定すると、一致したパターンのすべてのオカレンスが置き換えられます。 このパラメーターを正の整数 "n" に設定すると、一致したパターンの最初の "n" 個の出現のみが置き換えられます。

regexp_match_parameter

(オプション) デフォルトの一致動作。 有効値: i、c、n、m、x。

policy_description

(オプション) データマスキングポリシーの説明。

column_description

(オプション) マスクされた列の説明。

この例では、データマスキングポリシーを変更し、複数のマスクされた列を追加する方法を示します。

CREATE TABLE masktbl(name varchar2(40), num integer);

INSERT INTO masktbl VALUES('Alice', 123456789);
INSERT INTO masktbl VALUES('Bob', 234567890);

-- 1. Create a data masking policy.
BEGIN
    DBMS_REDACT.ADD_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            expression => '1=1');
END;

-- 2. SELECT query results are not masked data.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 123456789
    Bob   | 234567890
(2 rows)

BEGIN
    DBMS_REDACT.ALTER_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            action => dbms_redact.ADD_COLUMN,
                            column_name => 'num',
                            function_type => DBMS_REDACT.PARTIAL,
                            function_parameters => '9, 1, 4');
END;

-- 3. SELECT query results are masked data.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 999956789
    Bob   | 999967890
(2 rows)

BEGIN
    DBMS_REDACT.ALTER_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            action => DBMS_REDACT.MODIFY_COLUMN,
                            column_name => 'num',
                            function_type => DBMS_REDACT.PARTIAL,
                            function_parameters => '5, 1, 4');
END;

-- 4. SELECT query results are returned after the data masking policy is modified.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 555556789
    Bob   | 555567890
(2 rows)

DISABLE_POLICY

このストアドプロシージャは、データマスキングポリシーを無効にするために使用されます。

構文

DBMS_REDACT.DISABLE_POLICY (
    object_schema VARCHAR2 DEFAULT NULL、
    object_name VARCHAR2、
    policy_name VARCHAR2); 

Parameters

パラメーター

説明

object_schema

データマスキングポリシーを無効にするテーブルのスキーマ。 このパラメーターを設定しない場合、現在のユーザーの既定のスキーマが使用されます。

object_name

データマスキングポリシーを無効にするテーブルの名前。

policy_name

無効にするデータマスキングポリシーの名前。

次の例は、デフォルトで有効になっているデータマスキングポリシーを作成し、DISABLE_POLICYストアドプロシージャを使用してポリシーを無効にする方法を示しています。

CREATE TABLE masktbl(name varchar2(40), num integer);

INSERT INTO masktbl VALUES('Alice', 123456789);
INSERT INTO masktbl VALUES('Bob', 234567890);

-- 1. Create a data masking policy.
BEGIN
    DBMS_REDACT.ADD_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            expression => '1=1',
                            column_name => 'num',
                            function_type => DBMS_REDACT.PARTIAL,
                            function_parameters => '5,1,4');
END;

-- 2. The num column in SELECT query results is masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 555556789
    Bob   | 555567890
(2 rows)

-- 3. Disable the policy.
CALL DBMS_REDACT.DISABLE_POLICY(object_name => 'masktbl', policy_name => 'p1');

-- 4. The num column in SELECT query results is not masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 123456789
    Bob   | 234567890
(2 rows)

ENABLE_POLICY

このストアドプロシージャは、データマスキングポリシーを有効にするために使用されます。

構文

DBMS_REDACT.ENABLE_POLICY (
    object_schema VARCHAR2 DEFAULT NULL、
    object_name VARCHAR2、
    policy_name VARCHAR2); 

Parameters

パラメーター

説明

object_schema

(オプション) データマスキングポリシーを有効にするテーブルのスキーマ。 このパラメーターを設定しない場合、現在のユーザーの既定のスキーマが使用されます。

object_name

データマスキングポリシーを有効にするテーブルの名前。

policy_name

有効にするデータマスキングポリシーの名前。

次の例は、デフォルトで無効になっているデータマスキングポリシーを作成し、ENABLE_POLICYストアドプロシージャを使用してポリシーを有効にする方法を示しています。

CREATE TABLE masktbl(name varchar2(40), num integer);

INSERT INTO masktbl VALUES('Alice', 123456789);
INSERT INTO masktbl VALUES('Bob', 234567890);

-- 1. Create a data masking policy.
BEGIN
    DBMS_REDACT.ADD_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            expression => '1=1',
                            column_name => 'num',
                            function_type => DBMS_REDACT.PARTIAL,
                            function_parameters => '5,1,4',
                            enable => false);
END;

-- 2. The num column in SELECT query results is not masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 123456789
    Bob   | 234567890
(2 rows)

-- 3. Enable the policy.
CALL DBMS_REDACT.ENABLE_POLICY(object_name => 'masktbl', policy_name => 'p1');

-- 4. The num column in SELECT query results is masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 555556789
    Bob   | 555567890
(2 rows)

DROP_POLICY

このストアドプロシージャは、指定されたテーブルからデータマスキングポリシーを削除するために使用されます。

構文

DBMS_REDACT.DROP_POLICY (
    object_schema VARCHAR2 DEFAULT NULL、
    object_name VARCHAR2、
    policy_name VARCHAR2); 

Parameters

パラメーター

説明

object_schema

(オプション) データマスキングポリシーを削除するテーブルのスキーマ。 このパラメーターを設定しない場合、現在のユーザーの既定のスキーマが使用されます。

object_name

データマスキングポリシーを削除するテーブルの名前。

policy_name

削除するデータマスキングポリシーの名前。

次の例は、デフォルトで有効になっているデータマスキングポリシーを作成し、DROP_POLICYストアドプロシージャを使用してポリシーを削除する方法を示しています。

CREATE TABLE masktbl(name varchar2(40), num integer);

INSERT INTO masktbl VALUES('Alice', 123456789);
INSERT INTO masktbl VALUES('Bob', 234567890);

-- 1. Create a data masking policy.
BEGIN
    DBMS_REDACT.ADD_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            expression => '1=1',
                            column_name => 'num',
                            function_type => DBMS_REDACT.PARTIAL,
                            function_parameters => '5,1,4');
END;

-- 2. The num column in SELECT query results is masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 555556789
    Bob   | 555567890
(2 rows)

-- 3. Remove the policy.
CALL DBMS_REDACT.DROP_POLICY(object_name => 'masktbl', policy_name => 'p1');

-- 4. The num column in SELECT query results is not masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |    num
-------+-----------
    Alice | 123456789
    Bob   | 234567890
(2 rows)

UPDATE_FULL_REDACT_VALUES

このストアドプロシージャは、完全データマスキング後に異なるデータ型の列のデフォルト値を更新するために使用されます。

構文

DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES (
    number_val NUMBER DEFAULT NULL,
    binfloat_val FLOAT4 DEFAULT NULL、
    bindouble_val FLOAT8 DEFAULT NULL、
    char_val CHAR DEFAULT NULL、
    varchar_val VARCHAR2 DEFAULT NULL、
    nchar_val NCHAR DEFAULT NULL、
    nvarchar_val NVARCHAR2 DEFAULT NULL、
    date_val DATE DEFAULT NULL、
    ts_val TIMESTAMP DEFAULT NULL、
    tswtz_val TIMESTAMPTZ DEFAULT NULL、
    blob_val BLOB DEFAULT NULL、
    clob_val CLOB DEFAULT NULL、
    nclob_val NCLOB DEFAULT NULL); 

Parameters

パラメーター

説明

number_val

完全データマスキング後にNUMBER列のデフォルト値を更新します。

binfloat_val

フルデータマスキング後にFLOAT列のデフォルト値を更新します。

bindouble_val

完全データマスキング後にDOUBLE列のデフォルト値を更新します。

char_val

完全データマスキング後にCHARまたはNCHAR列のデフォルト値を更新します。

varchar_val

フルデータマスキング後に、VARCHAR2、NVARCHAR2、CLOB、またはNCLOB列のデフォルト値を更新します。

nchar_val

このパラメータは、Oracleとの互換性のためにのみ提供されます。 パラメーターを設定する必要はありません。

nvarchar_val

このパラメータは、Oracleとの互換性のためにのみ提供されます。 パラメーターを設定する必要はありません。

date_val

完全データマスキング後にDATE列のデフォルト値を更新します。

ts_val

完全データマスキング後にTIMESTAMP列のデフォルト値を更新します。

tswtz_val

完全データマスキング後にTIMESTAMPTZ列のデフォルト値を更新します。

blob_val

完全データマスキング後にBLOB列のデフォルト値を更新します。

clob_val

このパラメータは、Oracleとの互換性のためにのみ提供されます。 パラメーターを設定する必要はありません。

nclob_val

このパラメータは、Oracleとの互換性のためにのみ提供されます。 パラメーターを設定する必要はありません。

次の例は、完全データマスキング後に一部のデータ型の列の既定値を更新し、列に対して単一のクエリを実行する方法を示しています。

CREATE TABLE masktbl(name varchar2(40), num integer);

INSERT INTO masktbl VALUES('Alice', 123456789);
INSERT INTO masktbl VALUES('Bob', 234567890);

-- 1. Create a data masking policy.
BEGIN
    DBMS_REDACT.ADD_POLICY(object_name => 'masktbl',
                            policy_name => 'p1',
                            expression => '1=1',
                            column_name => 'num',
                            function_type => DBMS_REDACT.FULL);
END;

-- 2. The num column in SELECT query results is masked.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  | num
-------+-----
    Alice |   0
    Bob   |   0
(2 rows)

-- 3. Update the default values of columns after full data masking.
CALL DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES(number_val => 12345);

-- 4. Perform a single query again. In the query results, the values of the num column are masked data after modification.
SELECT name, num FROM masktbl ORDER BY 1, 2;
    name  |  num
-------+-------
    Alice | 12345
    Bob   | 12345
(2 rows)