DBMS_REDACT包支持对查询返回的数据进行脱敏或屏蔽,DBMS_REDACT包提供了创建策略、更改策略、启用策略、禁用策略和删除策略的存储过程,您可以使用这些存储过程实现自定义的数据混淆。
下表列出了DBMS_REDACT包中可以使用的存储过程。
存储过程 | 返回类型 | 描述 |
ADD_POLICY(object_schema, object_name, policy_name, policy_description, column_name, column_description, function_type, function_parameters, expression, enable, regexp_pattern, regexp_replace_string, regexp_position, regexp_occurence, regexp_match_parameter, custom_function_expression) | N/A | 在表或视图上增加数据脱敏策略。 |
ALTER_POLICY(object_schema, object_name, policy_name, action, column_name, function_type, function_parameters, expression, regexp_pattern, regexp_replace_string, regexp_position, regexp_occurence, regexp_match_parameter, policy_description, column_description, custom_function_expression) | N/A | 修改数据脱敏策略。 |
DISABLE_POLICY(object_schema, object_name, policy_name) | N/A | 禁用现有的数据脱敏策略。 |
ENABLE_POLICY(object_schema, object_name, policy_name) | N/A | 启用数据脱敏策略。 |
DROP_POLICY(object_schema, object_name, policy_name) | N/A | 删除数据脱敏策略。 |
UPDATE_FULL_REDACTION_VALUES(number_val, binfloat_val, bindouble_val, char_val, varchar_val, nchar_val, nvarchar_val, datecol_val, ts_val, tswtz_val, blob_val, clob_val, nclob_val) | N/A | 变更完全脱敏下不同类型的默认显示值。 |
存储过程
ADD_POLICY
ADD_POLICY为表创建新的数据脱敏策略。
ADD_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2,
<policy_description> IN VARCHAR2 DEFAULT NULL,
<column_name> IN VARCHAR2 DEFAULT NULL,
<column_description> IN VARCHAR2 DEFAULT NULL,
<function_type> IN INTEGER DEFAULT DBMS_REDACT.FULL,
<function_parameters> IN VARCHAR2 DEFAULT NULL,
<expression> IN VARCHAR2,
<enable> IN BOOLEAN DEFAULT TRUE,
<regexp_pattern> IN VARCHAR2 DEFAULT NULL,
<regexp_replace_string> IN VARCHAR2 DEFAULT NULL,
<regexp_position> INTEGER DEFAULT DBMS_REDACT.RE_BEGINNING,
<regexp_occurrence> INTEGER DEFAULT DBMS_REDACT.RE_ALL,
<regexp_match_parameter> IN VARCHAR2 DEFAULT NULL,
<custom_function_expression> IN VARCHAR2 DEFAULT NULL
)
参数
参数名称 | 描述 |
object_schema | 指定对象所在的模式名称,不指定则是current_user的默认schema。 |
object_name | 创建数据脱敏策略的表的名称。 |
policy_name | 需要添加的策略的名称。每个表上策略名称不可重复。 |
policy_description | 指定脱敏策略的描述。 |
column_name | 脱敏策略适用的列的名称。 说明 如果需要脱敏多个列,请使用alter_policy存储过程添加其他列。 |
column_description | 需要脱敏的列的描述。 说明 目前column_description暂不支持,当您指定列的描述时,将收到一条警告消息。 |
function_type | 要使用的脱敏函数的类型。可能的值如下:
|
function_parameters | 指定分区脱敏的函数参数,仅适用于部分脱敏。 |
expression | 指定表的布尔表达式并确定如何应用策略。如果此策略表达式的计算结果为true ,则会使用脱敏策略。 |
enable | 用于控制策略的启用或禁用。默认为TRUE,取值如下:
|
regexp_pattern | 指定用于脱敏数据的正则表达式模式。如果regexp_pattern不匹配,则返回NULL。 |
regexp_replace_string | 指定替换字符串值。 |
regexp_position | 指定搜索必须开始的字符位置。默认情况下,函数参数是RE_BEGINNING 。 |
regexp_occurrence | 指定子字符串的替换出现。
|
regexp_match_parameter | 更改函数的默认匹配行为。regexp_match_parameter常量可能的取值如下:
|
custom_function_expression | 仅适用于脱敏的CUSTOM类型。custom_function_expression是一个函数表达式,即具有参数的模式限定函数,例如, |
ALTER_POLICY
ALTER_POLICY将修改表的现有数据脱敏策略。
ALTER_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2,
<action> IN INTEGER DEFAULT DBMS_REDACT.ADD_COLUMN,
<column_name> IN VARCHAR2 DEFAULT NULL,
<function_type> IN INTEGER DEFAULT DBMS_REDACT.FULL,
<function_parameters> IN VARCHAR2 DEFAULT NULL,
<expression> IN VARCHAR2 DEFAULT NULL,
<regexp_pattern> IN VARCHAR2 DEFAULT NULL,
<regexp_replace_string> IN VARCHAR2 DEFAULT NULL,
<regexp_position> IN INTEGER DEFAULT DBMS_REDACT.RE_BEGINNING,
<regexp_occurrence> IN INTEGER DEFAULT DBMS_REDACT.RE_ALL,
<regexp_match_parameter> IN VARCHAR2 DEFAULT NULL,
<policy_description> IN VARCHAR2 DEFAULT NULL,
<column_description> IN VARCHAR2 DEFAULT NULL,
<custom_function_expression> IN VARCHAR2 DEFAULT NULL
)
参数
参数名称 | 描述 |
object_schema | 指定对象所在的模式名称,以及在该对象上的策略所在的模式名称。不指定则是current_user的默认schema。 |
object_name | 需要更改数据脱敏策略的表的名称。 |
policy_name | 需要更改的策略的名称。 |
action | 需要执行的操作。 |
column_name | 脱敏策略适用的列的名称。 |
function_type | 需要使用的脱敏函数的类型。可能的值如下:
|
function_parameters | 指定脱敏函数的函数参数。 |
expression | 指定表的布尔表达式并确定如何应用策略。如果此策略表达式的计算结果为TRUE,则会发生脱敏策略. |
regexp_pattern | 允许使用正则表达式来脱敏数据。如果regexp_pattern与数据不匹配,则 返回NULL。 |
regexp_replace_string | 指定替换字符串值。 |
regexp_position | 指定搜索必须开始的字符位置。默认情况下,函数参数是RE_BEGINNING。 |
regexp_occurence | 指定子字符串的替换出现。
|
regexp_match_parameter | 更改函数的默认匹配行为。regexp_match_parameter可能的常量如下:
|
policy_description | 指定脱敏策略的描述。 |
column_description | 需要脱敏的列的描述。 说明 目前column_description暂不支持,如果您指定列的描述,您将收到一条警告消息。 |
custom_function_expression | custom_function_expression仅适用于脱敏CUSTOM类型。custom_function_expression是一个函数表达式,即具有参数的模式限定函数,例如, |
DISABLE_POLICY
DISABLE_POLICY禁用现有的数据脱敏策略。
DISABLE_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2
)
参数
参数名称 | 描述 |
object_schema | 指定对象所在的模式名称,以及该对象上的策略所在的模式名称。不指定则是current_user的默认schema。 |
object_name | 需要禁用数据脱敏策略的表的名称。 |
policy_name | 需要禁用的策略的名称。 |
ENABLE_POLICY
ENABLE_POLICY启用先前禁用的数据脱敏策略。
ENABLE_POLICY (
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2
)
参数
参数名称 | 描述 |
object_schema | 指定对象所在的模式名称,以及该对象上的策略所在的模式名称。不指定则是current_user的默认schema。 |
object_name | 需要对其启用数据脱敏策略的表的名称。 |
policy_name | 需要启用的策略的名称。 |
DROP_POLICY
DROP_POLICY通过从表中删除屏蔽策略来删除数据脱敏策略。
DROP_POLICY(
<object_schema> IN VARCHAR2 DEFAULT NULL,
<object_name> IN VARCHAR2,
<policy_name> IN VARCHAR2
)
参数
参数名称 | 描述 |
object_schema | 指定对象所在的schema名称,以及将应用数据脱敏策略的schema名称。不指定则是current_user的默认schema。 |
object_name | 需要从表中删除数据脱敏策略的表的名称。 |
policy_name | 需要删除的策略的名称。 |
UPDATE_FULL_REDACTION_VALUES
UPDATE_FULL_REDACTION_VALUES更新数据脱敏策略的默认显示值,并且可以通过redaction_values_for_type_full视图查看这些默认值。
UPDATE_FULL_REDACTION_VALUES (
<number_val> IN NUMBER DEFAULT NULL,
<binfloat_val> IN FLOAT4 DEFAULT NULL,
<bindouble_val> IN FLOAT8 DEFAULT NULL,
<char_val> IN CHAR DEFAULT NULL,
<varchar_val> IN VARCHAR2 DEFAULT NULL,
<nchar_val> IN NCHAR DEFAULT NULL,
<nvarchar_val> IN NVARCHAR2 DEFAULT NULL,
<datecol_val> IN DATE DEFAULT NULL,
<ts_val> IN TIMESTAMP DEFAULT NULL,
<tswtz_val> IN TIMESTAMPTZ DEFAULT NULL,
<blob_val> IN BLOB DEFAULT NULL,
<clob_val> IN CLOB DEFAULT NULL,
<nclob_val> IN CLOB DEFAULT NULL
)
参数
参数名称 | 描述 |
number_val | 更新NUMBER数据类型的默认值。 |
binfloat_val | 更新的值可以是FLOAT4数据类型的任意值。目前暂不支持二进制浮点数据类型。 |
bindouble_val | 更新的值可以是FLOAT8数据类型的任意值。目前暂不支持二进制双精度数据类型。 |
char_val | 更新CHAR数据类型的默认值。 |
varchar_val | 更新VARCHAR2数据类型的默认值。 |
nchar_val | nchar_val映射到CHAR数据类型并返回CHAR值。 |
nvarchar_val | nvarchar_val映射到VARCHAR2数据类型并返回VARCHAR值。 |
datecol_val | 更新DATE数据类型的默认值。 |
ts_val | 更新TIMESTAMP数据类型的默认值。 |
tswtz_val | 更新TIMESTAMPTZ数据类型的默认值。 |
blob_val | 更新BLOB数据类型的默认值。 |
clob_val | 更新CLOB数据类型的默认值。 |
nclob_val | nclob_val映射到CLOB数据类型并返回CLOB值。 |
示例
ADD_POLICY
通过对表添加策略,使得其他用户访问该表时数据发生混淆。
准备测试数据,创建测试表格payment_details_tab与测试用户redact_user。
---创建测试表格payment_details_tab CREATE TABLE payment_details_tab ( customer_id NUMBER NOT NULL, card_string VARCHAR2(19) NOT NULL); INSERT INTO payment_details_tab VALUES (4001,'2345-2345-2345-2345'); ---创建测试用户redact_user并授权 CREATE USER redact_user PASSWORD '1234'; GRANT SELECT ON payment_details_tab TO redact_user;
执行如下语句,对测试表格payment_details_tab添加策略。
CALL DBMS_REDACT.add_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001', policy_description => 'redactPolicy_001 for payment_details_tab table', column_name => 'customer_id', function_type => DBMS_REDACT.full, expression => '1=1', enable => TRUE );
执行如下语句,切换至测试用户redact_user,并查询表格。
---切换连接数据库用户 \c - redact_user ---执行如下查询语句 SELECT customer_id from payment_details_tab order by 1;
查询语句返回结果如下:
customer_id ------------- 0 (1 row)
ALTER_POLICY
通过变更policy的定义,对要显示的字符串数据进行脱敏处理。
执行如下语句,变更测试表格payment_details_tab策略的定义。
CALL DBMS_REDACT.alter_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001', action => DBMS_REDACT.ADD_COLUMN, column_name => 'card_string', function_type => DBMS_REDACT.partial, function_parameters => DBMS_REDACT.REDACT_CCN16_F12 );
执行如下语句,切换至测试用户redact_user,并查询表格。
---切换连接数据库用户 \c - redact_user ---执行如下查询语句 SELECT * FROM payment_details_tab;
查询语句返回结果如下:
customer_id | card_string -------------+--------------------- 0 | ****-****-****-2345 (1 row)
DISABLE_POLICY
通过关闭policy,使得其他用户可以查看正常的表数据。
执行如下语句,关闭测试表格payment_details_tab上的策略。
CALL DBMS_REDACT.disable_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001' );
执行如下语句,切换至测试用户redact_user,并查询表格。
---切换连接数据库用户 \c - redact_user ---执行如下查询语句 SELECT * FROM payment_details_tab;
查询语句返回结果如下:
customer_id | card_string -------------+--------------------- 4001 | 2345-2345-2345-2345 (1 row)
ENABLE_POLICY
通过重新启用policy,使得policy对其他用户生效。
执行如下语句,重新启用测试表格payment_details_tab上的策略。
CALL DBMS_REDACT.enable_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001' );
执行如下语句,切换至测试用户redact_user,并查询表格。
---切换连接数据库用户 \c - redact_user ---执行如下查询语句 SELECT * FROM payment_details_tab;
查询语句返回结果如下:
customer_id | card_string -------------+--------------------- 0 | ****-****-****-2345 (1 row)
DROP_POLICY
通过DROP_POLICY,移除表上的脱敏策略。
执行如下语句,删除测试表格payment_details_tab上的策略。
CALL DBMS_REDACT.drop_policy( object_schema => 'public', object_name => 'payment_details_tab', policy_name => 'redactPolicy_001' );
执行如下语句,切换至测试用户redact_user,并查询表格。
---切换连接数据库用户 \c - redact_user ---执行如下查询语句 SELECT * FROM payment_details_tab;
查询语句返回结果如下:
customer_id | card_string -------------+--------------------- 4001 | 2345-2345-2345-2345 (1 row)
UPDATE_FULL_REDACTION_VALUES
通过变更某一类型的脱敏值,来替换将要混淆的数据。例如,将混淆数据由0变为9999999。
以下操作需要使用超级用户执行,如您有相应场景,请联系我们处理。
执行如下语句,变更测试表格payment_details_tab上的脱敏值,用于替换将要混淆的数据。
CALL DBMS_REDACT.update_full_redaction_values ( number_val => 9999999, char_val => 'Z', varchar_val => 'V', datecol_val => to_date('17/10/2023', 'DD/MM/YYYY'), ts_val => to_timestamp('17/10/2023 11:12:13', 'DD/MM/YYYY HH24:MI:SS'), tswtz_val => NULL, blob_val => 'NEW REDACTED VALUE', clob_val => 'NEW REDACTED VALUE' );
执行如下语句,切换至测试用户redact_user,并查询表格。
---切换连接数据库用户 \c - redact_user ---执行如下查询语句 SELECT * FROM payment_details_tab;
查询语句返回结果如下:
customer_id | card_string -------------+--------------------- 9999999 | 2345-2345-2345-2345 (1 row)