我想创建一个 SQL 沙箱,允许用户在 PostGIS 数据库中执行任意 SELECT
查询。本质上,我想允许用户访问 psql
来玩。
显然,如果允许写访问,这将是一场安全灾难。我如何创建一个允许查询数据的系统,但用户没有合理的可能性:
- 破坏数据库中的数据
- 更广泛地访问服务器
- 使用像
SELECT * from long_table, long_table, long_table, long_table, long_table, long_table, long_table
这样的查询来削弱系统,这将花费一生的时间来执行
请在您的回答中尽可能具体。
最佳答案
问题 #1 和 #2 是通过显式 GRANT 和 REVOKE 权限处理的,正如其他人所指出的那样。
至于#3,
ALTER ROLE <rolename> SET statement_timeout = '60000'
一直对我很有效。这将终止执行时间超过 1 分钟(60000 毫秒)的任何查询。我们在 phpPgAdmin 中有几个用户编写的查询导致问题后发现了这一点......
关于sql - 允许安全执行任意sql所需的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3412248/