Postgresql Postgres行级安全策略条件中的聚合/窗口函数限制

Postgresql Postgres行级安全策略条件中的聚合/窗口函数限制,postgresql,window-functions,row-level-security,Postgresql,Window Functions,Row Level Security,我已经成功地使用了一个稠密的排名超过订单。。。 哪一个AFAIK是postgres行级安全策略条件下的窗口函数 然而,美国 返回布尔值的任何SQL条件表达式。条件表达式不能包含任何聚合函数或窗口函数 重点是我的 有人能解释一下这个限制并举例说明它的适用范围吗 谢谢。基本上,它告诉您每一行在行级安全性方面是独立的 考虑下表: +---------------------+----------------+ | field1 | field2 | +----

我已经成功地使用了一个稠密的排名超过订单。。。 哪一个AFAIK是postgres行级安全策略条件下的窗口函数

然而,美国

返回布尔值的任何SQL条件表达式。条件表达式不能包含任何聚合函数或窗口函数

重点是我的

有人能解释一下这个限制并举例说明它的适用范围吗


谢谢。

基本上,它告诉您每一行在行级安全性方面是独立的

考虑下表:

+---------------------+----------------+
| field1              | field2         |
+---------------------+----------------+
| value1              | 1              |
| value1              | 2              |
| value1              | 3              |
| value2              | 4              |
+---------------------+----------------+
有几种许可政策:

字段1='value1' 字段1='value2' SUMfield2>10禁止,但现在让我们想象一下,您可以定义它 您被授予了策略2和3,因此您只能查看和更新最后一条记录。 ... 直到执行更新表集合值2=11

这在以下方面非常糟糕:

安全您可以以用户而不是管理员的身份授予自己对记录的访问权限。 维修记录会在这样的数据库中随机出现/消失。 表演这样的政策要评估的成本非常大。
有趣的是,您可以在从MyOtherTable中选择MyOtherField中将策略定义为MyField,在这种情况下,它完全依赖于您在MyOtherTable上定义的内容—它打算与FK/PK一起使用。

这非常有意义。我对稠密_秩的使用在EXISTS中,因此我假设它是一个有效的用法。谢谢您的意思是在常规查询中的EXISTS中?在MyTable上创建策略。。。正在使用“从选择中选择1…”。。。密级超过。。。从表k计算出的\u rk,其中计算出的\u rk=1…有趣。。。这是一个复杂的问题。