0

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

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

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

user_data_for_tenant

id
user_id
tenant_id
data JSONB

data是由前端的租户决定的。

这个可以吗?我如何更好地设计数据库以适应这个用例?

我将使用 Supabase 进行数据库、身份验证、存储和其他用途,以便 RLS 可以控制访问。

4

1 回答 1

0

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

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

租户管理员可以根据角色为其租户中的每个用户配置访问级别,我们可以在内部使用这些角色来管理 Postgresql 中的策略,以便查询根据租户级别限制正常工作。 SaaS 应用程序的多租户实体级安全实施

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

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

行级安全映射

于 2022-01-02T15:05:25.423 回答