Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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
Security PostgreSQL中语句\u timeout变量的严格控制_Security_Postgresql_Cpu Usage - Fatal编程技术网

Security PostgreSQL中语句\u timeout变量的严格控制

Security PostgreSQL中语句\u timeout变量的严格控制,security,postgresql,cpu-usage,Security,Postgresql,Cpu Usage,有人知道如何限制用户设置变量的能力吗?特别是超时 无论我是否将用户更改为将此变量设置为分钟,或者在postgresql.conf文件中将其设置为分钟,用户始终可以键入set语句\u timeount to 0;完全禁用该会话的超时 有人知道阻止这一切的方法吗?我知道有些变量只能由超级用户更改,但我不知道是否有办法将其强制为这些受控变量之一。或者,是否有方法从其角色中撤消SET 在我的应用程序中,此变量用于限制随机用户(用户注册对公众开放)使用(接近)无限查询耗尽所有CPU时间的能力。如果他们可以

有人知道如何限制用户设置变量的能力吗?特别是超时

无论我是否将用户更改为将此变量设置为分钟,或者在postgresql.conf文件中将其设置为分钟,用户始终可以键入set语句\u timeount to 0;完全禁用该会话的超时

有人知道阻止这一切的方法吗?我知道有些变量只能由超级用户更改,但我不知道是否有办法将其强制为这些受控变量之一。或者,是否有方法从其角色中撤消SET

在我的应用程序中,此变量用于限制随机用户(用户注册对公众开放)使用(接近)无限查询耗尽所有CPU时间的能力。如果他们可以禁用它,那就意味着我必须找到一种新的方法来限制用户的资源。如果没有保护此变量的方法,是否有其他方法可以实现您可能建议的相同目标

编辑2011-03-02 该数据库向公众开放且允许使用任意SQL的原因是,该项目用于直接在数据库中玩的游戏。每个玩家都是数据库用户。数据被锁定在视图、规则和触发器后面,CREATE从public中撤销,player角色被移除以防止对模式的大多数更改,SELECT on pg_proc被移除以保护游戏敏感功能代码

这不是我向全世界开放的关键任务系统。这是一个奇怪的概念证明,将异常数量的信任放在数据库中,试图在其中维护整个CIA安全三角

谢谢你的帮助,
Abstrct

无法覆盖此功能。如果您允许用户运行任意SQL命令,那么更改语句\u超时只是冰山一角。。。如果你不信任你的用户,你不应该让他们运行任意的SQL,或者接受他们可以运行任意的SQL。并且有某种外部监视器来取消查询。

没有办法覆盖它。如果您允许用户运行任意SQL命令,那么更改语句\u超时只是冰山一角。。。如果你不信任你的用户,你不应该让他们运行任意的SQL,或者接受他们可以运行任意的SQL。并且有一些外部监视器来取消查询。

基本上你不能在普通的postgres中这样做。 同时,为了实现您的目标,您可以使用某种类型的代理并重写/禁止某些查询

有几种解决方案,例如:

  • -它是如何诞生的(俄语)
  • +
  • Last包含非常简单的Python操作:

    import re
    def rewrite_query(username, query):
        q1="SELECT storename, SUM\(total\) FROM sales JOIN store USING \(storeid\) GROUP BY storename ORDER BY storename"
        q2="SELECT prodname, SUM\(total\) FROM sales JOIN product USING \(productid\) GROUP BY prodname ORDER BY prodname"
        if re.match(q1, query):
            new_query = "SELECT storename, SUM(total) FROM store_sales GROUP BY storename ORDER BY storename;"
        elif re.match(q2, query):
            new_query = "SELECT prodname, SUM(total) FROM product_sales GROUP BY prodname ORDER BY prodname;"
        else:
            new_query = query
        return new_query
    

    基本上你不能在普通的博士后中这样做。 同时,为了实现您的目标,您可以使用某种类型的代理并重写/禁止某些查询

    有几种解决方案,例如:

  • -它是如何诞生的(俄语)
  • +
  • Last包含非常简单的Python操作:

    import re
    def rewrite_query(username, query):
        q1="SELECT storename, SUM\(total\) FROM sales JOIN store USING \(storeid\) GROUP BY storename ORDER BY storename"
        q2="SELECT prodname, SUM\(total\) FROM sales JOIN product USING \(productid\) GROUP BY prodname ORDER BY prodname"
        if re.match(q1, query):
            new_query = "SELECT storename, SUM(total) FROM store_sales GROUP BY storename ORDER BY storename;"
        elif re.match(q2, query):
            new_query = "SELECT prodname, SUM(total) FROM product_sales GROUP BY prodname ORDER BY prodname;"
        else:
            new_query = query
        return new_query
    

    您允许随机用户连接到您的数据库并运行命令?人们称您为疯子,但PostgreSQL提供用户权限甚至行级权限正是因为不信任客户端。也就是说,禁用
    语句\u timeout
    实际上没有任何作用。客户端仍然可以发出任意数量的请求,除非您有一些系统限制性能。您允许随机用户连接到您的数据库并运行命令?人们称您为疯子,但PostgreSQL提供用户权限甚至行级权限正是因为不信任客户端。也就是说,禁用
    语句\u timeout
    实际上没有任何作用。客户机仍然可以发出任意数量的请求,除非您有一些系统限制perf.Drats。不是我希望听到的。我的项目的全部目的是让不受信任的用户运行任意代码,这样这一部分就不会改变。除非有人知道更好的方法,否则我会考虑写一些过程监控的东西。感谢您的回复。我认为这是一个非常有效的用例。sad PG不允许这种细粒度的访问控制类型。从管理员的角度来看,我不信任系统上的任何用户。我只允许他们访问他们需要做的事情,所以拥有Abstrct要求的东西真的很好。将set_语句_超时授予GRANY_USER100如何;谢谢星际3000,很高兴知道不是所有的人都认为我疯了。我不认为对授权集的要求会太高,但我想这并不是PostgreSQL项目的重点。很抱歉发垃圾评论,但是,Magnus,当你提到“更改语句超时只是冰山一角”时,有没有可能对此进行详细说明?我已经花了很多时间和精力来确保数据库中的数据安全,但我总是很欣赏一种新的观点,因为你可能知道一些我没有想到要强化的东西。首先,如果你可以运行任意SQL,你可以运行一些生成巨大临时数据文件的东西,例如。这将耗尽您的磁盘空间。目前也没有办法限制这一点。我想如果你把你的语句超时设置得很低,你可以避免大多数DOS风格的问题(如果你可以锁定它),但是你也会使数据库变得不那么有用…Drats。不是我希望听到的。我的项目的全部目的是让不受信任的用户运行任意代码,这样这一部分就不会改变。除非有人知道更好的方法,否则我会考虑写一些过程监控的东西。感谢您的回复。我认为这是一个非常有效的用例。sad PG不允许这种细粒度的访问控制类型。从管理员的角度来看,我不信任系统上的任何用户。我只给他们需要做的事情,让他们拥有Abs