如何为 Web 应用程序设置 Postgres RLS

How to setup Postgres RLS for a web application

提问人:consuela 提问时间:9/5/2023 更新时间:9/5/2023 访问量:54

问:

我是 Postgres 的新手,我正在尝试了解如何为拥有数千名用户的面向公众的网站设置 RLS 策略。我有一个UserSessions表,每次用户登录站点时都需要在其中插入一行。只有数据库管理员和站点管理员才能从公众使用的同一网站查看此数据。

此外,还有特定于用户的表,允许单个站点用户设置警报。这些用户应该只能插入、更新、删除和查看自己的警报。

如何设置 RLS,以便网站可以将记录插入到 UserSessions 表中,只有两个管理员可以查看网站中的用户会话,而单个用户只能从网站查看其警报记录?在我看来,我应该做一些事情,比如为附加了所有策略的网站创建一个角色,但我不清楚如何做这样的事情以及如何将这些策略权限传递给 postgres。

我正在寻找有关如何为这些方案的网站设置 RLS 策略的建议。

谢谢!

PostgreSQL 行级安全性

评论

0赞 Ross Bush 9/5/2023
mssql 安全性中的行级安全性在最新版本的 Postgres 中不可用,但它可能在雷达上。
0赞 deceze 9/5/2023
通常你会用简单的子句作为应用程序的一部分进行这种过滤?!这并不是说应用的每个用户都有一个单独的用户帐户来连接到数据库,不是吗?你的应用具有一个用户帐户来连接到数据库,然后它决定从中获取哪些数据并呈现给用户。在某些情况下,应用或其不同部分可能具有不同权限的不同帐户,但这是一种更专业的方案,而不是基线。WHERE
0赞 Frank Heikens 9/5/2023
@RossBush 您能否详细说明一下 SQL Server 和 PostgreSQL 在 RLS 实现方面的差异?因为“不可用”是不正确的
0赞 Ross Bush 9/5/2023
@FrankHeikens - 你是对的,这个功能是上周在RC中发布的。上次我询问时,它不受支持。[ 2023 年 8 月 31 日 PostgreSQL 16 RC1 发布] - postgresql.org/docs/current/ddl-rowsecurity.html
0赞 Frank Heikens 9/5/2023
@RossBush上周?你是说 9 年前。RLS 自 2016 年 1 月发布的 9.5 版起可用。子弹 3:postgresql.org/docs/9.5/release-9-5.html

答: 暂无答案