Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许安全执行任意sql所需的权限_Sql_Security_Postgresql_Sandbox_Postgis - Fatal编程技术网

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

允许安全执行任意sql所需的权限,sql,security,postgresql,sandbox,postgis,Sql,Security,Postgresql,Sandbox,Postgis,我想创建一个SQL沙盒,允许用户在PostGIS数据库中执行任意选择查询。本质上,我希望允许用户访问psql 显然,如果允许写访问,这将是一场安全灾难。我如何创建一个允许查询数据的系统,但不存在用户的合理可能性: 破坏数据库中的数据 获得对服务器更广泛的访问权限 使用SELECT*from long_table、long_table、long_table、long_table、long_table、long_table、long_table这样的查询来破坏系统,执行这些查询将花费一生的时间 请在

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

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

破坏数据库中的数据 获得对服务器更广泛的访问权限 使用SELECT*from long_table、long_table、long_table、long_table、long_table、long_table、long_table这样的查询来破坏系统,执行这些查询将花费一生的时间
请在回答中尽可能具体。

好吧,你真的需要这样做,然后明确你想要允许的事情。任何你不授予的东西,只要他们不是超级用户,他们就不能做

如果您已授予只读访问权限,而他们不是超级用户,则他们应该无法访问基础系统。这并不是说你不应该作为一个没有特权的用户安装postgres,你应该这样做——只是说你不需要完成你列出的任务


好的,你编辑了你的帖子,包括了疯狂的查询。我认为postgres目前没有办法限制每个用户的查询资源

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

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


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

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

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

至于第三条

ALTER ROLE <rolename> SET statement_timeout = '60000'

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

Damn。我有点希望linux上可能有类似于PAM的limits.conf的系统,但是对于数据库查询…它仍然可以杀死您的I/O,而这只是一个查询。每分钟进行一次查询,您的数据库仍然存在很多问题。没错,但这至少可以阻止一次性的意外查询,或者只是大脑死亡的严重错误查询,而这些查询将是大多数问题。在任何能够编写特殊查询的用户上添加了此设置的服务器上,我们都没有遇到任何其他问题。