DS加密字段功能概述
在数据库中,有些关键数据敏感度比较高,需要加密存储,即使数据库泄露也能保证一定的安全性。因此,DS 提供了数据加密功能,使关键的数据保存时经过 DS 加密存储,通过 DS 查询加密数据时,DS 先解密被加解密的数据,然后在返回给用户(业务模块),因此,DS 的数据加密功能对用户来说是无感知的。
1. 加密字段定义
例如有员工 Staff 模型,Staff 中有两个属性,姓名和薪资,薪资保存到数据库中时需要加密存储,这时只需要在薪资属性上添加 @Encrypted 注解即可。
上报模型元信息并发布成功后就可以生效。
@Model(name = "员工")public class Staff extends BaseModel<Long> {
@Field(name = "Item name") private String name;
@Encrypted @Field(name = "工资") private String salary;}发布成功后,交付控制台会显示该字段是否为加密字段

2. 加密字段使用限制
- 已存在的加密字段在存在数据的情况下不能转为非加密字段
- 已存在的非加密字段在存在数据的情况下不能转为加密字段(后续支持)
- 字段指令
@Encrypted与@Field中的defaultValue属性不能共存,即加密字段不可设置默认值 - 加密字段的数据类型支持所有数值和字符类型,如 int,String 等
- 加密字段只支持等值查询操作,不支持范围查询等其他操作。
- 如果没有配置加密相关的环境变量或者环境变量不可用,无法操作加密字段
3. 目前支持的加密算法和密钥管理方案
3.1 什么是超级密钥
超级密钥是密钥的密钥,DS 支持多租户,假如租户 A 的明文密钥为 123,首先租户 A 的明文密钥不能直接存储在数据库中,否则加密功能将失去意义,目前的 处理方式是先把租户 A 的明文密钥通过超级密钥加密,然后在保存在数据库中。
3.2 密钥管理方案
目前 DS 支持的密钥管理方案有两种,本地密钥管理和阿里云 KMS 密钥管理,使用这两种密钥管理方案时,真正的明文密钥会被加密后保存在数据库中。 此外,还可以直接配置全局级别的明文密钥和对应的盐值,主要用来对接一些已经通过外部系统加密过的数据。
3.2.1 本地密钥管理
需要在 DS 服务通过环境变量将密钥管理方式设置为 LOCAL,并且配置一个本地超级密钥,用来加密当前租户的明文密钥。
3.2.2 阿里云 KMS 密钥管理
使用 KMS 管理密钥时,超级密钥由 KMS 管理,相对于本地密钥管理进一步提高了安全性,关于 KMS 的功能在此不多介绍,可以参考官方文档:https://help.aliyun.com/document_detail/28935.html?spm=a2c4g.11186623.6.542.7e741471TTpmoc
3.3 加密算法
目前 DS 数据加密只支持可逆的 AES 128 加密算法。