数据加密

背景信息

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

参数解释

  1. rules:
  2. - !ENCRYPT
  3. tables:
  4. <table_name> (+): # 加密表名称
  5. columns:
  6. <column_name> (+): # 加密列名称
  7. plainColumn (?): # 原文列名称
  8. cipherColumn: # 密文列名称
  9. encryptorName: # 密文列加密算法名称
  10. assistedQueryColumn (?): # 查询辅助列名称
  11. assistedQueryEncryptorName: # 查询辅助列加密算法名称
  12. likeQueryColumn (?): # 模糊查询列名称
  13. likeQueryEncryptorName: # 模糊查询列加密算法名称
  14. queryWithCipherColumn(?): # 该表是否使用加密列进行查询
  15. # 加密算法配置
  16. encryptors:
  17. <encrypt_algorithm_name> (+): # 加解密算法名称
  18. type: # 加解密算法类型
  19. props: # 加解密算法属性配置
  20. # ...
  21. queryWithCipherColumn: # 是否使用加密列进行查询。在有原文列的情况下,可以使用原文列进行查询

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

操作步骤

  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. plainColumn: username_plain
  15. cipherColumn: username
  16. encryptorName: name_encryptor
  17. assistedQueryColumn: assisted_query_username
  18. assistedQueryEncryptorName: assisted_encryptor
  19. likeQueryColumn: like_query_username
  20. likeQueryEncryptorName: like_encryptor
  21. pwd:
  22. cipherColumn: pwd
  23. encryptorName: pwd_encryptor
  24. assistedQueryColumn: assisted_query_pwd
  25. assistedQueryEncryptorName: assisted_encryptor
  26. queryWithCipherColumn: true
  27. encryptors:
  28. name_encryptor:
  29. type: AES
  30. props:
  31. aes-key-value: 123456abc
  32. assisted_encryptor:
  33. type: AES
  34. props:
  35. aes-key-value: 123456abc
  36. like_encryptor:
  37. type: CHAR_DIGEST_LIKE
  38. pwd_encryptor:
  39. type: MD5

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

  1. YamlShardingSphereDataSourceFactory.createDataSource(getFile());

相关参考