MongoDB:所有命令都吐出“管理员无权执行命令”

Ora*_*cle 5 mongodb

蒙戈版本:3.2.11

我使用 DigitalOcean 启动了一个 mongoDB Droplet,这样我就可以将一个数据库连接到我的小游戏。然而,并发症接踵而至。我正在通过 PuTTY 连接到 Droplet,并且之前能够调用“mongo”,然后键入“show dbs”以查看所有当前数据库。

我一直在更改 /etc/mongod.conf 文件以允许远程连接,从那时起 - 我调用的任何命令都会返回一条错误消息:

只是通过一个简单的 show dbs - 我明白了。

> show dbs
2016-12-28T00:12:26.655+0000 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
        "code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么会这样,我一直在网上搜寻任何可能解决这个问题的东西。

PS:我通过取消注释 security 并添加 authorization: 'enabled' 以及注释掉 net 下的 bindIp: 127.0.0.1 来更改 /etc/mongod.conf 文件。

小智 5

让我们试试这个:

连接到您的 DO 水滴。

在 /etc/mongod.conf 中,注释掉 'security' 并将 bindIp 恢复为值 127.0.0.1

重新启动您的 mongod 实例。

连接到 mongo(此时没有安全性)。

在 mongo 中创建管理员用户,如下所示:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Run Code Online (Sandbox Code Playgroud)

确保用户已成功创建。

返回到 /etc/mongod.conf。将您的bindIp值设置为:127.0.0.1,YOUR_DO_DROPLET_IP(之间没有空格)。

取消注释“安全”,保留“身份验证”注释,在其下方添加“授权:已启用”

重新启动服务器的 mongod 实例。

使用以下命令远程连接到 mongod:

mongo YOUR_DO_DROPLET_IP -u myUserAdmin -p --authenticationDatabase admin
Run Code Online (Sandbox Code Playgroud)

参考资料: MongoDB 身份验证 启用 MongoDB 身份验证

  • 我以“超级”身份连接,并且在管理数据库上拥有“userAdminAnyDatabase”角色。当我在 MongoDB v 3.4 上使用 adminCommand (setFeatureCompatibilityVersion) 时,我仍然收到该错误(我想升级到 3.6) (2认同)