2016-02-10 18 views
0

我是Postgres /数据库的新手,正在考虑如何设计多租户应用程序。我阅读了一些基本的东西,例如Postgres支持的模式和自Postgres 9.5以来增加的行级安全。所以在我的情况下,租户可以有很多用户。两个不同的租户可以拥有同名用户(类似于层次结构)。因此,在顶层,我可以为每个租户建立一个架构。然后在每个用户中都有一个RLS策略。这可以在Postgres中完成,这是一个不错的选择吗?使用RLS,我需要为每个用户提供一个角色。这可能会爆炸,因为我的理解是角色在模式中是全球性的。PostgreSQL中使用Schemas和RLS的多租户

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

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

+0

“*我将需要为每个用户分配一个角色*” - 您已拥有该角色。用户**是**角色(具有“登录”权限)。但是如果你不需要跨租户查询,那么我同意尼尔:每个租户使用一个数据库 –

回答

1

我会与租户每个数据库。这对备份(每个租户)稍微容易一些,默认情况下更安全一些。并且更容易管理w pgAdmin。

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

设置db_user_namespace=truepostgresql.conf允许per-db用户名。有关注意事项,请参阅http://www.postgresql.org/docs/9.5/static/runtime-config-connection.html