Visual LabINTERACTIVE LEARNING
02 · ACCESS CONTROLP014 MIN

数据隔离与跨租户访问控制

从数据库查询、缓存、任务和对象存储的每个边界防止租户数据串线。

MENTAL MODELTENANT ISOLATION
01验证 Session
02解析 Membership
03建立 Tenant Context
04查询 / 缓存 / Job 全程携带
租户上下文必须像 Trace ID 一样贯穿请求,但不能像普通参数一样由客户端任意声明。
01 · CONCEPTS & BOUNDARIES

先把概念与边界说清楚

定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。

01

Application Isolation

Repository 自动附加 tenant_id 条件,写入时从认证上下文注入归属。

02

Row Level Security

PostgreSQL 根据会话上下文在数据库层限制行,可形成第二道防线。

03

Cross-tenant Access

支持人员或上级组织访问必须通过显式策略、原因和审计,而不是临时关闭过滤。

02 · BLIND BOTS CASE

缓存键导致订单串租户

问题现场

服务用 order:${id} 缓存详情,不同租户恰好都有 id=42。

  1. 01

    缓存键加入 tenant_id。

  2. 02

    读取缓存后仍验证归属。

  3. 03

    扫描队列载荷和对象存储路径的租户命名。

得到什么

隔离从 SQL 扩展到所有数据通道,不再只检查数据库。

03 · PRACTICE

马上动手

  1. 列出请求、缓存、队列、文件四层的租户键。
  2. 为客服临时访问设计审批与过期。
04 · PITFALLS

常见坑

  • 信任 X-Tenant-Id 而不查 Membership
  • 缓存和导出任务漏租户
  • 后台脚本用无范围超级账号
05 · KNOWLEDGE CHECKtenant_id 为什么必须来自认证上下文?查看答案⌄
答案

请求体和请求头由客户端控制;服务端应从当前用户已验证的组织成员关系解析可用租户,再接受用户在其范围内切换。