Apache ShardingSphere 5.4.1 版本发布,数据加密再升级,提供更高级别的数据保护!

Apache ShardingSphere 5.4.1版本发布,加强数据加密规则,禁止密文列DDL,确保数据安全。新增对衍生列格式和长度的限制,兼容更多连接池,包括druid、dbcp和c3p0。此版本还修复了多项问题,提供更好的数据库管理和扩展性。

04a479a5c8ba7d8e99c2585e079cc034.jpeg

概要

ShardingSphere

Apache ShardingSphere 本周迎来了 5.4.1 版本的发布,该版本历时两个多月,累计合并了来自全球团队和个人的 967 个 PR,新版本在功能、性能、测试、文档、示例等方面都进行了大量的优化。本次更新包含了不少能够提升用户体验、解决用户痛点的内容,本文与大家一起快速预览:

  • 加密:加密规则除了明文列、密文列外不与逻辑列重名

  • 加密:Proxy 禁止密文列 DDL

  • 加密:衍生列格式和长度固定 varchar 4000

  • 适配:Proxy 连接池适配(druid、dbcp、c3p0)

5946a8a41a236e370963496a2dcf33d0.jpeg

功能预览

ShardingSphere

01加密规则除了明文列、密文列外不与逻辑列重名

  • 背景说明

当前加密规则中未校验配置中衍生列的字段名称是否与逻辑列同名,本次新增衍生列列名校验,如果与逻辑列重名,则报错提示

  • 技术实现

新增对 加密 Rule 的衍生列校验项,提示信息为:

assisted query column or like query column conflicts with logic column
private void checkColumnNames(final CreateEncryptRuleStatement sqlStatement) {
    for (EncryptRuleSegment each : sqlStatement.getRules()) {
        ShardingSpherePreconditions.checkState(isColumnNameNotConflicts(each),
                () -> new InvalidRuleConfigurationException("encrypt", "assisted query column or like query column conflicts with logic column"));
    }
}


private boolean isColumnNameNotConflicts(final EncryptRuleSegment rule) {
    for (EncryptColumnSegment each : rule.getColumns()) {
        if (null != each.getLikeQuery() && each.getName().equals(each.getLikeQuery().getName())) {
            return false;
        }
        if (null != each.getAssistedQuery() && each.getName().equals(each.getAssistedQuery().getName())) {
            return false;
        }
    }
    return true;
}

02  Proxy 禁止密文列 DDL

  • 背景说明

当前配置加密规则后,未对加密表的 DDL 拦截,如果对加密列/明文列执行 DDL(如:修改字段类型、长度,甚至直接 drop 字段),可能直接影响数据写入、读取,造成故障问题等

本次新增对加密表的 ALTER 语句类型判断,放行 ALTER xxx ADD 语句,拦截 ALTER xxx CHANGE/MODIFY/DROP 语句,拦截提示信息:Unsupported operation 'xxx' for the cipher column"

  • 技术实现

所有对加密表的 Alter 语句都需要通过 EncryptAlterTableTokenGenerator 改写生成实际执行语句,当前逻辑会对 密文列/明文列 生成语句

实现拦截需要在生成 Token 前增加判断,如果对 加密列/明文列 的操作则抛出异常

ShardingSpherePreconditions.checkState(!encryptTable.isEncryptColumn(columnName) && !encryptTable.isPlainColumn(columnName),
        () -> new UnsupportedOperationException("Unsupported operation 'modify' for the cipher column and plain column"));

03  衍生列格式和长度固定 varchar 4000

  • 背景说明

在加密场景下,现有算法生成的密文均为字符串,但用户的逻辑列可能是数字或时间等类型,会导致生成的衍生列数据类型与逻辑列一致,即密文列、辅助查询列、模糊查询列的 data type 可能是 int、datetime 等类型,导致密文无法写入。需要为加密衍生列设置默认的文本类型

  • 技术实现

生成的密文列、辅助查询列、模糊查询列均使用默认数据类型 VARCHAR(4000)

04  Proxy 连接池适配(druid、dbcp、c3p0)

  • 背景说明

当前全局默认使用 Hikari 连接池,用户不能自行选择、更换连接池

a2cc328bf6f4384e1786c5eadc39efaa.png

  • 技术实现

