ShardingSphere-Proxy 加密规则创建详解:CREATE ENCRYPT RULE 语法指南

ShardingSphere-Proxy 加密规则创建详解:CREATE ENCRYPT RULE 语法指南

【免费下载链接】shardingsphere 【免费下载链接】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(模糊查询算法定义)])
  )
)

核心概念解析

  1. 列类型定义

    • NAME:指定需要加密的原始列名
    • CIPHER:指定存储加密数据的列名
    • ASSISTED_QUERY(可选):辅助查询列,用于等值查询加速
    • LIKE_QUERY(可选):模糊查询列,支持LIKE操作
  2. 算法定义

    • ENCRYPT_ALGORITHM:主加密算法,用于数据存储加密
    • ASSISTED_QUERY_ALGORITHM:辅助查询算法
    • LIKE_QUERY_ALGORITHM:模糊查询算法
  3. 算法类型: 支持多种内置算法如 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')))
    )
  )
)

算法选择建议

  1. 主加密算法

    • 对于高安全性需求:使用 AES 等强加密算法
    • 配置示例:TYPE(NAME='AES',PROPERTIES('aes-key-value'='your-key'))
  2. 辅助查询算法

    • 用于等值查询加速:MD5、SHA等哈希算法
    • 配置示例:TYPE(NAME='MD5')
  3. 模糊查询算法

    • 用于LIKE查询:CHAR_DIGEST_LIKE等算法
    • 配置示例:TYPE(NAME='CHAR_DIGEST_LIKE')

注意事项

  1. 加密规则一旦创建,修改需要先删除原有规则
  2. 算法密钥需要妥善保管,建议通过配置中心管理
  3. 辅助查询列会降低加密强度,应根据实际需求谨慎使用
  4. 加密操作会增加一定的性能开销,需在安全性和性能间取得平衡

实际应用示例

假设电商系统需要对用户敏感信息加密:

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 【免费下载链接】shardingsphere 项目地址: https://gitcode.com/gh_mirrors/shard/shardingsphere

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值