openGauss 动态数据脱敏机制 特性描述

61 阅读3分钟

特性描述

动态数据脱敏机制基于资源标签进行脱敏策略的定制化,可根据实际场景选择特定的脱敏方式,也可以针对某些特定用户制定脱敏策略。一个完整的脱敏策略创建的SQL语法如下所示:

CREATE RESOURCE LABEL label_for_creditcard ADD COLUMN(user1.table1.creditcard);
CREATE RESOURCE LABEL label_for_name ADD COLUMN(user1.table1.name);
CREATE MASKING POLICY msk_creditcard creditcardmasking ON LABEL(label_for_creditcard);
CREATE MASKING POLICY msk_name randommasking ON LABEL(label_for_name) FILTER ON IP(local), ROLES(dev);

其中,label_for_creditcard和msk_name为本轮计划脱敏的资源标签,分别包含了两个列对象;creditcardmasking、randommasking为预置的脱敏函数;msk_creditcard定义了所有用户对label_for_creditcard标签所包含的资源访问时做creditcardmasking的脱敏策略,不区分访问源;msk_name定义了本地用户dev对label_for_name标签所包含的资源访问时做randommasking的脱敏策略;当不指定FILTER对象时则表示对所有用户生效,否则仅对标识场景的用户生效。

当前,预置的脱敏函数包括:

脱敏函数名示例
creditcardmasking'4880-9898-4545-2525' 将会被脱敏为 'xxxx-xxxx-xxxx-2525',该函数仅对后4位之前的数字进行脱敏
basicemailmasking'abcd@gmail.com' 将会被脱敏为'xxxx@gmail.com', 对出现第一个'@'之前的文本进行脱敏
fullemailmasking'abcd@gmail.com' 将会被脱敏为 'xxxx@xxxxx.com',对出现最后一个'.'之前的文本(除'@'符外)进行脱敏
alldigitsmasking'alex123alex' 将会被脱敏为 'alex000alex', 仅对文本中的数字进行脱敏
shufflemasking'hello word' 将会被随机打乱顺序脱敏为 'hlwoeor dl', 该函数通过字符乱序排列的方式实现,属于弱脱敏函数,语义较强的字符串不建议使用该函数脱敏。
randommasking'hello word' 将会被脱敏为 'ad5f5ghdf5',将文本按字符随机脱敏
regexpmasking需要用户顺序输入四个参数,reg为被替换的字符串,replace_text为替换后的字符串,pos为目标字符串开始替换的初始位置,为整数类型,reg_len为替换长度,为整数类型。reg、replace_text可以用正则表达,pos如果不指定则默认为0,reg_len如果不指定则默认为-1,即pos后所有字符串。如果用户输入参数与参数类型不一致,则会使用maskall方式脱敏。```
CREATE MASKING POLICY msk_creditcard regexpmasking('[\d+]', 'x', 5, 9 ) ON LABEL(label_for_creditcard);
| []()[]()maskall           | []()[]()'4880-9898-4545-2525' 将会被脱敏为 'xxxxxxxxxxxxxxxxxxx'                                                                                                                                                                                                                                                                                                                        |

每个脱敏函数规格如下:

[]()

| []()[]()脱敏函数名             | []()[]()支持的数据类型                                                                                                                                                                                    |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| []()[]()creditcardmasking | []()[]()BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对信用卡格式的文本类数据)                                                                                                                                          |
| []()[]()basicemailmasking | []()[]()BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对email格式的文本类型数据)                                                                                                                                       |
| []()[]()fullemailmasking  | []()[]()BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对email格式的文本类型数据)                                                                                                                                       |
| []()[]()alldigitsmasking  | []()[]()BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对包含数字的文本类型数据)                                                                                                                                          |
| []()[]()shufflemasking    | []()[]()BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对文本类型数据)                                                                                                                                               |
| []()[]()randommasking     | []()[]()BPCHAR, VARCHAR, NVARCHAR, TEXT(注:仅针对文本类型数据)                                                                                                                                               |
| []()[]()maskall           | []()[]()BOOL, RELTIME, TIME, TIMETZ, INTERVAL, TIMESTAMP, TIMESTAMPTZ, SMALLDATETIME, ABSTIME,[]()[]()TEXT, BPCHAR, VARCHAR, NVARCHAR2, NAME, INT8, INT4, INT2, INT1, NUMRIC, FLOAT4, FLOAT8, CASH |

对于不支持的数据类型,默认使用maskall函数进行数据脱敏,若数据类型不属于maskall支持的数据类型则全部使用数字0进行脱敏,如果脱敏列涉及隐式转换,则结果以隐式转换后的数据类型为基础进行脱敏。另外需要说明的是,如果脱敏策略应用到数据列并生效,此时对该列数据的操作将以脱敏后的结果为基础而进行。

动态数据脱敏适用于和实际业务紧密相关的场景,根据业务需要为用户提供合理的脱敏查询接口,以避免通过撞库而获取原始数据。

详情查看:https://opengauss.org
详情查看:https://docs-opengauss.osinfra.cn