Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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 为什么不建议在MongoDB中使用服务器端存储函数?_Security_Mongodb_Stored Functions - Fatal编程技术网

Security 为什么不建议在MongoDB中使用服务器端存储函数?

Security 为什么不建议在MongoDB中使用服务器端存储函数?,security,mongodb,stored-functions,Security,Mongodb,Stored Functions,根据MongoDB的说法,不建议使用服务器端存储函数。这一警告背后的原因是什么?尽管谷歌搜索结果中只有告诉你如何做的人,但我肯定我已经多次列出了该列表: 它是eval eval具有易于注入的自然能力,它就像SQL的非PDO等价物,如果你不在它周围建立一个完整的转义库,它会把你搞砸。通过使用这些函数,您可以有效地将更安全的MongoDB本机语言替换为与任何旧SQL一样不安全的语言 它具有全局锁,可以具有写锁,并且在操作完全完成之前不会释放,这与在某些情况下会释放的其他操作不同 eval仅适用于原

根据MongoDB的说法,不建议使用服务器端存储函数。这一警告背后的原因是什么?

尽管谷歌搜索结果中只有告诉你如何做的人,但我肯定我已经多次列出了该列表:

  • 它是
    eval
  • eval
    具有易于注入的自然能力,它就像SQL的非PDO等价物,如果你不在它周围建立一个完整的转义库,它会把你搞砸。通过使用这些函数,您可以有效地将更安全的MongoDB本机语言替换为与任何旧SQL一样不安全的语言
  • 它具有全局锁,可以具有写锁,并且在操作完全完成之前不会释放,这与在某些情况下会释放的其他操作不同
  • eval
    仅适用于原色,而不适用于复制集的任何其他成员
  • 它基本上是在一个捆绑的V8/spidermonkey envo中运行的,未经检查的,一吨JS,MongoDB提供了完全能够接触数据库和管理命令任何部分的功能,这听起来安全吗
  • 它不是蒙哥大,也不是“MundBBS SQL”,它运行在内置JS环境中,而不是MundB C++代码本身(不像聚合框架)。
  • 由于前一点,与许多其他选项相比,它的速度非常慢,这也适用于
    $where
    使用

这应该足以让您开始这方面的工作。

好的,谢谢!关于这句话:“由于前一点,与许多其他选项相比,它的速度非常慢……”。我相信当你写这篇文章时,你的意思是读操作慢,对吗?我的问题是:我对集合中的每个文档都执行了一个函数,当使用mongodb nodejs本机驱动程序时,读更新写速度非常慢。关于EduardoMelo的任何操作,JavaScript在执行时比任何一天C++代码都要慢,不仅如此,而且它不是原生地放入JS中,即JS EnEnE被启动,线程被生成,C++代码通过JS函数运行引擎。嗯,如果它覆盖了每个文档,那么它听起来像是一个一次性命令,我会通过与主MongoDB相同的服务器上的控制台执行此操作。关于锁定/并发性/性能的问题仍然有效吗?当前的文档表明,从版本2.4开始,默认的JavaScript引擎现在“允许同时执行多个JavaScript操作”,而无需获取锁@我不确定我没有测试它是坦率的,但是它仍然不是本地的C++代码和优化,你可以在MunGDB中的聚合框架或本地C++代码中装饰。exist@StevePerkins你能告诉我什么是使用存储函数的正确方法吗,或者如果这些都不推荐,哪一个是最好的选择??