【问题标题】:Designing a Multi-tenant SAAS Database with Postgres RLS使用 Postgres RLS 设计多租户 SAAS 数据库
【发布时间】:2022-01-11 12:45:46
【问题描述】:

我想用 PostgreSQL 和 RLS 设计一个多租户 SAAS 数据库。我希望能够在同一个数据库中托管所有用户和租户,并使用 RLS 隔离他们的数据。

在我的用例中,租户共享某些用户数据以避免重复这些数据是有意义的。租户将向用户请求权限,这些权限存储在权限表中,这些权限用于控制 RLS。

但是,我需要租户拥有其组织独有的用户数据,例如加入日期或其他数据。我需要知道的是如何设计数据库来保存所有组织特定的数据。我曾想过使用 JSONB 来存储这些数据,例如

user_data_for_tenant

id
user_id
tenant_id
data JSONB

这个data由前端的租户决定。

这样好吗?我怎样才能更好地设计数据库以适应这个用例?

我将使用 Supabase 进行 DB、Auth、存储和其他用途,以便 RLS 可以控制访问。

【问题讨论】:

  • 您的应用中是否有跨租户共享的用户?

标签: postgresql multi-tenant supabase rls supabase-database


【解决方案1】:

我想建议以下设计用于权限的数据管理(AKA 用户实体权限)

我们可以有一个表,其中包含映射到 SaaS 应用程序中每个实体的租户用户。会有Permission-C之类的权限,意思是Permission Create,等等更新、删除和读取。

租户管理员可以根据角色为其租户中的每个用户配置访问级别,我们可以在内部使用这些角色来管理 Postgresql 中的策略,以便根据租户级别限制查询正常工作.

在具有记录级别安全性的情况下,我们可以针对数据库中的每个 CRUD 操作获得所有可以访问的 ID,如下所示。

以下方法的问题在于,随着数据的增长,如果列增长,或者您拥有 IDS 和权限的平面映射。如果该方法适合您的要求,则可以选择对此进行微调。

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 2016-10-19
    • 2018-07-02
    • 2021-07-10
    • 2018-01-31
    • 2014-07-15
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多