【问题标题】:MongoDB Atlas: user is not allowed to do action find on system.indexesMongoDB Atlas:不允许用户在 system.indexes 上执行操作查找
【发布时间】:2018-10-02 04:10:46
【问题描述】:

我正在使用 MongoDB Atlas,最近我的 MongoDB 副本开始出现此错误:

不允许用户对 [mydb.system.indexes] 执行操作 [查找]

什么都没有真正改变,所以我想知道可能是什么问题。用户在mydb 上拥有readWrite 角色,从docs 看来,它应该有权这样做。另外,我尝试将用户更改为具有任何权限的管理员用户,但仍然出现此错误。有趣的是 system 集合在 mydb 中不存在,但 Spring Data 尝试查询它并收到此错误。

这是来自 mongo 的完整日志:

Error: error: {
    "ok" : 0,
    "errmsg" : "user is not allowed to do action [find] on [mydb.system.indexes]",
    "code" : 8000,
    "codeName" : "AtlasError"
}

MongoDB 连接 URI 如下所示:

spring.data.mongodb.uri=mongodb+srv://[USER]:[PASSWORD]@[MONGO_URL].mongodb.net/mydb

我正在使用 Spring Boot 2.0.1.RELEASE 和版本为 3.6.3 的 mongo java 驱动程序。 Mongo 副本的版本是3.4.14。知道发生了什么以及如何解决这个问题吗?升级用户角色在这里没有帮助。

【问题讨论】:

  • systemevery mongodb 数据库命名空间中创建。只是当里面什么都没有的时候它就不存在了。错误信息可能更清楚,但基本上意味着您正在验证的用户没有阅读此信息的权限。从Built In Roles 这应该分配给继承read 角色的用户,并且大多数应用程序的通用角色通常应该是readWrite。如果您的用户没有这些角色(或继承自),则帐户设置不正确。

标签: mongodb spring-data-mongodb mongo-java mongo-java-driver mongodb-atlas


【解决方案1】:

MongoDB Atlas 禁止直接调用某些 system. 集合,他们指定应该使用 the docdb.<COLLECTION>.getIndexes() 来代替。在我的情况下,MongoBee 库正在拨打system.indexes 电话并导致问题。请参阅我的回答 here 了解更多详情。

【讨论】:

  • 更具体地说,listIndexes command 应该在 MongoDB 3.0+ 中使用(这与 db.collection.getIndexes shell 助手调用的命令相同)。对system.indexes 集合的直接访问是对遗留 MMAPv1 实现的继承:MongoDB 3.0 中存储引擎 API 的引入添加了一个受支持的命令接口。
  • 向 MongoBee 库提交了一个拉取请求,修复了 github.com/mongobee/mongobee/pull/87
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-01
  • 2020-01-11
  • 1970-01-01
  • 2013-09-25
  • 2013-11-08
  • 2015-02-06
  • 2018-09-07
相关资源
最近更新 更多