在PostgreSQL中使用Schemas和RLS实现多租户

时间:2016-02-10 17:33:01

标签: postgresql

我是Postgres /数据库的新手,正在考虑如何设计多租户应用程序。我读了一些基本的东西,比如Postgres和Row Level Security支持的模式,这是自Postgres 9.5以来添加的。所以在我的情况下,租户可以有很多用户。两个不同的租户可以拥有相同名称的用户(类似于层次结构)。所以在顶层,我可以为每个租户建立一个架构。然后在每个用户中都有一个RLS策略。这可以在Postgres完成,这是一个很好的选择吗?使用RLS,我需要为每个用户创建一个角色。这可能会爆发,因为我的理解是角色在模式中是全局的。

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

对使用正确的方法感到困惑。

1 个答案:

答案 0 :(得分:1)

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

对于每个应用程序用户,您都不需要数据库用户来使用RLS,但这可能是一个好主意。

db_user_namespace=true中设置postgresql.conf以允许每db用户名。有关警告,请参阅http://www.postgresql.org/docs/9.5/static/runtime-config-connection.html