在Dify中增加工作空间(租户)

本文主要介绍了如何在Dify中增加工作空间(租户),大概思路是在tenantstenant_account_joinsaccounts数据表中新增相应记录,然后生成生成私钥和公钥,更新租户数据表中的公钥,最后把私钥放入指定位置。

一.新增tenants和tenant_account_joins记录

insert into tenants(name, plan, status, created_at, updated_at) values();
insert into tenant_account_joins(tenant_id, account_id, role, created_at, updated_at) values()

1.tenants数据表结构

2.tenant_account_joins数据表结构

3.account_id获取

account_iduuid_generate_v4() 函数生成 UUID,长度为128位(二进制),对应36个字符(字符串表示),格式为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4.租户账号角色

角色
解释
OWNER
拥有最高权限的租户所有者,可以管理所有资源和用户
ADMIN
管理员,拥有特权权限,可以管理大部分资源但权限低于所有者
EDITOR
编辑者,拥有内容编辑权限,可以修改资源但无管理权限
NORMAL
普通用户,具有基本访问权限,但不能编辑或管理关键资源
DATASET_OPERATOR
数据集操作员,专门负责数据集的操作和管理

5.账号状态

这些状态用于跟踪系统中用户账号的生命周期和当前可用性。

状态
枚举值
说明
PENDING
“pending”
账号已创建但尚未完成验证流程
UNINITIALIZED
“uninitialized”
账号已创建但用户尚未完成初始设置
ACTIVE
“active”
账号处于正常活跃状态,拥有完整访问权限
BANNED
“banned”
账号因违反规则被管理员禁用
CLOSED
“closed”
账号已被关闭(可能是用户主动关闭或系统关闭)

二.生成私钥和公钥

1.生成私钥

sudo openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048Copy

该命令的作用是以 RSA 算法生成一把 2048 位私钥,并保存为 private.pem:

命令 作用
sudo
以 root 权限执行命令,确保能在受限目录(如 /etc/ssl/private)写文件或满足系统安全策略。若当前目录可写且无特殊限制,可去掉。
openssl
调用 OpenSSL 命令行工具(标准的加密库与工具集合)。
genpkey
“generate private key” 的缩写:OpenSSL 3.0 之后推荐的私钥生成子命令,取代旧的 genrsa、gendsa 等专用命令。
-algorithm RSA
指定密钥算法为 RSA。可替换为 EC、ED25519、SM2 等。
-out private.pem
将生成的 PKCS#8 私钥(含算法参数)保存到文件 private.pem(PEM 格式,Base-64 带头尾 —–BEGIN PRIVATE KEY—–)。
-pkeyopt rsa_keygen_bits:2048
通过 pkeyopt 传入算法生成参数:rsa_keygen_bits 设置密钥长度为 2048 位(常见最小安全位数)。也可以改为 3072 或 4096 提高安全强度。

2.生成公钥

sudo openssl rsa -pubout -in private.pem -out public.pem

该命令的作用是根据现有 RSA私钥private.pem导出对应的公钥,并保存为public.pem

命令
含义
sudo
以root权限运行,便于读取受限目录中的密钥或把公钥写入系统路径;如果当前用户已有足够权限,可省略。
openssl
调用 OpenSSL 命令行工具。
rsa
OpenSSL的RSA专用子命令,用于查看、转换或导出 RSA 密钥(与 genpkey 的”生成”功能相对)。
-pubout
表示”public out”:不要输出私钥,而是从输入的私钥中推导并输出 公钥。
-in private.pem
指定输入文件为private.pem,里面应是PEM编码的RSA私钥;若私钥加密,执行时会提示输入口令。
-out public.pem
将导出的公钥写入 public.pem(PEM 格式,文件头为 -----BEGIN PUBLIC KEY-----)。

三.更新租户数据表中的公钥

更新租户数据表中的公钥,如下所示:

update tenants set encrypt_public_key='' where id='';

四.私钥放入指定位置

私钥放入dify/api/privkeys/{tenant_id},文件名为private.pem

参考文献

[0] 在Dify中增加工作空间(租户):https://z0yrmerhgi8.feishu.cn/wiki/Kk5ywxSpqiXJN8knOK9c2Zl5ned

[1] 本地部署相关问题:https://docs.dify.ai/zh-hans/learn-more/faq/install-faq


知识星球:Dify源码剖析及答疑,Dify扩展系统源码,AI书籍课程|AI报告论文,公众号付费资料。加微信buxingtianxia21进NLP工程化资料群,以及Dify交流群。

(文:NLP工程化)

发表评论