#DBMS_DATAMASK

DBMS_DATAMASK提供了数据脱敏接口,用于对单列数据进行脱敏操作。

执行该高级包的用户只能为sys用户或具备SECURITY_ADMIN角色的用户。

存算一体分布式集群部署中无数据脱敏相关功能。

# ADD_RULE

DBMS_DATAMASK.ADD_RULE(
    POL_NAME   IN  VARCHAR,
    OBJ_NAME   IN  VARCHAR,
    USERNAME   IN  VARCHAR,
    FUNDESC    IN  VARCHAR,
    PARAMLIST  IN  VARCHAR);

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列添加策略。
单次只能指定1个列。
USERNAME 策略应用到的用户,只能为CHAR或VARCHAR类型,最长64字节。
仅支持指定为单个用户名、ALL或空串,为空时采用默认值ALL,表示应用到所有用户。
FUNDESC 脱敏策略,只能为CHAR或VARCHAR类型,最长64字节。
取值可选项包括EMAIL_MASK、PARTIAL、DEFAULT或空串,为空时采用默认值DEFAULT,具体的脱敏策略详情如下文所述。
PARAMLIST 选择PARTIAL策略时应用的参数,只能为CHAR或VARCHAR类型,最长4000字节,格式为'n,m',表示保留前n位和后m位。
仅当FUNDESC指定为PARTIAL时可配置该参数,指定为其它策略时该参数只能为空或','(等价于空)。

目前支持的脱敏策略:

  • DEFAULT:默认脱敏策略,各类型数据脱敏结果如下:

    • 数字类型:0(不保证精度)

    • 布尔类型:FALSE

    • 时间类型(除TIME类型外):年月日部分1970-01-01,时分秒部分00:00:00

    • 其他类型:空值

  • PARTIAL:部分脱敏(又称“自定义脱敏”),支持对VARCHAR/CHAR类型数据进行脱敏,其他类型返回空值。

    • 当使用PARTIAL策略且PARAMLIST参数不为空时,有且只能有两个正数参数,若参数为小数则四舍五入为正整数,两个参数之间使用逗号','隔开。其中第一个参数为保留的前n位,第二个参数为保留的后m位,其余位用*进行脱敏。例如参数传入1,1,"test"脱敏为"t**t"。

    • 当使用PARTIAL策略且PARAMLIST参数为空串或指定的保留位数(无论前后)超过字符串长度时,不对数据进行脱敏操作,输出原字符串。

  • EMAIL_MASK:邮件格式字符串专用脱敏,支持对VARCHAR/CHAR类型数据进行脱敏,其他类型返回空值。数据脱敏结果中email地址将仅保留@符号,其他字符全用*替换,例如"123@sics.ac.cn"脱敏为"***@*********"。

示例(HEAP表)

-- 未创建脱敏策略时,数据直接呈现实际值
SELECT employee_no,employee_name,entry_date FROM employees;

EMPLOYEE_NO               EMPLOYEE_NAME             ENTRY_DATE
------------------------- ------------------------- --------------------------------
0101000001                Mask                      2022-06-17 10:45:14
0101000002                John                      2019-09-21 10:45:14
0201010011                Anna                      2024-05-17 10:45:14
0201008003                Jack                      2023-04-13 10:45:14
0201008004                Jim                       2024-08-25 10:45:14

-- 为employees表的employee_name列创建脱敏策略pol1,规则为部分脱敏(前后各保留1位)
SELECT dbms_datamask.add_rule('pol1','employees.employee_name','sales','partial','1,1') pol1 FROM dual;

        POL1
------------
            
-- 为employees表的entry_date列创建脱敏策略pol2,采用默认规则(日期类型替换为1970-01-01 00:00:00)
SELECT dbms_datamask.add_rule('pol2','employees.entry_date','sales','','') pol2 FROM dual;

        POL2
------------

-- 数据查询结果集呈现为脱敏后的内容
SELECT employee_no,employee_name,entry_date FROM employees;

EMPLOYEE_NO               EMPLOYEE_NAME             ENTRY_DATE
------------------------- ------------------------- --------------------------------
0101000001                M**k                      1970-01-01 00:00:00
0101000002                J**n                      1970-01-01 00:00:00
0201010011                A**a                      1970-01-01 00:00:00
0201008003                J**k                      1970-01-01 00:00:00
0201008004                J*m                       1970-01-01 00:00:00

# DEL_RULE

DBMS_DATAMASK.DEL_RULE(
    POL_NAME   IN  VARCHAR);

DBMS_DATAMASK.DEL_RULE用于为单列数据删除脱敏策略。

示例(HEAP表)

SELECT employee_no,employee_name,entry_date FROM employees;

EMPLOYEE_NO               EMPLOYEE_NAME             ENTRY_DATE
------------------------- ------------------------- --------------------------------
0101000001                M**k                      1970-01-01 00:00:00
0101000002                J**n                      1970-01-01 00:00:00
0201010011                A**a                      1970-01-01 00:00:00
0201008003                J**k                      1970-01-01 00:00:00
0201008004                J*m                       1970-01-01 00:00:00

-- 删除脱敏策略pol1
SELECT dbms_datamask.del_rule('pol1') FROM dual;

DBMS_DATAMASK.DEL_RU
--------------------

-- 数据查询结果集中,employee_name列的数据呈现为原始数据
SELECT employee_no,employee_name,entry_date FROM employees;

EMPLOYEE_NO               EMPLOYEE_NAME             ENTRY_DATE
------------------------- ------------------------- --------------------------------
0101000001                Mask                      1970-01-01 00:00:00
0101000002                John                      1970-01-01 00:00:00
0201010011                Anna                      1970-01-01 00:00:00
0201008003                Jack                      1970-01-01 00:00:00
0201008004                Jim                       1970-01-01 00:00:00
pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流