5

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

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

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

请在您的回答中尽可能具体。

4

5 回答 5

3

正如其他人所指出的,问题 #1 和 #2 是通过明确的 GRANT 和 REVOKE 权限处理的。

至于#3,

ALTER ROLE <rolename> SET statement_timeout = '60000'

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

于 2010-08-05T14:40:19.493 回答
2

好吧,您只需要创建一个角色,然后明确地授予只读访问权限即可访问您想要允许的内容。您不同意的任何事情,他们都不能做(只要他们不是超级用户)。

如果您已授予只读访问权限并且他们不是超级用户,则他们应该无法获得对底层系统的访问权限。这并不是说您不应该以非特权用户的身份安装 postgres,您应该 - 只是不需要完成您列出的内容。

好的,您编辑了您的帖子以包括发出疯狂的查询。我不相信 postgres 目前有办法限制每个用户的查询资源。

于 2010-08-05T06:34:16.880 回答
1

您可以以非特权用户身份安装 postgres,并以这种方式运行它。通过这种方式,您可以利用现有的系统权限来限制人们可以对数据库执行的操作,包括隔离他们对自己数据库的访问。请参阅本页底部的说明:

http://www.postgresql.org/docs/current/interactive/tutorial-start.html

如果您将其中的某些部分自动化,请说给人们一个“setup postgres”命令来运行,瞧。

于 2010-08-05T06:52:09.137 回答
1

对于#3,您是否可以编写一些代码来监视查询活动并使用 postgre 中的系统视图根据某些条件终止您认为疯狂的查询?

于 2010-08-05T13:41:50.530 回答
0

#3 当用户可以执行自己的 SQL 时,无法阻止。您需要一个执行预定义 SQL 的(小型)应用程序。在这里甚至 VIEW 都无法帮助您,每个人都可以加入几个视图来削弱您的系统。

于 2010-08-05T06:45:41.397 回答