跳转到内容

多租户三维隔离与 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 且无连接串时启动失败,不静默混用。


相关阅读: