以下案例演示了一个数据动态脱敏策略创建的基本过程。
1.数据准备
确认内置安全策略总开关是否开启。
准备两张包含敏感字段(creditcard、customername)的表。
2.策略配置
策略管理员(拥有poladmin权限)登录数据库,将两张数据表的敏感字段分别添加到资源标签“creditcard_label”、“customer_label”中去管理。
策略管理员创建两个脱敏策略,其作用如下:
- 脱敏策略mask_card_pol:只有当用户“user1”在‘10.11.12.13’ip上使用gsql访问表时,标签creditcard_label中的列将按照‘creditcardmasking’方式脱敏。
- 脱敏策略mask_name_pol:默认对于所有查询用户,标签customer_label中的列将按照‘MASKALL’的方式脱敏。
2.2.2触发脱敏策略
当系统接收到查询命令时,security_plugin将在解析器中拦截语义分析生成的查询树(Query),首先根据用户登录信息(用户名、客户端、IP)筛选出满足用户场景的脱敏策略。由于脱敏策略是基于(仅包含表列的)资源标签配置的,因此需要判断查询树的目标节点是否属于某个资源标签,然后将识别到的资源标签与脱敏策略相匹配,根据策略内容将查询树目标节点改写,最终将查询树返还给解析器。
security_plugin模块由于内置查询树脱敏方式,数据访问者不会感知内置安全策略重写查询树的过程,如同执行普通查询一样去访问数据,同时保护数据隐私。
图2:openGauss动态数据脱敏架构
基于配置脱敏策略小节举出的案例,我们可以通过查询数据表来触发脱敏策略。
触发脱敏策略
用户user1在满足mask_card_pol策略的情况下使用gsql登录数据查询敏感数据,系统将返回脱敏后的数据结果。而用户user2不满足该条策略,因此该用户查询的数据未做脱敏处理。
而无论对于user1还是user2用户,他们查询order表时都会触发脱敏策略mask_name_pol,因此customername字段将会被脱敏处理。