gpt4 book ai didi

postgresql - 在 SELECT 中包装查询是否可以在 Postgres 中完全保护您

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

给定一个只能批量执行一个语句的客户端库,如果你运行

query.exec_sql("SELECT * FROM (" + sql + ")") 

sql 可以运行除 SELECT 之外的任何向量吗?

是否有任何其他方法可以暂时取消连接以使其只能执行 SELECT?

注意:看起来 SET ROLE 解决了这个问题,但我遇到的问题是我无法以简单的方式预先创建角色。

最佳答案

虽然您可以通过在 CTEs 中嵌入 INSERT/UPDATE/DELETE 语句来将数据修改语句放入查询中,它们只允许出现在顶层,所以这不是问题。

但是,您可以调用一个可以包含任何内容的函数。即使您在只读事务中运行它,函数也可能将其提升为读写。

但解决方案很简单:如果您不想让调用者做某事,就不要授予他们做这件事的权限。创建一个只有 GRANTs 的用户他们需要,您可以按原样执行 sql

如果无法定义权限,您最接近的可能是 read-only transaction和/或查询后的显式回滚,但仍然会有您无法填补的漏洞(例如,您无法回滚 setval() 调用)。

关于postgresql - 在 SELECT 中包装查询是否可以在 Postgres 中完全保护您,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24930723/

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