---
name: multi-tenancy
when: '多租户, 租户隔离, tenant, SaaS, 租户, 数据隔离, 多客户'
scope:
  - backend
products:
  - saas
id: ka-domain_knowledge-multi-tenancy
asset_kind: domain
lifecycle_status: active
owner_mechanism_id: mc-domain-knowledge
authority: supporting
routes:
  - '*'
primary_triggers:
  - 多租户
  - 租户隔离
  - tenant
  - SaaS
  - 租户
  - 数据隔离
  - 多客户
priority: P2
specificity: 3
version: 1.1.0
last_reviewed: '2026-06-01'
consumes: []
emits: []
secondary_triggers: []
negative_triggers: []
type: domain
stages: ["*"]
---

## 业务规则
1. 每个租户的数据完全隔离，租户 A 不能看到租户 B 的任何数据
2. 所有查询必须自动附加租户过滤条件，不依赖开发人员手动添加
3. 租户切换需重新认证，不支持跨租户操作
4. 租户级配置（功能开关、字段自定义）独立管理
5. 租户间数据必须物理隔离（独立 schema/库）或逻辑隔离（tenant_id 字段 + 全局过滤）
6. 租户配置（功能开关、参数）必须支持按租户覆盖全局默认值
7. 新增租户必须自动初始化基础数据（角色、权限、默认菜单）

## 约束条件
- 数据库层面使用 tenant_id 字段实现行级隔离（共享数据库方案）
- MyBatis 拦截器自动注入 tenant_id 条件，禁止绕过拦截器直接写 SQL
- 新建表必须包含 tenant_id 字段并建立索引
- 超级管理员可跨租户查看数据，但需审计日志记录
- 租户 ID 必须在所有业务表中存在，且建立索引
- 跨租户数据查询必须显式声明并经过审批
- 租户数据删除必须级联清理所有关联数据

## 例外情况
- 系统级配置表（如地区、行业分类）不需要 tenant_id
- 数据统计聚合（如系统总用户数）需脱敏处理后统计
- 系统管理后台（超管）允许跨租户操作

## 关联模式
参见 auth-permission 模式（权限模型与租户关联）、logging 模式（日志需记录 tenantId）
- auth-permission
- data-privacy
