Flink SQL 的数据脱敏解决方案,支持面向用户级别的数据脱敏访问控制,即特定用户只能访问到脱敏后的数据。此方案是实时领域Flink的解决思路,类似于离线数仓 Hive 中 Ranger Column Masking 方案。
一、基础知识
1.1 数据脱敏
数据脱敏(Data Masking)是一种数据安全技术,用于保护敏感数据,以防止未经授权的访问。该技术通过将敏感数据替换为虚假数据或不可识别的数据来实现。例如可以使用数据脱敏技术将信用卡号码、社会安全号码等敏感信息替换为随机生成的数字或字母,以保护这些信息的隐私和安全。
1.2 业务流程
下面用订单表orders
的两行数据来举例,示例数据如下:
1.2.1 设置脱敏策略
管理员配置用户、表、字段、脱敏条件,例如下面的配置。
1.2.2 用户访问数据
当用户在Flink上查询orders
表的数据时,会在底层结合该用户的脱敏条件重新生成 SQL,即让数据脱敏生效。
当用户 A 和用户 B 在执行下面相同的 SQL 时,会看到不同的结果数据。
SELECT * FROM orders
用户A查看到的结果数据如下,customer_name
字段的数据被全部掩盖掉。
用户 B 查看到的结果数据如下,customer_name
字段的数据只会显示前 4 位,剩下的用 x 代替。
二、Hive 数据脱敏解决方案
在离线数仓工具 Hive 领域,由于发展多年已有 Ranger 来支持字段数据的脱敏控制,详见参考文献[[1]](https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.1.0/authorization-ranger/content/dynamic_resource_based_column_masking_in_hive_with_ranger_policies.html)。
下图是在 Ranger 里配置 Hive 表数据脱敏条件的页面,供参考。
但由于 Flink 实时数仓领域发展相对较短,Ranger 还不支持 Flink SQL,以及依赖 Ranger 的话会导致系统部署和运维过重,因此开始自研实时数仓的数据脱敏解决工具。当然本文中的核心思想也适用于 Ranger 中,可以基于此较快开发出 ranger-flink 插件。
三、Flink SQL 数据脱敏解决方案
3.1 解决方案
3.1.1 Flink SQL 执行流程
可以参考作者文章 [[FlinkSQL字段血缘解决方案及源码]](