跳转到内容

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;
}

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

2. 加密字段使用限制

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

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 加密算法。