【问题标题】:Multi tenancy with Schemas and RLS in PostgreSQLPostgreSQL 中的多租户模式和 RLS
【发布时间】:2026-02-08 21:45:02
【问题描述】:

我是 Postgres/数据库的新手,正在考虑如何设计多租户应用程序。我阅读了一些基本内容,例如 Postgres 支持的模式和自 Postgres 9.5 以来添加的行级安全性。所以在我的例子中,一个租户可以有很多用户。两个不同的租户可以拥有同名的用户(有点像层次结构)。所以在顶层,我可以为每个租户都有一个模式。然后在每个内部都有一个针对用户的 RLS 策略。这可以在 Postgres 中完成吗?这是一个不错的选择吗?使用 RLS,我需要为每个用户分配一个角色。这可能会爆炸,因为我的理解是角色是跨模式的全局的。

或者我能想到的其他事情是,我将所有内容保存在同一个表中,但有尊重用户和表中租户列的策略。这在 Postgres 中可能吗?例如,当我添加一个带有 current_users = "column_name" 的策略时,我是否可以添加另一个条件,在其中添加一个*租户名称匹配的检查。但是这个设置在哪里,如何设置,类似于SET ROLE "user"

对正确的使用方法有点困惑。

【问题讨论】:

  • "我需要为每个用户分配一个角色" - 你已经有了。用户一个角色(具有“登录”权限)。但如果你不需要跨租户查询,那么我同意 Neil 的观点:每个租户使用一个数据库

标签: postgresql


【解决方案1】:

我会选择每个数据库的租户。这更容易备份(每个租户),默认情况下更安全。并且更容易管理 w pgAdmin。

您不需要为每个应用程序用户提供一个 db 用户来使用 RLS,但这可能是个好主意。

postgresql.conf 中设置db_user_namespace=true 以允许每个数据库的用户名。请参阅http://www.postgresql.org/docs/9.5/static/runtime-config-connection.html 了解警告

【讨论】: