#DBMS_DATAMASK
DBMS_DATAMASK提供了数据脱敏接口,用于对单列数据进行脱敏操作。
该高级包仅支持HEAP表。
# ADD_RULE
DBMS_DATAMASK.ADD_RULE(
POL_NAME IN VARCHAR,
OBJ_NAME IN VARCHAR,
USERNAME IN VARCHAR DEFAULT 'ALL',
FUNCDESC IN VARCHAR DEFAULT 'DAFAULT',
PARAMLIS IN VARCHAR DEFAULT 'NULL');
DBMS_DATAMASK.ADD_RULE用于为单列数据添加脱敏策略。
本高级包遵循如下规则:
仅支持在HEAP表的非隐藏列上增加脱敏策略。
不支持对有脱敏策略的列,进行filter运算,否则返回错。
如果对非空列添加使数据返回空的策略,在查询阶段返回错误。
参数 | 描述 |
---|---|
POL_NAME | 策略名,只能为CHAR或VARCHAR类型,最长64字节,不允许为空,大小写敏感,唯一标识一条策略。 |
OBJ_NAME | 添加策略的对象,只能为CHAR或VARCHAR类型,各字段最长64字节,不允许为空,格式为schema.table.column或table.column,后者应用schema为当前用户,指对schema用户下的table表中的column列添加策略。 |
USERNAME | 策略应用到的用户,只能为CHAR或VARCHAR类型,最长64字节,仅支持单个用户或使用默认值ALL对所有用户。 |
FUNCDESC | 脱敏策略,只能为CHAR或VARCHAR类型,最长64字节,仅支持EMAIL_MASK、PARTIAL、DEFAULT。 |
PARAMLIST | 选择PARTIAL策略时应用的参数,只能为CHAR或VARCHAR类型,最长4000字节,格式为'n,m',表示保留前n位和后m位。 |
目前支持的脱敏策略:
DEFAULT
默认脱敏,无需指定,当指定脱敏函数为空时默认指定为默认脱敏,各类型数据脱敏结果如下:
- 字符类型:空值。
- 数字类型:0(不保证精度)。
- 布尔类型:FALSE。
- 时间类型(除TIME类型外):年月日部分1970-01-01,时分秒部分00:00:00。
- 其他类型:空值。
PARTIAL
部分脱敏(自定义脱敏),支持VARCHAR/CHAR,其他类型返回空值。
- 当选择PARTIAL策略时,PARAMLIST参数可以为空,为空则不对数据进行脱敏
- 当选择PARTIAL策略时,且PARAMLIST参数不为空,有且只能有两个正数参数,若参数为小数则四舍五入为正整数,两个参数之间使用','隔开。其中第一个参数为保留的前n位,第二个参数为保留的后n位,其余位用*进行脱敏,例如参数传入(1,1),"test"脱敏为"t**t"。
- 当保留位数无论前后,超过字符串长度,则不对数据进行脱敏操作,输出原字符串。
- 当选择其它策略时,PARAMLIST只能为空或',',','等价于空。
EMAIL_MASK
邮件格式字符串专用脱敏,支持VARCHAR/CHAR,其他类型返回空值。对email地址仅保留@符号,其他字符全替换为*,@符号保留,例如"123@sics.ac.cn"脱敏为"***@*********"。
示例(HEAP表)
SELECT area_no,area_name,DHQ FROM area;
AREA_NO AREA_NAME DHQ
------- ------------------------------------------------------------- ---------------------
01 华东 Shanghai
02 华西 Chengdu
03 华南 Guangzhou
04 华北 Beijing
05 华中 Wuhan
SELECT DBMS_DATAMASK.ADD_RULE('pol1','area.no','','','') FROM dual;
DBMS_DATAMASK.ADD_RU
--------------------
SELECT DBMS_DATAMASK.ADD_RULE('pol2','area.name','','partial','1,1') FROM dual;
DBMS_DATAMASK.ADD_RU
--------------------
SELECT DBMS_DATAMASK.ADD_RULE('pol3','area.DHQ','','email_mask','') FROM dual;
DBMS_DATAMASK.ADD_RU
--------------------
SELECT area_no,area_name,DHQ FROM area;
AREA_NO AREA_NAME DHQ
------- ------------------------------------------------------------- ---------------------
0* ********
0* *******
0* *********
0* *******
0* *****
# DEL_RULE
DBMS_DATAMASK.DEL_RULE(
POL_NAME IN VARCHAR);
DBMS_DATAMASK.DEL_RULE用于为单列数据删除脱敏策略。
示例(HEAP表)
SELECT area_no,area_name,DHQ FROM area;
AREA_NO AREA_NAME DHQ
------- ------------------------------------------------------------- ---------------------
0* ********
0* *******
0* *********
0* *******
0* *****
SELECT DBMS_DATAMASK.DEL_RULE('pol1') FROM dual;
DBMS_DATAMASK.DEL_RU
--------------------
SELECT DBMS_DATAMASK.DEL_RULE('pol2') FROM dual;
DBMS_DATAMASK.DEL_RU
--------------------
SELECT DBMS_DATAMASK.DEL_RULE('pol3') FROM dual;
DBMS_DATAMASK.DEL_RU
--------------------
SELECT area_no,area_name,DHQ FROM area;
AREA_NO AREA_NAME DHQ
------- ------------------------------------------------------------- ---------------------
01 华东 Shanghai
02 华西 Chengdu
03 华南 Guangzhou
04 华北 Beijing
05 华中 Wuhan