如何为多租户SAAS应用实现行级安全性

时间:2019-04-17 10:56:36

标签: database postgresql multi-tenant row-level-security

在回顾了用于创建多租户数据库体系结构的不同选项之后,由于易于扩展和维护/升级,我决定使用'Single database and same tables for all client, but we have tenant_id in all tables, so we query the data according to specific client'方法。

一般方法似乎是为每个查询简单地包含WHERE tenant_id = $ID,但是我了解到您可以通过实现行级来进一步隔离数据并消除包含WHERE子句的需要安全性。

尽管我对如何做到这一点的指导并不十分清楚。他们似乎都基于登录的数据库用户来实现行级安全性,因为我只有一个数据库用户,因此不适用于我的情况。

基本上,当用户向我们的服务器发送API请求时,它将包含一个JSON网络令牌,该令牌在有效负载中包含一个ID。然后,服务器在“用户”数据库中查询该ID以获取用户的orgId(又名tenant_id),然后服务器根据API请求查询数据库时,它将设置{{1} } $ID中的}返回此WHERE orgId = $ID值。

在这种情况下如何实现行级安全性?

我搜索了其他主题,但不认为这是一个重复的问题。

1 个答案:

答案 0 :(得分:1)

通常,您不能在这种设置下使用行级安全性。

行级安全性通常与数据库用户绑定,因此只有在您的应用程序对数据库用户实施其安全性概念时,才可以使用行级安全性。

正如a_horse_with_no_name所评论的那样,一种解决方法可能是在应用程序中设置诸如application_name之类的配置参数,并根据该设置设置行级安全性。