数据加密

背景信息

数据加密 YAML 配置方式具有非凡的可读性,通过 YAML 格式,能够快速地理解加密规则之间的依赖关系,ShardingSphere 会根据 YAML 配置,自动完成 ShardingSphereDataSource 对象的创建,减少用户不必要的编码工作。

参数解释

  1. rules:
  2. - !ENCRYPT
  3. tables:
  4. <table_name> (+): # 加密表名称
  5. columns:
  6. <column_name> (+): # 加密列名称
  7. cipher:
  8. name: # 密文列名称
  9. encryptorName: # 密文列加密算法名称
  10. assistedQuery (?):
  11. name: # 查询辅助列名称
  12. encryptorName: # 查询辅助列加密算法名称
  13. likeQuery (?):
  14. name: # 模糊查询列名称
  15. encryptorName: # 模糊查询列加密算法名称
  16. # 加密算法配置
  17. encryptors:
  18. <encrypt_algorithm_name> (+): # 加解密算法名称
  19. type: # 加解密算法类型
  20. props: # 加解密算法属性配置
  21. # ...

算法类型的详情,请参见内置加密算法列表

操作步骤

  1. 在 YAML 文件中配置数据加密规则,包含数据源、加密规则、全局属性等配置项;
  2. 调用 YamlShardingSphereDataSourceFactory 对象的 createDataSource 方法,根据 YAML 文件中的配置信息创建 ShardingSphereDataSource。

配置示例

数据加密 YAML 配置如下:

  1. dataSources:
  2. unique_ds:
  3. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  4. driverClassName: com.mysql.jdbc.Driver
  5. jdbcUrl: jdbc:mysql://localhost:3306/demo_ds?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
  6. username: root
  7. password:
  8. rules:
  9. - !ENCRYPT
  10. tables:
  11. t_user:
  12. columns:
  13. username:
  14. cipher:
  15. name: username
  16. encryptorName: aes_encryptor
  17. assistedQuery:
  18. name: assisted_query_username
  19. encryptorName: assisted_encryptor
  20. likeQuery:
  21. name: like_query_username
  22. encryptorName: like_encryptor
  23. pwd:
  24. cipher:
  25. name: pwd
  26. encryptorName: aes_encryptor
  27. assistedQuery:
  28. name: assisted_query_pwd
  29. encryptorName: assisted_encryptor
  30. encryptors:
  31. aes_encryptor:
  32. type: AES
  33. props:
  34. aes-key-value: 123456abc
  35. assisted_encryptor:
  36. type: MD5
  37. like_encryptor:
  38. type: CHAR_DIGEST_LIKE

然后通过 YamlShardingSphereDataSourceFactory 的 createDataSource 方法创建数据源。

  1. YamlShardingSphereDataSourceFactory.createDataSource(getFile());

为了保持对低版本 YAML 配置的兼容,ShardingSphere 通过 COMPATIBLE_ENCRYPT 提供了如下的兼容配置,该配置会在后续版本中删除,建议及时升级最新 YAML 配置。

  1. dataSources:
  2. unique_ds:
  3. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  4. driverClassName: com.mysql.jdbc.Driver
  5. jdbcUrl: jdbc:mysql://localhost:3306/demo_ds?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
  6. username: root
  7. password:
  8. rules:
  9. - !COMPATIBLE_ENCRYPT
  10. tables:
  11. t_user:
  12. columns:
  13. username:
  14. cipherColumn: username
  15. encryptorName: aes_encryptor
  16. assistedQueryColumn: assisted_query_username
  17. assistedQueryEncryptorName: assisted_encryptor
  18. likeQueryColumn: like_query_username
  19. likeQueryEncryptorName: like_encryptor
  20. pwd:
  21. cipherColumn: pwd
  22. encryptorName: aes_encryptor
  23. assistedQueryColumn: assisted_query_pwd
  24. assistedQueryEncryptorName: assisted_encryptor
  25. encryptors:
  26. aes_encryptor:
  27. type: AES
  28. props:
  29. aes-key-value: 123456abc
  30. assisted_encryptor:
  31. type: MD5
  32. like_encryptor:
  33. type: CHAR_DIGEST_LIKE

相关参考