openGauss 数据动态脱敏
常见脱敏路线
结果集解析: 不改写发给数据库的语句,需要提前获悉数据表结构,待数据库返回结果后再根据表结构判断集合内哪些数据需要脱敏,并逐条改写结果数据。
语句改写: 将包含敏感字段查询的语句改写,对于查询中涉及的敏感字段(表列)通过外层嵌套函数的方式改写,使得数据库运行查询语句时返回不包含敏感数据的结果集。
openGauss 采用了语句改写的方式实现数据脱敏,无论对于性能还是准确性来说都是较为优秀的脱敏方案。基于语句改写的思想,在查询解析获取查询树后,根据用户定义的脱敏策略识别查询树目标结点(Node),并对待脱敏结点进行改写构造“脱敏查询树”,再交由数据库内核执行最终返回脱敏后数据,10 万条敏感数据脱敏的性能损耗低于 5%。openGauss 从 1.1.0 版本定义了一套完整的内置安全策略模型,基于该模型用户可以定义资源标签来标识敏感数据,针对不同的资源标签类别和内容可定义相关的安全策略机制。
内置安全策略
- openGauss 中的动态数据脱敏是以内置安全插件(security plugin)的方式与数据库部署在一起的,业务方面无需额外适配就可使用内置安全策略。
- SQL 的解析与脱敏策略匹配交由 openGauss 安全策略模块负责,业务在配置脱敏策略后即可生效。
- 安全策略(Security Policy)模型,是指通过配置一系列安全策略来对用户行为进行识别和保护,提供了包括保护用户敏感数据的能力。
- 资源标签(Resource Label)是 Security Policy 的基础,它的本质是一系列数据库资源集合。通过归类数据库资源,将这些资源统一地投入到各种安全策略中去管理。
- 动态数据脱敏特性便是利用资源标签去识别敏感数据,然后匹配脱敏策略,实现对敏感数据的屏蔽。
脱敏策略内容:
脱敏方式(Masking Function),是指该脱敏策略使用何种方式对目标字段进行脱敏,目前 openGauss 预置了 7 种脱敏方式:creditcardmasking、 basicemailmasking、fullemailmasking、alldigitsmasking、shufflemasking、randommasking、maskall,分别适用于不同的脱敏场景。
脱敏对象(Resource Label),是指脱敏策略生效时作用的对象集合(LABEL),若查询目标字段存在于 LABEL 中,则该字段将会根据脱敏策略进行敏感数据脱敏,openGauss 动态数据脱敏特性支持对仅包含数据列的 LABEL 进行脱敏。
过滤器,指出脱敏策略在何种用户场景下生效,主要涉及 USER(用户名)、APP(用户登录客户端名称)、IP(用户所处的 ip)。当查询用户同时满足 Masking Filter 所指定的阈值时,数据脱敏策略才会生效。
触发脱敏策略
当系统接收到查询命令时,security_plugin 将在解析器中拦截语义分析生成的查询树(Query),首先根据用户登录信息(用户名、客户端、IP)筛选出满足用户场景的脱敏策略。