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

时间:2010-08-05 06:26:27

标签: sql security postgresql sandbox postgis

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

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

  1. 妥协数据库中的数据
  2. 获得更广泛的服务器访问权限
  3. 使用SELECT * from long_table, long_table, long_table, long_table, long_table, long_table, long_table之类的查询来破坏系统,这将耗费一生的时间来执行
  4. 请在答案中尽可能具体。

5 个答案:

答案 0 :(得分:2)

嗯,你真的需要CREATE a ROLE,然后GRANT read only access明确要你想要允许的事情。你没有授予的任何东西,他们做不到(只要他们不是超级用户)。

如果您已授予只读访问权限并且他们不是超级用户,则他们应该无法访问底层系统。这并不是说你不应该把postgres作为一个没有特权的用户安装,你应该 - 只是没有必要完成你列出的内容。

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

答案 1 :(得分:2)

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

至于#3,

ALTER ROLE <rolename> SET statement_timeout = '60000'

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

答案 2 :(得分:1)

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

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

如果你自动完成了部分内容,请说给人们一个'setup postgres'命令来运行,瞧。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

当用户可以执行自己的SQL时,无法阻止

#3。您需要一个执行预定义SQL的(小)应用程序。甚至VIEW都不能帮助你,每个人都可以加入一些观点来削弱你的系统。