在 SaaS 系统中,多商户(多租户)数据隔离是核心架构设计问题,直接影响系统的安全性、性能和可扩展性。以下是多租户数据隔离的典型方案及具体实现方法:
一、数据隔离的核心方案
1. 共享数据库 + 共享表 + 逻辑隔离(Tenant ID 字段)
- 实现原理
所有租户共享同一个数据库和表,通过tenant_id
字段区分数据,所有查询必须携带tenant_id
。-- 示例:订单表结构 CREATE TABLE orders ( id BIGINT PRIMARY KEY, tenant_id VARCHAR(36) NOT NULL, -- 租户唯一标识 user_id VARCHAR(36) NOT NULL, amount DECIMAL(10,2) ); -- 查询时必须显式过滤 tenant_id SELECT * FROM orders WHERE tenant_id = 'TENANT_A' AND user_id = 'USER_001';
- 优点
成本最低,开发简单,适合初创 SaaS 应用。 - 缺点
数据隔离性弱,存在误操作泄露数据的风险。 - 安全增强
- 在数据库层启用行级安全策略(如 PostgreSQL 的 RLS)。
- 代码中强制所有 SQL 自动注入
tenant_id
(通过 ORM 拦截器或中间件)。
2. 共享数据库 + 独立模式(Schema per Tenant)
- 实现原理
每个租户在同一个数据库实例中拥有独立的 Schema(或数据库用户),数据物理隔离。-- 创建租户专属 Schema CREATE SCHEMA tenant_a;<