动态脱敏
功能简介
动态脱敏指的是当应用程序发起查询请求访问数据库时,数据库在将结果返回给客户端的过程中,对敏感数据进行脱敏处理的一种安全手段。TaurusDB动态脱敏功能通过添加脱敏规则实现指定库、表、列的数据进行脱敏。
工作原理
使用root账户配置脱敏规则后,数据库会将脱敏规则持久化保存。当应用程序执行查询时,数据库会首先判断查询条件是否符合规则。如果符合,则会对返回的数据结果进行脱敏处理,最终将脱敏后的数据发送给客户端。
如图所示,配置的脱敏规则为:
- 仅当使用user1账号连接数据库做查询操作时生效。
- 仅对查询结果中db1并且t1表中的name和age字段进行脱敏。
除了脱敏规则表中配置的列外,返回原始数据。
如上图所示,字符串类型name脱敏成******,整数类型INT脱敏成随机正整数。不同数据类型的脱敏策略不同,详见表1。
|
数据类型 |
脱敏处理说明 |
|---|---|
|
整数型(TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、BOOLEAN) |
脱敏为正整数。 |
|
小数型(DECIMAL、FLOAT、DOUBLE) |
|
|
时间型(YEAR) |
|
|
时间型(DATE、TIME、DATETIME、TIMESTAMP) |
DATE脱敏之后的范围:[1000:01:01,9999:12:31.499999] TIME脱敏之后的范围:[00:00:00,838:59:59.499999] DATETIME、TIMESTAMP取值范围:[1971:01:01 00:00:00, 2037:12:31 23:59:59.49999] |
|
除上述类型之外的类型 |
脱敏为:****** |
性能影响
开启动态脱敏功能,并且配置全字段脱敏规则(add_mask_rule('', '', '', '')),在性能白皮书只读性能测试场景下,配置128条脱敏规则,数据库性能损耗在10%左右。
脱敏规则约束限制
- 当前仅支持对SELECT语句数据脱敏。
- 脱敏规则对系统库不生效。系统库包括:mysql、information_schema、performance_schema、sys。
- 单个数据库名、表名、列名、用户名首尾的空格和特殊空白字符(如'\t'、'\r'、'\n')在脱敏后会被忽略。
- 单个数据库名、表名、列名长度不超过64 bytes,单个用户名长度不超过32 bytes。超过此限制添加脱敏规则时将会失败。
- 脱敏规则中的管理员用户列表(rds_dynamic_masking_super_users)长度不超过4000 bytes。
- 只有root用户可以执行添加、删除、启用、禁用、更新脱敏规则操作。
- 所有用户均可执行查询脱敏规则操作。
动态脱敏参数
在管理控制台的参数修改页面,通过设置表2中的参数,可以开启动态脱敏特性和管理脱敏规则。
|
参数名称 |
级别 |
描述 |
|---|---|---|
|
rds_dynamic_masking_enabled |
Global |
动态脱敏特性开关。 默认值为OFF。 |
|
rds_dynamic_masking_super_users |
Global |
支持配置多个管理员用户,多个管理员用户之间使用英文逗号分隔。脱敏规则对管理员用户不生效。 默认值为空字符串。 示例:'user1,user2' |
|
rds_masking_paramter_max_count |
Global |
数据库名、表名、列名、用户名最大可配置个数。 默认值为100,即一条规则中最多可配置100个数据库名,100个表名,100个列名和100个用户名。 取值范围[1, 1000]。 |
|
rds_masking_map_size |
Global |
脱敏规则的内存占用上限,单位是MB。 默认为8MB。 设置过高可能引发内存溢出(OOM),请您谨慎操作。 |