
Apache ShardingSphere 于本周迎来了 5.3.1 版本的发布!该版本历时一个月,共合并了来自全球的团队和个人累计 448 个 PR。
新版本在功能、性能、测试、文档、示例等方面都进行了大量的优化。
本次 5.3.1 版本带来了如下亮点:
新增脱敏功能「动态脱敏」模式及内置「脱敏算法」
CDC 新功能上线
新亮点介绍
新增脱敏功能动态脱敏模式及内置脱敏算法
随着《网络安全法》的颁布施行,对个人隐私数据的保护已经上升到法律层面。传统的应用系统普遍缺少对个人隐私数据的保护措施。
数据脱敏:可实现在不需要对生产数据库中的数据进行任何改变的情况下,依据用户的角色、职责和其他 IT 定义规则,对生产数据库返回的数据进行专门的屏蔽、加密、隐藏和审计,确保业务用户、外包用户、运维人员、兼职雇员、合作伙伴、数据分析、研发和测试团队及顾问能够恰如其分地访问生产环境的敏感数据。
本次发布提供了「动态脱敏模式」:存储层原始数据保持不变,在计算层完成数据脱敏。脱敏规则的配置遵循 ShardingSphere 一贯的配置方式,在 Proxy 的 conf/ 目录下,修改 config-mask.yaml 文件。脱敏功能可以和加密、分片等功能同时使用。
用户首先需要在 dataSources 中指定存储单元,然后在 - !MASK 下的 tables 中配置脱敏规则。YAML 配置示例:
databaseName: mask_db
dataSources:
ds_0:
url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
username: root
password: root
#...
rules:
# 脱敏规则
- !MASK
tables:
t_user:
columns:
password:
maskAlgorithm: md5_mask
email:
maskAlgorithm: mask_before_special_chars_mask
telephone:
maskAlgorithm: keep_first_n_last_m_mask
maskAlgorithms:
md5_mask:
type: MD5
mask_before_special_chars_mask:
type: MASK_BEFORE_SPECIAL_CHARS
props:
special-chars: '@'
replace-char: '*'
keep_first_n_last_m_mask:
type: KEEP_FIRST_N_LAST_M
props:
first-n: 3
last-m: 4
replace-char: '*'
# 分片规则
- !SHARDING
#...在该配置中,t_user 表的多个字段都配置了脱敏。其中密码进行 MD5 脱敏、邮件地址对用户名进行脱敏、手机号对中间 4 位进行脱敏。启动 Proxy 之后,创建 t_user 表,初始化数据之后查询到的是已脱敏的数据。测试结果示例:
mysql> INSERT INTO t_user(user_id, user_name, password, email, telephone, creation_date) values
-> (1, 'zhangsan', '111111', 'zhangsan@gmail.com', '12345678900', '2017-08-08'),
-> (2, 'lisi', '222222', 'lisi@gmail.com', '12345678901', '2017-08-08'),
-> (3, 'wangwu', '333333', 'wangwu@gmail.com', '12345678902', '2017-08-08');
Query OK, 3 rows affected (0.06 sec)
mysql> SELECT * FROM t_user;
+---------+-----------+----------------------------------+--------------------+-------------+---------------+
| user_id | user_name | password | email | telephone | creation_date |
+---------+-----------+----------------------------------+--------------------+-------------+---------------+
| 2 | lisi | e3ceb5881a0a1fdaad01296d7554868d | ****@gmail.com | 123****8901 | 2017-08-08 |
| 1 | zhangsan | 96e79218965eb72c92a549dd5a330112 | ********@gmail.com | 123****8900 | 2017-08-08 |
| 3 | wangwu | 1a100d2c0dab19c4430e7d73762b3423 | ******@gmail.com | 123****8902 | 2017-08-08 |
+---------+-----------+----------------------------------+--------------------+-------------+---------------+
3 rows in set (0.02 sec)目前支持的脱敏算法:
脱敏算法名称 | 说明 |
MD5 | 基于 MD5 的数据脱敏算法 |
KEEP_FIRST_N_LAST_M | 保留前 n 后 m 数据脱敏算法 |
KEEP_FROM_X_TO_Y | 保留自 x 至 y 数据脱敏算法 |
MASK_FIRST_N_LAST_M | 遮盖前 n 后 m 数据脱敏算法 |
MASK_FROM_X_TO_Y | 遮盖自 x 至 y 数据脱敏算法 |
MASK_BEFORE_SPECIAL_CHARS | 特殊字符前遮盖数据脱敏算法 |
MASK_AFTER_SPECIAL_CHARS | 特殊字符后遮盖数据脱敏算法 |
PERSONAL_IDENTITY_NUMBER_RANDOM_REPLACE | 身份证号随机替换数据脱敏算法 |
MILITARY_IDENTITY_NUMBER_RANDOM_REPLACE | 军官证随机替换数据脱敏算法 |
TELEPHONE_RANDOM_REPLACE | ⼿机号随机替换数据脱敏算法 |
💡 还有部分「新的脱敏算法」正在开发中:
💡 https://github.com/apache/shardingsphere/issues/22759
脱敏功能除了支持 YAML 静态配置,还支持 DistSQL 动态配置,这 2 种方式可以混合使用。在 YAML 配置可用的情况下:先查询当前脱敏规则、删除脱敏规则,再查询 t_user 表。由于脱敏不再生效,展示的是明文数据。
mysql> SHOW MASK RULES;
+--------+-----------+---------------------------+-----------------------------------+
| table | column | algorithm_type | algorithm_props |
+--------+-----------+---------------------------+-----------------------------------+
| t_user | address | MD5 | |
| t_user | email | MASK_BEFORE_SPECIAL_CHARS | special-chars=@,replace-char=* |
| t_user | telephone | KEEP_FIRST_N_LAST_M | first-n=3,last-m=4,replace-char=* |
+--------+-----------+---------------------------+-----------------------------------+
3 rows in set (0.01 sec)
mysql> DROP MASK RULE t_user;
Query OK, 0 rows affected (0.02 sec)
mysql> SHOW MASK RULES;
Empty set (0.01 sec)
mysql> SELECT * FROM t_user;
+---------+-----------+----------+--------------------+-------------+---------------+
| user_id | user_name | password | email | telephone | creation_date |
+---------+-----------+----------+--------------------+-------------+---------------+
| 2 | lisi | 222222 | lisi@gmail.com | 12345678901 | 2017-08-08 |
| 1 | zhangsan | 111111 | zhangsan@gmail.com | 12345678900 | 2017-08-08 |
| 3 | wangwu | 333333 | wangwu@gmail.com | 12345678902 | 2017-08-08 |
+---------+-----------+----------+--------------------+-------------+---------------+
3 rows in set (0.03 sec)当前 t_user 表已经没有脱敏规则,通过 DistSQL 动态创建脱敏规则,查询到的脱敏规则和通过 YAML 配置完全一致,从 t_user 表查询到的数据已经脱敏。
mysql> CREATE MASK RULE t_user (
-> COLUMNS(
-> (NAME=address,TYPE(NAME='MD5')),
-> (NAME=email,TYPE(NAME='MASK_BEFORE_SPECIAL_CHARS', PROPERTIES("special-chars"="@", "replace-char"="*"))),
-> (NAME=telephone,TYPE(NAME='KEEP_FIRST_N_LAST_M', PROPERTIES("first-n"=3, "last-m"=4, "replace-char"="*")))
-> ));
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW MASK RULES;
+--------+-----------+---------------------------+-----------------------------------+
| table | column | algorithm_type | algorithm_props |
+--------+-----------+---------------------------+-----------------------------------+
| t_user | address | MD5 | |
| t_user | email | MASK_BEFORE_SPECIAL_CHARS | special-chars=@,replace-char=* |
| t_user | telephone | KEEP_FIRST_N_LAST_M | first-n=3,last-m=4,replace-char=* |
+--------+-----------+---------------------------+-----------------------------------+
3 rows in set (0.01 sec)
mysql> SELECT * FROM t_user;
+---------+-----------+----------+--------------------+-------------+---------------+
| user_id | user_name | password | email | telephone | creation_date |
+---------+-----------+----------+--------------------+-------------+---------------+
| 2 | lisi | 222222 | ****@gmail.com | 123****8901 | 2017-08-08 |
| 1 | zhangsan | 111111 | ********@gmail.com | 123****8900 | 2017-08-08 |
| 3 | wangwu | 333333 | ******@gmail.com | 123****8902 | 2017-08-08 |
+---------+-----------+----------+--------------------+-------------+---------------+
3 rows in set (0.02 sec)新亮点介绍CDC 新功能上线
面向 AP 场景的数据查询
CDC 即 Change Data Capture(变更数据捕获),是数据库的常见功能,大部分关系型数据库也都提供了 CDC 功能。比如:MySQL、PostgreSQL、openGauss 等。变更包括记录的增删改,也可能是结构的变化。CDC 系统捕获到变更数据之后,分发给订阅变更数据的下游,再写入其它系统,比如:OLTP、OLAP 或者 MQ 系统。CDC 可用于数据同步,也可用于 ETL。
CDC 功能基于 CS 模式实现,包括:CDC 服务端、CDC 客户端、CDC 协议。CDC 服务端内嵌于 Proxy,默认不开启。开启之后会打开新的端口提供 CDC 服务。相关配置位于server.yaml,配置示例:
cdc:
enabled: false
port: 33071CDC 服务端从存储层获取变更数据。由于数据可能存在分片,所以需要聚合来自不同分片的变更数据,并尽可能保证数据的全局有序。数据有序包括 2 个方面:
同一条记录的变更绝对有序,保证数据正确性。
不同记录之间的变更按照事务提交顺序排序。
目前已基本支持存储层为 openGauss 的场景,MySQL 和 PostgreSQL 等将于后续支持。CDC 服务端采用推模型推送数据给 CDC 客户端。CDC 客户端通过 TCP 协议访问 CDC 服务端,登录并订阅数据变更,接收到推送之后反序列化数据,然后写入目标端。
ShardingSphere 提供了 cdc-client 独立模块,发布后会提交到 Maven 仓库。该模块封装了 TCP 请求、请求响应序列化反序列化、RDBMS 目标端数据写入等通用代码,便于用户实现完整的 CDC 客户端。
CDC 协议采用统一的二进制协议,基于 Protocol Buffers。具有较高的数据压缩率和较好的序列化反序列化性能。兼容性好,方便基于各种编程语言的系统之间集成。当存储层为 Oracle 等商业数据库,更为方便地支持 CDC 功能。
开启 CDC 功能之后,将 ShardingSphere 数据和目标端系统打通大致有 3 种方式:
扩展 CDC 客户端,定制少量代码,且将数据写入「目标端系统」。
为目标端系统实现数据导入插件。
为第三方 ETL 框架实现插件。
目前已支持方式一(第一点),CDC 功能正在迭代优化中,欢迎大家提出宝贵建议!
更新日志新特性
新增脱敏功能「动态脱敏」模式及内置「脱敏算法」
CDC 新功能上线
更新日志优化
集群模式避免内存元数据二次刷新
SHOW COMPUTE NODES 支持显示各实例的版本号
系统库增加集群信息表
单机模式持久化元数据支持 MySQL
支持字符串截取的 SQL HINT 方式
恢复hint路由到指定库功能
单字符摘要 LIKE 算法支持 LIKE _ 通配符
支持 SQL Federation SELECT NULLS LAST/FIRST 语句
重构 Encrypt 集成测试并增加更多测试 CASE
为 MD5MaskAlgorithm, MD5EncryptAlgorithm 增加 salt 参数
重构 ShardingConditionEngine 以支持 SPI 配置
DistSQL:CREATE ENCRYPT RULE 时支持定义列级别的 QUERY_WITH_CIPHER_COLUMN 属性
DistSQL:CREATE SHARDING TABLE RULE 增加策略类型匹配校验
更新日志问题修复
修复 ShardingSphere 连接 k8s 中 ZooKeeper 集群报错问题
修复集群模式使用 Consul 启动报错问题
删除数据库发现规则停止数据库探活任务
修复完美 sharding 场景下 SQL 决断错误结果
修复 SQL Federation PostgreSQL 和 openGuass 方言集合运算 UNION, INTERSECT, EXCEPT 优先级问题
修复 CREATE VIEW 语句包含集合运算出现的 out of range 异常
更新Atomikos资源注册长度不超过45限制文档/前置校验
修复事务对spring requires_new 支持
修复 PostgreSQL/openGauss 数据库 char 类型字段,配置 AES 加密算法时解密异常
修复加密功能子查询包含别名时 * 号展开异常
修复集群模式元数据 unsigned 属性不正确的问题
修复 PostgreSQL/openGauss select fetch 解析问题以支持 Federation 执行引擎
修复 MySQL Proxy 的异常处理逻辑可导致客户端错误的问题
修复 PostgreSQL Proxy 操作复合类型报错的问题
修复 MySQL Binary 协议查询无符号数列定义 flag 不正确的问题
修复:通过 Proxy 查询 PG 元数据且结果集为空时,label 丢失的问题
社区建设贡献者「荣誉榜」

此次 Apache ShardingSphere 5.3.1 版本的发布,共有 28 位 Contributor 提交了 448 个 PR,感谢社区伙伴们的大力支持!ShardingSphere 社区欢迎各路「技术大牛、开发者、使用者、学生党」参与版本迭代 & 社区共建中来。期待与你一起共探开发乐趣!
相关链接
🔗 下载链接:
https://shardingsphere.apache.org/document/current/cn/downloads/
🔗 更新日志:
https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
🔗 项目地址:
https://shardingsphere.apache.org/
🔗 Cloud 子项目地址:
https://github.com/apache/shardingsphere-on-cloud

1万+

被折叠的 条评论
为什么被折叠?



