多租户三维隔离与 Postgres RLS
隔离不只靠应用层 where 条件。Agent Forge 在请求上下文中同时校验租户、所有者与模型路由;Postgres 模式下用会话级 app.tenant_id 驱动行级安全,避免漏写过滤条件。
| 维 | 含义 |
|---|---|
| tenant | 能碰哪片数据 |
| owner | 谁能用;会话等资源按所有者过滤 |
| model | 逻辑模型路由(请求头或路由表) |
任一不满足即拒绝。身份绑定后租户与角色以服务端为准。见身份与租户绑定。
flowchart TD Req[请求] --> Ctx[Tenant + Owner + Model + Role] Ctx --> PG[SET LOCAL app.tenant_id] PG --> RLS[RLS 策略过滤行]事务内设置 app.tenant_id 后,业务表按策略只暴露本租户行。启用 RLS 的表包括会话与消息、触发器与运行、角色、审计、审批、观测、资源共享、团队与团队运行等(以当前迁移为准)。项目元数据等跨租户标识可不参与同一套租户 RLS。
生产连接角色须 NOBYPASSRLS(非超级用户绕过)。开源具备列与读隔离能力;租户/账号写管理等能力受企业版 multitenant 许可门禁。部署验收见部署验证。
存储选型:有 DATABASE_URL / AGENTFORGE_DATABASE_URL 走 Postgres;否则 SQLite。AGENTFORGE_DB=pg 且无连接串时启动失败,不静默混用。
相关阅读: