在很多应用场景下,用户需要通过拥有表中某一列的访问权来执行任务,但是又不能获取所做事务之外其他的权限。以快递人员举例,快递人员在递送包裹的时候需要知道收件人的联系方式和姓氏,但是无需知道对应的收件人的全称。在快递收件人信息部分,如果同时定义了收件人的姓名和电话,则暴露了收件人的隐私信息,“有心之人”可以通过此信息进行虚假信息构造或利用该隐私信息进行财产欺诈。因此在很多情况下,所定义的敏感信息是不建议对外展现的。
数据脱敏是解决此类问题的最有效方法之一,通过对敏感数据信息的部分信息或全量信息进行特殊处理可以有效掩盖敏感数据信息的真实部分,从而达到保护数据隐私信息的目的。数据脱敏按照脱敏呈现的时机可以分为数据动态脱敏和数据静态脱敏,其中前者在数据运行时对数据进行特殊处理,后者在数据存储的时候进行特殊处理以防止攻击者通过提取数据文件来直接获取敏感信息。在本文中,将重点介绍数据动态脱敏技术。
数据动态脱敏的安全意义在于:
用户在实际操作的时候无需真实数据只需要使用一个变化后的数据进行操作,可有效规避数据信息的直接暴露。
在不同的国家及地区的法律合规中,如GDPR,约定不同的用户在管理数据的时候具有不同的访问对象权限。
对于表中的同一列数据信息,不同的用户应具有不同的用途。
数据动态脱敏功能在数据库内核实际上表现为数据处理函数。通过函数处理使得数据库中的数据在返回给实际查询用户时数据值发生变更,如用户所有的年龄信息值在返回给客户端时均显示为“0”;又或是字符串数据中的部分字节位变更为其他字符,如信用卡卡号“1234 5678 0910 1112”在返回给客户端时显示为“XXXX XXXX XXXX 1112”。
在openGauss系统中,数据动态脱敏策略的语法定义如下所示:
CREATE MASKING_POLICY policy_name
(
(masking_clause)
[filter_clause]
[ENABLE|DISABLE]
);
其中具体的参数说明如下:
masking_clause语法定义如下:
MASKING_FUNCTION(PARAMETERS) ON (SCOPE(FQDN)) | (LABEL(resource_label_name)) [, …]*;
定义了针对不同数据集合对象所采用的脱敏函数。这里LABEL为数据库安全标签,数据库安全标签实际上定义了一组数据内部的表对象或表中的部分列,用于标记相应数据脱敏策略的范围。
filter_clause语法定义如下:
FILTER ON FILTER_TYPE(filter_value [, …]*) [, …]*;
定义了数据动态脱敏策略所支持的过滤条件。
一个实际的数据动态脱敏案例如下:
CREATE MASKING_POLICY my_masking_policy
creditcardmasking ON LABEL (mask_credcard),
maskall ON LABEL (mask_all)
FILTER ON IP(local), ROLES(dev);
其中,my_mask_polidy为定义的数据动态脱敏策略名字;creditcardmasking以及maskall为定义的masking处理函数,分别用于处理从属于mask_credcard对象集合和mask_all对象集合;mask_credcard和mask_all代表不同的Label对象,这些Label对象名称将作为唯一标识记录在系统表中。FILTER表示当前动态脱敏策略所支持的连接源,连接源指的是实际数据库管理员使用何种用户,从何IP源位置发起,使用何种APP应用来访问当前的数据库。通过使用FILTER可以有效定义系统的访问源信息,并规避不应该访问当前系统的行为。
openGauss在系统内部预定义了七种数据脱敏策略。具体如表11-1所示:
表11-1 数据脱敏策略
| 脱敏策略 | 含义 | 脱敏前数据 | 脱敏后数据 |
| creditcardmasking | 针对信用卡定义类数据的脱敏策略 | 4880-9898-4545-2525 | xxxx-xxxx-xxxx-2525 |
| maskall | 全脱敏策略 | 4880-9898-4545-2525 | xxxxxxxxxxxxxxxxxxx |
| basicemailmasking | 邮件类信息基础脱敏策略:脱敏用户名 | alex@gmail.com | xxxx@gmail.com |
| fullemailmasking | 邮件类信息全脱敏策略 | alex@gmail.com | xxxx@xxxxx.com |
| alldigitsmasking | 数字脱敏策略 | alex123alex | alex000alex |
| shufflemasking | 置换脱敏策略 | hello word | ollehdlrow |
| randommasking | 随机脱敏策略 | hello word | ad5f5ghdf5 |
用户在实际使用时,还可以根据自己的需求自行定义数据脱敏策略。