1、ConnectionConfiguration 类新增字段 dataSourceClassName

public final class ConnectionConfiguration {
    
    private final String dataSourceClassName;
    
    private final String url;
    
    private final String username;
    
    private final String password;
}

2、构建 DataSourceProperties 由固定 com.zaxxer.hikari.HikariDataSource 修改为获取 dataSourceClassName

public static DataSourceProperties create(final DataSourceConfiguration dataSourceConfig) {
    return new DataSourceProperties(dataSourceConfig.getConnection().getDataSourceClassName(), createProperties(dataSourceConfig));
}

3、实现连接池的 DataSourcePoolMetaData SPI,当前 Hikari、DBCP、C3P0 已实现

4、实现连接池 DataSourcePoolFieldMetaData、DataSourcePoolPropertiesValidator、DataSourcePoolActiveDetector

2aa8cd4f54da3b73a31c618864f6017a.jpeg

更新日志

ShardingSphere

01  新功能

  1. Proxy 连接池适配(druid、dbcp、c3p0)

  2. Metadata: 单机模式适配新版本元数据

02  功能增强

  1. Mode: 优化 Standalone 模式 JDBC 类型初始化数据重置

  2. Scaling: 隔离分片数据源 Standalone 模式的存储,相互不影响

  3. Scaling: 禁用 system-schema-metadata-enabled 提升性能

  4. JDBC: 把 ShardingSphereDriver 注册为 JDBC java.sql.Driver SPI,便于用户使用

  5. Scaling: SHOW MIGRATION CHECK ALGORITHMS 新增校验算法列

  6. Scaling: SHOW MIGRATION CHECK ALGORITHMS 新增 type_aliases 列

  7. 加密:除了密文列外不能与逻辑列重名,增加加密规则时遇到重名时应报错

  8. 加密:Proxy 禁止密文列 DDL

  9. 加密:衍生列格式和长度固定 varchar 4000

03  问题修复

  1. Scaling: 修复问题:存在相似表名的情况下断点续传可能获取到错误的全量任务进度

  2. Scaling: 修复问题:当首个全量任务完成的时候全量断点续传无法开启(CDC Importer 没有启动)

  3. Single Table: 修复 CREATE/DROP table 修改 Single 规则时未切换版本问题

  4. JDBC: 修复上一版本中 MySQL JDBC 内存泄漏问题

d87cfc00292a580de108aa635ce9a35a.jpeg

相关链接

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

edeb6e55329eebfbad25514eaa3883a2.jpeg

社区贡献

ShardingSphere

此次 Apache ShardingSphere 5.4.1 版本的发布,共有 47 位 Contributor 提交了  967 个 PR,非常感谢社区伙伴们的大力支持,也欢迎越来越多的开发者积极参与 Apache ShardingSphere 社区建设、在纯粹的技术氛围中,提升个人技能、收获自我成长。欢迎更多的开源技术爱好者加入 Apache ShardingSphere  官方交流群,携手全球技术伙伴共同成长,共建社区生态!

787f3c3e715eaf09d9b75f7cfcb3795b.jpeg

如何加入 ShardingSphere 社区成为贡献者?

  1. 社区答疑:积极在社区中进行答疑、分享技术、帮助群内的其他开源爱好者解决问题。

  2. 代码贡献:社区整理了简单且容易上手的任务,非常适合新人做代码贡献。可以查阅新手任务列表:

    https://github.com/apache/shardingsphere/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22%2Cdiscussion+no%3Aassignee

  3. 内容贡献:发布 ShardingSphere 相关的内容,比如安装部署教程、使用经验、案例实践等,形式不限,欢迎扫码投稿给社区助手。

  4. 社区布道:积极参与社区活动、成为社区志愿者、帮助社区宣传、为社区发展提供有效建议等。

  5. 官方文档贡献:发现文档的不足、优化文档,持续更新文档等方式参与社区贡献。通过文档贡献,让开发者熟悉如何提交 PR 和真正参与到社区的建设。

48e64a0744ea9940d46393be01ea1c1b.jpeg

长按识别回复“志愿者”了解更多吧~

关于 Apache ShardingSphere

Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。

点击阅读原文下载体验吧~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值