【发布时间】:2013-08-30 15:57:42
【问题描述】:
我正在创建一个允许用户构建复杂 SELECT 语句的应用程序。生成的 SQL 是不可信的,完全是任意的。
我需要一种方法来相对安全地执行不受信任的 SQL。我的计划是创建一个仅对相关架构和表具有 SELECT 权限的数据库用户。不受信任的 SQL 将以该用户身份执行。
这有什么可能出错? :)
如果我们假设 postgres 本身没有严重漏洞,那么用户可能会执行大量交叉连接并导致数据库过载。这可以通过会话超时来缓解。
我觉得还有很多事情不会出错,但我无法列出清单。
编辑:
根据迄今为止的 cmets/answers,我应该注意到在任何给定时间使用此工具的人数将非常接近 0。
【问题讨论】:
-
将 SQL 和用户名发送到存储过程,并在事务中设置回滚?
-
PostGres 似乎没有能力限制特定查询使用的资源。如果这是正确的,那么对于这种类型的应用程序来说这是一个糟糕的选择:wiki.postgresql.org/wiki/Priorities PostgreSQL 无法限制特定用户、查询或数据库消耗的资源,
-
您可以为不受信任的查询设置只读副本。这样他们就不会以任何方式影响主服务器。
标签: sql security postgresql user-input privileges