无法验证进入mongo,"auth失败"

jus*_*vin 80 mongodb

我使用以下说明为mongo创建了一个管理员用户:

http://docs.mongodb.org/manual/tutorial/add-user-administrator/

从mongo客户端看起来我可以进行身份​​验证:

> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>
Run Code Online (Sandbox Code Playgroud)

但我不能以任何其他方式连接.例如:

mongo -u admin -p SECRETPASSWORD

给出错误:

JavaScript执行失败:错误:18 {code:18,ok:0.0,errmsg:"auth failed"}在src/mongo/shell/db.js:L228

我在etc/mongod.conf中有auth = true.

我错过了什么?

小智 89

身份验证在数据库级别进行管理.当您尝试使用数据库连接到系统时,mongo实际上会检查您在集合中提供的凭据<database>.system.users.因此,基本上当您尝试连接到"test"时,它会查找凭据test.system.users并返回错误,因为它无法找到它们(因为它们存储在其中admin.system.users).拥有从所有数据库读取和写入的权利并不意味着您可以直接连接到它们.

您必须首先连接到保存凭据的数据库.尝试:

mongo admin -u admin -p SECRETPASSWORD
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请查看此http://docs.mongodb.org/manual/reference/privilege-documents/

  • 如下所述,在另一个答案中(但我错过了,因为我只看了投票率最高的那个),我需要在用户名和密码前加上“单引号” (2认同)
  • 是的,如果你使用双引号,愚蠢的 bash 可能会做各种令人讨厌的事情。 (2认同)

Cha*_* E. 67

我也收到了这个错误,我需要的是指定存储用户身份验证数据的数据库:

mongo -u admin -p SECRETPASSWORD --authenticationDatabase admin

2017年11月18日更新:

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

是一个更好的解决方案 Mongo将提示您输入密码,这样您就不会将明文密码放入shell历史记录中,这只是一种糟糕的安全措施.

  • 是的,此答案有效!将其与@gilo的答案结合使用,以下命令对我有用:“ mongo MYDB -u admin -p SECRETPASSWORD --authenticationDatabase admin” (2认同)

lmy*_*ers 36

您可能需要升级您的mongo shell.我本地有mongo shell版本2.4.9,我尝试连接到mongo 3数据库时遇到此错误.将shell版本升级到3解决了这个问题.

  • 如文档中所述:3.0之前的mongo shell版本与强制访问控制的MongoDB 3.0部署不兼容.如果您的3.0 MongoDB部署需要访问控制,则必须使用3.0版本的mongo shell. (7认同)

小智 29

我知道这看起来很明显,但我还必须在它工作之前使用u/n和p/w周围的单引号

mongo admin -u'用户'-p'密码'

  • 那不明显! (4认同)
  • 我偶然发现了您的答案,因为`mongo -u &lt;myuser&gt; -p &lt;mypasswd`无效。为什么在这里admin会有所作为? (2认同)
  • 它告诉mongo使用数据库管理员。如果您创建另一个数据库,并将用户分配给该数据库,则它将为mongo &lt;another_database&gt; -u user -p password (2认同)

小智 17

在MongoDB 3.0中,它现在支持多种身份验证机制.

  1. MongoDB质询和响应(SCRAM-SHA-1) - 默认为3.0
  2. MongoDB挑战和响应(MONGODB-CR) - 以前的默认值(<3.0)

如果您在创建新用户的情况下开始使用新的3.0数据库,则可以使用SCRAM-SHA-1创建它们.

所以你需要一个能够进行身份验证的驱动程序:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers

如果您使用现有用户数据从2.x升级数据库,他们仍将使用MONGODB-CR,并且必须升级用户身份验证数据库:

http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram

现在,需要使用SCRAM-SHA-1创建的用户连接到MongoDB 3.0,以指定身份验证数据库(通过命令行mongo客户端),并使用其他机制(如果使用驱动程序).

$> mongo -u USER -p PASSWORD --authenticationDatabase admin

在这种情况下,"admin"数据库(也是默认值)将用于进行身份验证.


jus*_*vin 13

出现的问题是,通过在蒙戈文档中描述的方法创建的用户没有权限连接到默认数据库(测试),即使该用户是用"userAdminAnyDatabase"和"dbAdminAnyDatabase"角色创建.


agm*_*984 12

这解决了我的问题:

转到终端shell并输入mongo.

然后输入use db_name.

然后输入:

 db.createUser(
   {
     user: "mongodb",
     pwd: "dogmeatsubparflavour1337",
     roles: [ { role: "dbOwner", db: "db_name" } ]
   }
 )
Run Code Online (Sandbox Code Playgroud)

还试试: db.getUsers()

快速样品:

const MongoClient = require('mongodb').MongoClient;

// MongoDB Connection Info
const url = 'mongodb://mongodb:dogmeatsubparflavour1337@stackoverflow.com:27017/?authMechanism=DEFAULT&authSource=db_name';
// Additional options: https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options

// Use Connect Method to connect to the Server
MongoClient.connect(url)
  .then((db) => {
    console.log(db);
    console.log('Casually connected correctly to server.');
    // Be careful with db.close() when working asynchronously
    db.close();
  })
  .catch((error) => {
    console.log(error);
  });
Run Code Online (Sandbox Code Playgroud)

  • 添加: 1.首先使用mongodb superadmin登录admin数据库:```mongo 'mongodb://localhost:27017/admin' -u admin -p``` 2.然后切换到目标数据库:```&gt;使用 targetDb``` 3. 然后添加用户 ```&gt; db.createUser(...)``` (2认同)