允许安全执行任意SQL所需的权限

fma*_*ark 5 sql security postgresql postgis sandbox

我想创建一个SQL沙箱,该沙箱将允许用户SELECT在PostGIS数据库中执行任意查询。本质上,我想允许用户访问以psql进行玩耍。

显然,如果允许写访问,这将是安全灾难。如何创建允许查询数据的系统,但是用户没有合理的可能性:

  1. 破坏数据库中的数据
  2. 获得对服务器的更广泛访问
  3. 用这样的查询破坏系统SELECT * from long_table, long_table, long_table, long_table, long_table, long_table, long_table将花费一生的时间来执行

请在回答中尽可能具体。

Mat*_*ood 3

正如其他人指出的那样,问题 #1 和问题 #2 是通过显式授予和撤销权限来处理的。

至于#3,

ALTER ROLE <rolename> SET statement_timeout = '60000'
Run Code Online (Sandbox Code Playgroud)

对我来说一直很有效。这将终止任何执行时间超过 1 分钟(60000 毫秒)的查询。我们在 phpPgAdmin 中的几个用户编写的查询导致问题后发现了这一点......