【华为云MySQL技术专栏】RDS for MySQL 动态脱敏特性解读
1、背景介绍
随着数字化转型加速,数据成为企业核心资产,数据库承载了大量的敏感信息,如个人隐私数据、金融交易信息、商业机密数据等。日益严格的数据保护法规对数据安全提供了明确的要求,如GDPR、CCPR、个人信息保护法等。RDS for MySQL提供了动态脱敏特性,在不修改表数据的前提下,实时保护敏感信息,确保数据安全。应用场景包含但不限于:
-
开发测试环境:为开发人员提供脱敏后的生产数据
-
数据分析:允许分析师使用数据的同时保护敏感字段
-
第三方共享:与合作伙伴共享必要数据时去除敏感信息
-
运维审计:防止运维人员直接接触明文敏感数据
本文介绍了RDS for MySQL 的动态脱敏特性,包括使用及实现原理。
2、功能介绍
2.1 功能描述
动态脱敏是数据库在将数据发送给客户端时,对数据进行脱敏的一种安全技术手段。RDS for MySQL的动态脱敏功能支持通过添加脱敏规则实现指定库、表、列、用户数据的脱敏。
图1 动态脱敏效果图
说明:开启动态脱敏功能,并且配置全字段脱敏规则(add_mask_rule('', '', '', '')),使用Sysbench工具压测,导入128张表,每张表25000行数据,QPS值大约为40万时,数据库性能损耗在5%以内。
QPS:Query Per Second,数据库每秒执行的SQL数。
2.2 接口介绍
动态脱敏规则的增删改查接口:
3、约束限制
1) 仅支持对SELECT语句数据动态脱敏。
2) 脱敏规则对系统库不生效。系统库包括:mysql、information_schema、performance_schema、sys。
3) 单个数据库名、表名、列名、用户名首尾的空格和特殊空白字符(如'\t'、'\r'、'\n')都会被忽略。
4) 单个数据库名、表名、列名长度不超过64字符,单个用户名长度不超过32字符。
4、参数介绍
5、原理介绍
RDS for MySQL支持灵活配置多种脱敏规则,在处理SELECT语句时,先遍历所有脱敏规则,查看是否有匹配项,若匹配,则会进行应用,并在返回给客户端时,对匹配到脱敏规则的列进行脱敏处理。
5.1 动态脱敏规则接口
对脱敏规则提供了增删改查接口,接口调用时序图如下:
图2 接口使用时序图
脱敏规则增删改查接口处理流程如下:
1)只有root用户才能执行增删改接口,查询接口没有用户限制;
2)root用户连接到数据库主节点,执行增删改接口,数据库先校验参数,参数检验通过之后,更新系统表mysql.mask_rule以及内存中的map,内存中的map保存了限流规则,可快速匹配是否需要限流,更新系统表的时候会写binlog,只读回放binlog会更新只读节点的系统表mysql.mask_rule以及只读节点内存中的map。
3)查询接口可以在所有节点执行,返回的是内存中存储的脱敏规则。内存中的脱敏规则和表mysql.mask_rule中存储的脱敏规则是一致的。
5.2 动态脱敏规则应用
查询语句执行之前,检查SELECT列是否需要脱敏,若需要,则在数据发送到客户端之前进行脱敏处理。动态脱敏规则应用流程图如下:
图3 动态脱敏应用流程图
1)SELECT语句执行之前,循环遍历SELECT语句中每个列的库名、表名、列表以及用户名(连接使用的用户名)是否在动态脱敏规则中有配置。
2)如果在动态脱敏规则中有配置,则标记对应SELECT语句中的列需要脱敏。
3)发送数据给客户端前进行脱敏策略应用。整型类型替换为随机数,字符串类型替换为6个*。如下是对不同的类型的脱敏策略:
6、小结
RDS for MySQL的动态脱敏是一种查询语句在返回给客户端时进行动态脱敏的一种技术,支持对脱敏规则进行灵活配置,满足了客户对于脱敏规则配置的多样化需求。脱敏规则使用map结构体保存,用户可快速按需匹配脱敏规则。对于整型数据类型,使用高效的随机数生成的算法,字符串类型,使用6个*的常量替换。
RDS for MySQL的动态脱敏特性可以做到sysbench标准模型40万QPS下性能损耗在5%以内。
- 点赞
- 收藏
- 关注作者
评论(0)