Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何为多租户SAAS应用程序实现行级安全_Database_Postgresql_Multi Tenant_Row Level Security - Fatal编程技术网

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
方法实施租赁。您是否实现了“行级安全性”?