gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:11:24 25 4
gpt4 key购买 nike

我已经成功地使用 dense_rank() over (order by...)其中 AFAIK 是一个窗口函数 - 在 postgres 的行级安全策略条件中。

然而,documentation

Any SQL conditional expression (returning boolean). The conditional expression cannot contain any aggregate or window functions

(重点是我的)。

有人可以解释这个限制并举例说明它适用的地方吗?

谢谢。

最佳答案

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

考虑下表:

+---------------------+----------------+
| field1 | field2 |
+---------------------+----------------+
| value1 | 1 |
| value1 | 2 |
| value1 | 3 |
| value2 | 4 |
+---------------------+----------------+

有几个(宽松的)策略:

  1. field1 = 'value1'
  2. field1 = 'value2'
  3. SUM(field2)> 10(禁止,但现在让我们想象一下您可以定义它)

您已获得策略 #2 和 3,因此您只能查看和更新​​最后一条记录。
... 直到您执行 UPDATE table SET value2 = 11

这在以下方面真的很糟糕:

  • 安全。您可以作为用户(而非管理员)“授予自己”对记录的访问权限。
  • 维护。记录会在这样的数据库中随机出现/消失。
  • 表现。此类政策的评估成本非常高。

有趣的是,您可以将策略定义为 MyField IN (SELECT MyOtherField FROM MyOtherTable),在这种情况下,它完全依赖于您在 MyOtherTable 上定义的内容(旨在与 FK/PK 一起使用)。

关于postgresql - Postgres 行级别安全策略条件中的聚合/窗口函数限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54167292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com