Database 如何为多租户SAAS应用程序实现行级安全
在回顾了创建多租户数据库体系结构的不同选项之后,由于易于扩展和维护/升级,我决定使用“方法” 一般的方法似乎只是简单地为每个查询包含Database 如何为多租户SAAS应用程序实现行级安全,database,postgresql,multi-tenant,row-level-security,Database,Postgresql,Multi Tenant,Row Level Security,在回顾了创建多租户数据库体系结构的不同选项之后,由于易于扩展和维护/升级,我决定使用“方法” 一般的方法似乎只是简单地为每个查询包含WHERE-tenant\u id=$id,但是我了解到,通过实现行级安全性,可以进一步隔离数据并消除包含WHERE子句的需要 不过,我找到的关于如何做到这一点的指南并不十分清楚。它们似乎都实现了基于登录数据库用户的行级安全性,这对我的情况不起作用,因为我只有一个数据库用户 基本上,当用户向我们的服务器发送API请求时,它将包含一个JSON web令牌,该令牌在有效
WHERE-tenant\u id=$id
,但是我了解到,通过实现行级安全性,可以进一步隔离数据并消除包含WHERE
子句的需要
不过,我找到的关于如何做到这一点的指南并不十分清楚。它们似乎都实现了基于登录数据库用户的行级安全性,这对我的情况不起作用,因为我只有一个数据库用户
基本上,当用户向我们的服务器发送API请求时,它将包含一个JSON web令牌,该令牌在有效负载中包含一个id。然后,服务器在“用户”数据库中查询该id以获取用户的orgId
(又称tenant\u id
),然后当服务器根据API请求查询数据库时,它将中的$id
设置为返回的orgId
值
在这种情况下,如何实现行级安全性
我已经搜索了其他主题,不认为这是一个重复的问题。通常情况下,您不能在这样的设置中使用行级安全性
行级安全性通常与数据库用户绑定,因此只有在应用程序对数据库用户实现其安全性概念时才能使用
正如一个没有名字的马所评论的,一个解决方法可能是从应用程序中设置配置参数,如application\u name
,并在该设置上设置基本行级别的安全性。您不能定义一个使用配置设置值的RLS策略吗?当然,应用程序有责任确保在建立连接时正确初始化属性。您是对的,这是可以做到的。把它写在答题纸上,我就投赞成票。我将用一句话修改我的答案。嘿,杰克,我目前也在用tenant\u id
方法实施租赁。您是否实现了“行级安全性”?