复古 护眼 海天 深邃 暗黑 默认

数据加密

背景信息

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

参数解释

rules:
- !ENCRYPT
  tables:
    <table_name> (+): # 加密表名称
      columns:
        <column_name> (+): # 加密列名称
          plainColumn (?): # 原文列名称
          cipherColumn: # 密文列名称
          encryptorName: # 密文列加密算法名称
          assistedQueryColumn (?):  # 查询辅助列名称
          assistedQueryEncryptorName:  # 查询辅助列加密算法名称
          likeQueryColumn (?):  # 模糊查询列名称
          likeQueryEncryptorName:  # 模糊查询列加密算法名称
      queryWithCipherColumn(?): # 该表是否使用加密列进行查询
    
  # 加密算法配置
  encryptors:
    <encrypt_algorithm_name> (+): # 加解密算法名称
      type: # 加解密算法类型
      props: # 加解密算法属性配置
        # ...

  queryWithCipherColumn: # 是否使用加密列进行查询。在有原文列的情况下,可以使用原文列进行查询

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

操作步骤

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

配置示例

数据加密 YAML 配置如下:

dataSources:
  unique_ds:
    dataSourceClassName: com.zaxxer.hikari.HikariDataSource
    driverClassName: com.mysql.jdbc.Driver
    jdbcUrl: jdbc:mysql://localhost:3306/demo_ds?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
    username: root
    password:

rules:
- !ENCRYPT
  tables:
    t_user:
      columns:
        username:
          plainColumn: username_plain
          cipherColumn: username
          encryptorName: name_encryptor
          assistedQueryColumn: assisted_query_username
          assistedQueryEncryptorName: assisted_encryptor
          likeQueryColumn: like_query_username
          likeQueryEncryptorName: like_encryptor
        pwd:
          cipherColumn: pwd
          encryptorName: pwd_encryptor
          assistedQueryColumn: assisted_query_pwd
          assistedQueryEncryptorName: assisted_encryptor
      queryWithCipherColumn: true
  encryptors:
    name_encryptor:
      type: AES
      props:
        aes-key-value: 123456abc
    assisted_encryptor:
      type: AES
      props:
        aes-key-value: 123456abc
    like_encryptor:
      type: CHAR_DIGEST_LIKE
    pwd_encryptor:
      type: MD5

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

YamlShardingSphereDataSourceFactory.createDataSource(getFile());

相关参考