組み込み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 | (オプション) 指定されたデータマスキング関数の型。 有効な値:
|
function_parameters | (オプション) データマスキング関数を指定するパラメーター。 このパラメーターは、PARTIALデータがマスクされている場合、文字列、数値、および日付の種類に対してのみ有効です。
|
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 | (オプション) 実行する操作のタイプ。 有効な値:
|
column_name | (オプション) データマスキングポリシーが適用される列の名前。 |
function_type | (オプション) 指定されたデータマスキング関数の型。 有効な値:
|
function_parameters | (オプション) データマスキング関数を指定するパラメーター。 このパラメーターは、PARTIALデータがマスクされている場合、文字列、数値、および日付の種類に対してのみ有効です。
|
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)