跳转到内容

DS加密字段用户指南

1.DataStore服务端相关配置

DataStore服务端默认是关闭加密相关功能的,如果需要使用DataStore的加密功能,要配置相关环境变量。

1.1 使用本地密钥管理

ENCRYPT_ENABLE=true
ENCRYPT_TYPE=LCOAL
ENCRYPT_LOCAL_SUPERKEY=超级密钥

ENCRYPT_LOCAL_SUPERKEY需要自己设置

1.2 使用KMS密钥管理

ENCRYPT_ENABLE=true
ENCRYPT_TYPE=KMS
ENCRYPT_KMS_REGIONID=KMS区域ID
ENCRYPT_KMS_ACCESSKEYID=AccessKey
ENCRYPT_KMS_SECRET=Secret
ENCRYPT_KMS_KEYALIAS=key别名

上面配置中除ENCRYPT_ENABLE和ENCRYPT_TYPE外,其他参数的值需要去阿里云KMS控制台开通KMS服务并创建密钥后获取。 KMS创建密钥.png

1.3 自定义当前明文密钥和盐值

ENCRYPT_ENABLE=true
ENCRYPT_TYPE=LCOAL
ENCRYPT_LOCAL_SUPERKEY=超级密钥
LOCAL_AES_KEY=自定义的明文密钥
LOCAL_IVPARAMETER=自定义的盐值

使用自定义的明文密钥和盐值时,ENCRYPT_TYPE必须为LOCAL,此外,一旦使用该模式,代表使用DS的所有租户都将使用该密钥和盐值。 该方式不符合加密功能的正常流程,非特殊情况下不建议使用。

2. 设置模型字段为加密字段

例如有员工Staff模型,Staff中有两个属性,姓名和薪资,薪资保存到数据库中时需要加密存储,这时只需要在薪资属性上添加@Encrypted注解即可。 上报模型元信息并发布成功后就可以生效。

@Model(name = "员工")
public class Staff extends BaseModel<Long> {
@Field(name = "Item name")
private String name;
@Encrypted
@Field(name = "工资")
private String salary;
}

发布成功后,交付控制台会显示该字段是否为加密字段。

加密字段显示.png 上图片中的AES_256为超级密钥加密明文密钥的算法,不是真正用来加密业务数据的算法,加密业务数据使用的是AES_128。

3.加密字段的增删改查操作

由于DS的加密功能对业务方来说是无感知的,所以加密字段的增删改查操作和普通字段无异,但要注意加密字段的一些使用限制:

  1. 已存在的加密字段在存在数据的情况下不能转为非加密字段
  2. 已存在的非加密字段在存在数据的情况下不能转为加密字段(后续支持)
  3. 字段指令@Encrypted与@Field中的defaultValue属性不能共存,即加密字段不可设置默认值
  4. 加密字段的数据类型支持所有数值和字符类型,如int,String等
  5. 加密字段只支持等值查询操作,不支持范围查询等其他操作。
  6. 如果没有配置加密相关的环境变量或者环境变量不可用,无法操作加密字段