多租户隔离

需要让平台按"组织/租户"隔离数据(不同组织看不到彼此的项目组/任务/机器/存储等)、或想了解多租户开启后谁能看到什么时读这篇

运维管理 / 多租户
多租户multi-tenantENABLE_MULTI_TENANT租户隔离org组织租户管理员系统管理员is_systemis_admin数据隔离项目组隔离机器隔离存储隔离SaaS私有化多组织

多租户隔离(ENABLE_MULTI_TENANT)

平台支持多租户模式:开启后,不同"租户(组织)"之间的数据互相隔离,适合一套平台给多个组织/团队使用。 默认关闭ENABLE_MULTI_TENANT=False,见 myapp/config.py:766)。

租户怎么划分

  • 租户由用户的 org(组织标识) 字段决定:org 相同的用户属于同一租户(见 myapp/security.py:64)。
  • org 在「用户列表」里维护;多租户开启后,非系统用户的 org 字段在表单中只读,默认就是自己的 orgmyapp/security.py:334-343)。

三种可见范围

多租户开启后,几乎所有业务列表都会按下面的规则过滤(每个视图各有一个 *_Filter,逻辑一致, 可参考 myapp/views/view_notebook.py:51-54view_inferenceserving.py 等):

身份 判定 能看到
系统管理员 username=='admin'org=='system'org 为空(is_system()myapp/security.py:144 全部租户的数据
租户管理员 该租户内的 admin 角色(is_admin() **本租户(同 org)**的数据
普通用户 其余 主要是自己的数据(叠加项目组/责任人等既有权限)

即:org='system' 或用户名 admin 是跨租户的"超级管理员";每个租户内再设自己的 admin 作为"租户管理员"。

影响范围

多租户过滤覆盖几乎所有资源视图(约 35 个),包括:项目组、机器/节点资源、存储资源、Notebook、 任务流/任务、推理服务/内部服务、模型、数据集/维表/库表、镜像、消息、账单、整体资源等 (即 myapp/views/ 下大量 view_*.py 都引用了 ENABLE_MULTI_TENANT)。具体每个模块的过滤细节以对应 view_*.py 中的 *_Filter 为准。

启用步骤

  1. config.pyENABLE_MULTI_TENANT=True
  2. 给各用户设置 org(同组织同值);跨租户的超级管理员用 admin 或把 org 设为 system
  3. 每个租户内指定该租户的 admin 角色用户作为租户管理员。
  4. 重启后端生效。

相关:项目组专属命名空间 ENABLE_SPECIFY_NAMESPACEconfig.py:784)可与多租户配合做更强的 K8s 命名空间级隔离,见 配置项速查.md

最后更新 2026-06-30完整文档以官方仓库为准:GitHub Wiki