gpt4 book ai didi

postgresql - 只允许 COUNT 到 Postgres 角色?

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

我需要为其他人创建一个 Postgres 用户来查询我的数据库,但不能让他们看到列的值,因为它是敏感数据,他们应该只能看到计数。他们需要能够对 where 进行计数,但是 where 子句有许多不同的可能排列。有什么办法吗?

最佳答案

我认为唯一能够灵活处理这种情况的是 SECURITY DEFINER function .基本上,这些函数中的查询的行为就好像它们是由函数的所有者运行的,而不是函数的调用者,允许调用者做他们通常没有权限(以受控方式)的事情。

当然,您需要小心在那里运行的内容,并且在将任何用户输入合并到您的查询中时,您需要异常偏执,如果您希望调用者指定他们自己的 WHERE 子句。用户定义的函数可能是不可能的,因为像 WHERE my_func(private_col) 这样的约束可以简单地将其输入写入某个表中。但是像 WHERE private_col = 1 这样无伤大雅的事情可能同样糟糕,如果调用者设法偷偷地在他们自己定义的 = 运算符中;务必lock down your search path编写这样的函数时。

除此之外,即使您有完美的解决方案,此设置也可能不像看起来那么安全。您可能不会直接公开这些值,但您仍然在公开有关这些值的信息,并且在多次查询过程中,这足以重建这些值本身。例如:

SELECT COUNT(*) FROM private_data WHERE creditcard >= '00000000' AND creditcard < '50000000';
SELECT COUNT(*) FROM private_data WHERE creditcard >= '25000000' AND creditcard < '50000000';
SELECT COUNT(*) FROM private_data WHERE creditcard >= '25000000' AND creditcard < '37500000';
...

这只需要 54 步就可以收敛到一个数字。即使是 100 个字符的字符串通常也只需要几百个查询就可以确定。

关于postgresql - 只允许 COUNT 到 Postgres 角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37785644/

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