代码之家  ›  专栏  ›  技术社区  ›  fmark

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

  •  4
  • fmark  · 技术社区  · 14 年前

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

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

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

    请尽可能具体地回答。

    5 回复  |  直到 14 年前
        1
  •  3
  •   Matthew Wood    14 年前

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

    至于#3,

    ALTER ROLE <rolename> SET statement_timeout = '60000'
    

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

        2
  •  2
  •   rfusca    14 年前

    CREATE a ROLE 然后 GRANT read only access

    如果您授予了只读访问权限,而他们不是超级用户,那么他们就不能访问底层系统。这并不是说你不应该把postgres作为一个没有特权的用户来安装,你应该-仅仅是不需要完成你列出的任务。

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

        3
  •  1
  •   Frank Heikens    14 年前

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

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

    如果你自动化了其中的一部分,比如说给人们一个“setuppostgres”命令来运行,瞧。

        4
  •  1
  •   Kuberchaun    14 年前

        5
  •  0
  •   Frank Heikens    14 年前

    #当用户可以执行自己的一段SQL时,3是无法阻止的。您需要一个执行预定义SQL的(小型)应用程序。在这里,即使视图也帮不了你,每个人都可以加入几个视图来破坏你的系统。