无法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机制。
- MongoDB质询和响应(SCRAM-SHA-1) – 默认在3.0
- 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的其他数据库