ShardingSphere-Proxy 加密规则创建详解:CREATE ENCRYPT RULE 语法指南
【免费下载链接】shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere
什么是加密规则
在分布式数据库环境中,数据安全是至关重要的考虑因素。ShardingSphere-Proxy 提供了强大的数据加密功能,允许用户对敏感字段进行加密存储,同时保持查询能力。加密规则定义了哪些列需要加密、使用什么算法加密以及如何处理加密后的查询。
CREATE ENCRYPT RULE 语法解析
CREATE ENCRYPT RULE 是 ShardingSphere-Proxy 提供的分布式 SQL(DistSQL)语法,用于创建数据加密规则。其基本语法结构如下:
CREATE ENCRYPT RULE [IF NOT EXISTS] 规则名称 (
COLUMNS(
(NAME=原列名, CIPHER=密文列名 [, ASSISTED_QUERY=辅助查询列名]
[, LIKE_QUERY=模糊查询列名], ENCRYPT_ALGORITHM(加密算法定义)
[, ASSISTED_QUERY_ALGORITHM(辅助查询算法定义)]
[, LIKE_QUERY_ALGORITHM(模糊查询算法定义)])
)
)
核心概念解析
-
列类型定义:
NAME:指定需要加密的原始列名CIPHER:指定存储加密数据的列名ASSISTED_QUERY(可选):辅助查询列,用于等值查询加速LIKE_QUERY(可选):模糊查询列,支持LIKE操作
-
算法定义:
ENCRYPT_ALGORITHM:主加密算法,用于数据存储加密ASSISTED_QUERY_ALGORITHM:辅助查询算法LIKE_QUERY_ALGORITHM:模糊查询算法
-
算法类型: 支持多种内置算法如 AES、MD5 等,每种算法可以配置特定属性
使用场景与最佳实践
基本加密场景
假设我们需要对用户表的手机号进行加密存储:
CREATE ENCRYPT RULE user_encrypt (
COLUMNS(
(NAME=phone, CIPHER=phone_cipher,
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='my-secret-key-123')))
)
)
)
支持多种查询的加密场景
对于需要支持等值查询和模糊查询的字段:
CREATE ENCRYPT RULE customer_encrypt (
COLUMNS(
(NAME=email, CIPHER=email_cipher,
ASSISTED_QUERY=email_assisted, LIKE_QUERY=email_like,
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='email-key-456'))),
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5')),
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE'))
)
)
)
避免重复创建
使用 IF NOT EXISTS 避免规则已存在时报错:
CREATE ENCRYPT RULE IF NOT EXISTS payment_encrypt (
COLUMNS(
(NAME=card_number, CIPHER=card_cipher,
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='card-789')))
)
)
)
算法选择建议
-
主加密算法:
- 对于高安全性需求:使用 AES 等强加密算法
- 配置示例:
TYPE(NAME='AES',PROPERTIES('aes-key-value'='your-key'))
-
辅助查询算法:
- 用于等值查询加速:MD5、SHA等哈希算法
- 配置示例:
TYPE(NAME='MD5')
-
模糊查询算法:
- 用于LIKE查询:CHAR_DIGEST_LIKE等算法
- 配置示例:
TYPE(NAME='CHAR_DIGEST_LIKE')
注意事项
- 加密规则一旦创建,修改需要先删除原有规则
- 算法密钥需要妥善保管,建议通过配置中心管理
- 辅助查询列会降低加密强度,应根据实际需求谨慎使用
- 加密操作会增加一定的性能开销,需在安全性和性能间取得平衡
实际应用示例
假设电商系统需要对用户敏感信息加密:
CREATE ENCRYPT RULE ecommerce_encrypt (
COLUMNS(
(NAME=user_name, CIPHER=user_name_cipher,
LIKE_QUERY=user_name_like,
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='user-name-key'))),
LIKE_QUERY_ALGORITHM(TYPE(NAME='CHAR_DIGEST_LIKE'))
),
(NAME=id_card, CIPHER=id_card_cipher,
ASSISTED_QUERY=id_card_assisted,
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='id-card-key'))),
ASSISTED_QUERY_ALGORITHM(TYPE(NAME='MD5')))
),
(NAME=payment_password, CIPHER=payment_password_cipher,
ENCRYPT_ALGORITHM(TYPE(NAME='AES',PROPERTIES('aes-key-value'='payment-pwd-key'))))
)
)
)
此配置实现了:
- 用户名支持模糊查询
- 身份证号支持等值查询
- 支付密码完全加密,不支持查询
通过合理配置加密规则,可以在保证数据安全的同时,满足业务系统的各种查询需求。
【免费下载链接】shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



