MongoError:不允许用户在[DB。$ cmd]上执行操作[listIndexes]

时间:2018-03-26 17:38:44

标签: mongodb mongoose

我的API代码使用最新的Mongoose 5.0.11和正确的Mongo 3.4连接字符串连接到免费的Atlas service

mongodb://someadmin:<PASSWORD>@ascatlas-shard-00-00-6fake.mongodb.net:27017,ascatlas-shard-00-01-6fake.mongodb.net:27017,ascatlas-shard-00-02-6fake.mongodb.net:27017/DB?ssl=true&replicaSet=ascatlas-shard-0&authSource=admin

执行此操作时,初始连接正常工作,但随后出现权限问题的错误无法在“DB数据库”中列出集合上的索引。我正在连接的用户凭据是Atlas Admin,因此不确定我可以提供哪些其他权限。有什么想法吗?

profile:mongoose MongoDB connection established +5s
profile:mongoose profiles ensureIndex { identityID: 1 } { unique: 1, background: true } +5ms

/API-User/node_modules/mongoose/lib/utils.js:423
        throw err;
        ^
MongoError: user is not allowed to do action [listIndexes] on [DB.$cmd]
    at queryCallback (/API-User/node_modules/mongodb-core/lib/cursor.js:223:25)
    at /API-User/node_modules/mongodb-core/lib/connection/pool.js:541:18
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

2 个答案:

答案 0 :(得分:1)

似乎用户没有listIndexes的权限 根据文件

  

必需的访问权限   执行该命令的用户需要查找system.indexes集合的权限或listIndexes权限操作。读取内置角色至少提供必要的权限。

答案 1 :(得分:0)

我不小心从连接字符串中删除了用户名,因此该用户名只有password应当位于username:password的位置,这会在任何数据库上导致此错误。