MongoDB +节点:未授权执行命令(有时有效,有时无效)

Posted

技术标签:

【中文标题】MongoDB +节点:未授权执行命令(有时有效,有时无效)【英文标题】:MongoDB + node: not authorized to execute command (sometimes works, sometimes doesn't) 【发布时间】:2017-01-15 01:26:19 【问题描述】:

我的 MongoDB 环境遇到问题 - 设置如下:

我的节点应用程序提供了一个处理用户注册的 restify API(根据他的邮件查找用户是否存在于集合中,如果不存在,则插入他(注意 - 插入使用 bcrypt 散列密码,所以可能是慢一点))。它使用 restify 和 Mongoose ORM。

第二个基准测试脚本(也在节点中编写,在同一台机器上运行)使用 HTTP PUT 访问这个 restify API。

我在基准测试中开始了大约 20-30 个这样的请求(使用随机数据),并且只有一些 API 请求正确地插入了新用户。另一方面,MongoDB 会产生类似于以下的错误:

未授权...执行命令 find: "users", filter: mail: "rroouksl@hddngrau.de"

无权执行命令 insert: "users", documents: [ ... ], ordered: false, writeConcern: w: 1

其他一些用户可以很好地插入。尤其是同时请求数量较少(1-5)时,不会出现问题。 Mongo 不应该能够处理这些“低”数量的请求吗?这是因为它在同一台机器上运行而有问题吗?我在 Mongo 中为这个项目创建的用户没有获得足够的 txns/秒吗?

最好的问候, 扎利伊

【问题讨论】:

我对Mongo了解不多,但是有没有可能是读锁或者写锁导致了这些错误呢?也许检查这篇文章写失败和锁定:rainforestqa.com/blog/… 我也遇到了这个问题,能告诉我如何解决这个问题吗? 【参考方案1】:

事实证明,mongo 仍在使用“旧”存储引擎,而不是 WiredTiger。由于我的查询包括更新记录,旧引擎执行基于集合的锁,这意味着错误完全基于读写锁。

我迁移到执行基于文档的锁定的 WiredTiger,从那时起,数据库处理许多并行请求而没有这些错误(尽管有时在重负载下它们会再次出现 - 但我猜这是 mongo 成为 NoSQL 的一部分)

【讨论】:

【参考方案2】:

你可以试试:

Db.authenticate(user, password, function(err, res) 
  // callback
);

还有see the source。

【讨论】:

以上是关于MongoDB +节点:未授权执行命令(有时有效,有时无效)的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose和Mongodb的随机错误:未授权执行命令

MongoDB - 未授权执行命令

MongoDB - 管理员用户未授权

MongoDB未授权访问漏洞复现及docker.mongodb下--auth授权验证

MongoDB用户授权和管理

MongoDB用户授权和管理