Apache ShardingSphere 数据加密 YAML 配置详解
数据加密功能概述
Apache ShardingSphere 提供了强大的数据加密功能,可以在数据库访问层面实现对敏感数据的自动加解密处理。通过这项功能,开发者可以在不修改业务代码的情况下,实现对数据库中敏感信息的保护,同时保持业务查询的可用性。
YAML 配置的优势
相比传统的编程式配置,YAML 配置方式具有以下显著优势:
- 可读性强:YAML 格式层次分明,便于快速理解加密规则间的依赖关系
- 配置与代码分离:将加密规则与业务代码解耦,提高可维护性
- 简化开发:自动完成 ShardingSphereDataSource 对象的创建,减少样板代码
核心配置结构解析
数据加密规则的核心配置由两部分组成:表级加密规则定义和加密算法定义。
表级加密规则
tables:
<table_name>: # 需要加密的表名
columns:
<column_name>: # 需要加密的逻辑列名
cipher: # 密文列配置
name: # 实际存储密文的列名
encryptorName: # 使用的加密算法名称
assistedQuery: # 辅助查询列配置(可选)
name: # 辅助查询列名
encryptorName: # 辅助查询加密算法名称
likeQuery: # LIKE查询列配置(可选)
name: # LIKE查询列名
encryptorName: # LIKE查询加密算法名称
加密算法配置
encryptors:
<encrypt_algorithm_name>: # 加密算法名称
type: # 算法类型
props: # 算法属性
# 具体属性根据算法类型而定
支持的加密算法类型
ShardingSphere 内置了多种加密算法,主要包括:
- 标准加密算法:如 AES、MD5 等
- 专用算法:如 CHAR_DIGEST_LIKE 等专为 LIKE 查询优化的算法
- 自定义算法:支持用户实现自己的加密逻辑
配置示例详解
以下是一个完整的用户表加密配置示例:
dataSources:
unique_ds:
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
driverClassName: com.mysql.jdbc.Driver
jdbcUrl: jdbc:mysql://localhost:3306/demo_ds
username: root
password:
rules:
- !ENCRYPT
tables:
t_user:
columns:
username:
cipher:
name: username
encryptorName: aes_encryptor
assistedQuery:
name: assisted_query_username
encryptorName: assisted_encryptor
likeQuery:
name: like_query_username
encryptorName: like_encryptor
pwd:
cipher:
name: pwd
encryptorName: aes_encryptor
assistedQuery:
name: assisted_query_pwd
encryptorName: assisted_encryptor
encryptors:
aes_encryptor:
type: AES
props:
aes-key-value: 123456abc
digest-algorithm-name: SHA-1
assisted_encryptor:
type: MD5
like_encryptor:
type: CHAR_DIGEST_LIKE
配置说明
-
username 字段:
- 使用 AES 算法加密存储
- 配置了辅助查询列用于精确查询
- 配置了 LIKE 查询列用于模糊查询
-
pwd 字段:
- 使用 AES 算法加密存储
- 配置了辅助查询列用于精确查询
-
加密算法:
- aes_encryptor:AES 加密算法,配置了密钥和摘要算法
- assisted_encryptor:MD5 算法用于辅助查询
- like_encryptor:CHAR_DIGEST_LIKE 算法用于 LIKE 查询
实际应用场景
这种配置方式特别适合以下场景:
- 敏感数据保护:如用户密码、身份证号等
- 合规性要求:满足 GDPR 等数据保护法规
- 透明加密:业务代码无需感知加密过程
最佳实践建议
- 密钥管理:生产环境应将密钥存储在安全的地方,而非配置文件中
- 算法选择:根据安全要求和查询需求选择合适的算法组合
- 性能考量:复杂算法可能影响查询性能,需做好平衡
- 测试验证:上线前充分测试各种查询场景
通过合理配置 ShardingSphere 的数据加密功能,开发者可以轻松实现数据安全保护,同时保持系统的查询能力和业务连续性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考