无法validation成mongo,“auth失败”

我已经使用这些方向为mongo创build了一个pipe理员用户:

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

从mongo客户端看起来我可以validation:

> use admin switched to db admin > db.auth('admin','SECRETPASSWORD'); 1 > 

但是我不能连接任何其他方式。 例如:

mongo -u admin -p SECRETPASSWORD

给出错误:

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

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

我错过了什么?

身份validation在数据库级别进行pipe理。 当您尝试使用数据库连接到系统时,mongo实际上会检查您在集合<database>.system.users提供的凭据。 所以,基本上当你试图连接到“test”时,它会在test.system.users查找凭证,并返回一个错误,因为找不到它们(因为它们存储在admin.system.users )。 有权读取和写入所有数据库并不意味着你可以直接连接到它们。

您必须首先连接到持有证书的数据库。 尝试:

 mongo admin -u admin -p SECRETPASSWORD 

欲了解更多信息,请查看http://docs.mongodb.org/manual/reference/privilege-documents/

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

mongo -u admin -p SECRETPASSWORD –authenticationDatabase admin

2017年11月18日更新:

 mongo admin -u admin -p 

是更好的解决scheme。 Mongo会提示你input你的密码,这样你就不会把你的明文密码放到shell历史logging中,这只是非常糟糕的安全措施。

你可能需要升级你的mongo shell。 我在本地有mongo shell的2.4.9版本,我得到这个错误,试图连接到mongo 3数据库。 将shell版本升级到3解决了这个问题。

我知道这可能看起来很明显,但我还必须在u / n和p / w之前使用单引号

mongo admin -u'user'-p'password'

在MongoDB 3.0中,它现在支持多种身份validation机制。

  1. MongoDB质询和响应(SCRAM-SHA-1) – 默认在3.0
  2. MongoDB质询和响应(MONGODB-CR) – 之前的默认值(<3.0)

如果您从创build新用户开始使用新的3.0数据库,则会使用SCRAM-SHA-1创build它们。

所以你将需要一个能够进行authentication的驱动程序:

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

如果您使用现有的用户数据从2.x升级了数据库,则仍然使用MONGODB-CR,并且必须升级用户身份validation数据库:

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

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

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

在这种情况下,也将使用默认的“admin”数据库进行身份validation。

看来问题在于,通过mongo文档中描述的方法创build的用户没有连接到默认数据库(test)的权限,即使该用户是使用“userAdminAnyDatabase”和“dbAdminAnyDatabase”angular色创build的。

这解决了我的问题:

去terminalshell并键入mongo

然后键入use db_name

然后键入:

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

另请尝试: 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); }); 

这是一个特定的情况,但如果有人在这里遇到我的问题:

在MongoHQ中,它会显示一个名为“密码”的字段,但实际上只是密码的散列。 您必须添加一个新用户并在其他地方存储密码(因为MongoHQ不会显示给您)。

登入mongo shell的正确方法是

mongo localhost:27017 -u'uuuuu'-p'> xxxxxx'–authenticationDatabase dbname

你也可以试试这个:

 mongo localhost:27017/admin -u admin -p SECRETPASSWORD 

在这篇文章中find它

在这里,显然本地主机可以是其他主机,而/ admin可以是应用了authentication的其他数据库