logologo
开始
手册
开发
插件
API
English
简体中文
开始
手册
开发
插件
API
English
简体中文
logologo
概述

数据源

数据源管理
主数据源

外部数据源(数据库)

介绍
外部 MySQL
外部 MariaDB
外部 PostgreSQL
外部 MSSQL
外部 Oracle
主、外部数据库对比
REST API 数据源
人大金仓(KingbaseES)数据源

数据表

概述
普通表
继承表
文件表
树表
日历表
评论表
表达式表
SQL 表
数据库视图

数据表字段

概述
字段验证

基本类型

单行文本
多行文本
手机号码
电子邮箱
URL
整数
数字
百分比
密码
颜色
图标

选择类型

勾选
下拉菜单(单选)
下拉菜单(多选)
单选框
复选框

多媒体

Markdown
Markdown(Vditor)
富文本
附件(关系)
附件(URL)

日期 & 时间

概述
日期时间(含时区)
日期时间(不含时区)
Unix 时间戳
日期(不含时间)
时间

几何图形

点
线
圆
多边形

高级类型

Snowflake ID (53-bit)
UUID
Nano ID
排序
计算公式
自动编码
JSON
数据表选择器
加密

系统信息

创建日期
最后修改日期
创建人
最后修改人
空间
Table OID

关系类型

概述
一对一
一对多
多对一
多对多
多对多(数组)

开发

概述
Previous Page数据表选择器
Next Page创建日期

#加密

该功能由插件 «数据表字段:加密» 提供, 包含在 专业版 及以上商业版本中

#介绍

一些私密的业务数据,如客户手机号、邮箱地址、卡号等,可以进行加密,加密后,以密文的方式被存储至数据库中。

20251104192513

#加密方式

WARNING

插件会自动生成一个应用密钥,该密钥保存在 /storage/apps/main/encryption-field-keys 目录中。

应用密钥文件名为密钥 ID ,后缀名为 .key ,请勿随意修改文件名。

请妥善保管应用密钥文件,如果丢失应用密钥文件,加密数据将无法解密。

如果是子应用开启了插件,密钥默认保存目录为 /storage/apps/${子应用name}/encryption-field-keys

#工作原理

采用信封加密的方式

20251118151339

#密钥创建流程

  1. 第一次创建加密字段时,系统会自动生成一个 32 位应用密钥,以 base64 编码的方式保存到默认存储目录中。
  2. 每次创建新的加密字段时,会为这个字段生成随机 32 位字段密钥,然后使用应用密钥和随机生成的 16 位字段加密向量对其进行加密(AES加密算法),然后保存到 fields 表的 options 字段中。

#字段加密流程

  1. 每次向加密字段写入数据时,会先从 fields 表的 options 字段中获取加密的字段密钥和字段加密向量。
  2. 使用应用密钥和字段加密向量对已加密的字段密钥进行解密,然后使用字段密钥和随机生成的 16 位数据加密向量对数据进行加密(AES加密算法)。
  3. 使用解密后的字段密钥对数据进行签名(HMAC-SHA256摘要算法),以 base64 编码转为字符串(生成的数据签名后续用于数据检索)。
  4. 将 16 位数据加密向量和加密后的数据密文进行二进制拼接,以 base64 编码转为字符串。
  5. 将数据签名 base64 编码字符串 和拼接后的数据密文 base64 编码字符串以 '.' 分隔拼接。
  6. 保存最终拼接的字符串到数据库中。

#环境变量

如果想要指定应用密钥,可以使用环境变量 ENCRYPTION_FIELD_KEY_PATH,插件将加载该路径下的文件作为应用密钥。

应用密钥文件格式要求:

  1. 文件后缀必须为 .key。
  2. 文件名将作为密钥ID使用,最好使用uuid保证唯一性。
  3. 文件内容为 base64 编码的 32 位二进制数据。
ENCRYPTION_FIELD_KEY_PATH=/path/to/my/app-keys/270263524860909922913.key

#字段配置

20240802173721

#加密后对筛选的影响

加密后的字段仅支持:等于、不等于、存在、不存在。

20240802174042

数据筛选方式:

  1. 获取加密字段的 字段密钥 ,使用应用密钥解密字段密钥。
  2. 使用字段密钥对用户输入的检索文本进行签名(HMAC-SHA256摘要算法)。
  3. 用签名后的检索文本拼接.分隔符,在数据库中对加密字段进行前缀匹配检索。

#密钥轮转

WARNING

使用密钥轮转命令 nocobase key-rotation 前先确认应用已经加载本插件。

应用迁移到新的环境后,不想继续使用和旧环境相同的密钥时,可以使用 nocobase key-rotation 命令替换应用密钥。

运行密钥轮转命令需要指定旧环境的应用密钥,命令运行后将会生成新的应用密钥,并替换旧密钥。新的应用密钥以 base64 编码的方式保存到默认存储目录中。

# --key-path 指定的是和数据库加密数据对应的旧环境的应用密钥文件
 yarn nocobase key-rotation --key-path /path/to/old-app-keys/270263524860909922913.key

如果是替换子应用 应用密钥 需要添加 --app-name 参数,指定子应用 name

 yarn nocobase key-rotation --app-name a_w0r211vv0az --key-path /path/to/old-app-keys/270263524860909922913.key