我使用以下说明为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/
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历史记录中,这只是一种糟糕的安全措施.
lmy*_*ers 36
您可能需要升级您的mongo shell.我本地有mongo shell版本2.4.9,我尝试连接到mongo 3数据库时遇到此错误.将shell版本升级到3解决了这个问题.
小智 29
我知道这看起来很明显,但我还必须在它工作之前使用u/n和p/w周围的单引号
mongo admin -u'用户'-p'密码'
小智 17
在MongoDB 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)
归档时间: |
|
查看次数: |
187969 次 |
最近记录: |