【发布时间】:2012-11-30 18:33:02
【问题描述】:
我正在尝试为 mongodb 设置密码,以防止使用空登录名和密码访问 db(默认设置)。
我正在设置 mongo 服务器:
sudo ./mongod
启动客户端:
./mongo
设置密码:
use admin
db.addUser("root", "root")
exit
输出是:
MongoDB shell version: 2.2.0
connecting to: test
> use admin
switched to db admin
> db.addUser("root", "root")
{
"user" : "root",
"readOnly" : false,
"pwd" : "2a8025f0885adad5a8ce0044070032b3",
"_id" : ObjectId("50c90b94e28c41a388104f64")
}
> exit
但是,当我尝试使用空凭据进行身份验证时(我使用 mViever 管理 UI),它仍然有效。否则,无法使用 root/root 访问。我做错了什么?
也试过用-auth参数启动mongo服务器,结果一样:
./mongod -auth
UPD: 以-auth 参数启动后,任何密码都无法登录。获取:
Thu Dec 13 03:27:38 uncaught exception: error {
"$err" : "unauthorized db:admin ns:admin.system.users lock type:1 client:127.0.0.1",
"code" : 10057
}
更新:我不知道发生了什么......
> db.auth("root","root");
1
> ^C
bye
它可以登录。让我们重启./mongod --auth和./mongo:
MacBook-Pro-Ilya:bin ilyarusanen$ ./mongo
MongoDB shell version: 2.2.2
connecting to: test
> db.auth("root","root")
Error: { errmsg: "auth fails", ok: 0.0 }
0
> db.test.insert({"yeah":"2342"})
Fri Dec 14 08:52:05 uncaught exception: getlasterror failed: { "errmsg" : "need to login", "ok" : 0 }
> use admin
switched to db admin
> db.addUser("root","root")
Fri Dec 14 08:52:14 uncaught exception: error {
"$err" : "unauthorized db:admin ns:admin.system.users lock type:1 client:127.0.0.1",
"code" : 10057
}
> db.auth("root","root")
1
为什么一开始可以登录?为什么重新启动mongo后无法登录?为什么在尝试添加用户失败后,它变得能够登录?谢谢。
UPDATE2:MongoHub 似乎验证正常。但是,从 NodeJS 我仍然无法登录:我使用这样的代码:
mongo_db.open(function(err,data){
if(data){
data.authenticate("root", "root",function(err2,data2){
if(data2){
console.log("Database opened");
}
else{
console.log(err2);
}
});
} else {
console.log(err);
}
});
我得到:
{ [MongoError: auth fails] name: 'MongoError', errmsg: 'auth fails', ok: 0 }
但要提一下,具有相同凭据的 MongoHub 可以正常工作。
【问题讨论】:
-
您正在创建一个管理员用户,您是否在管理员数据库上使用
db.auth("root","root")?如您所见,您需要使用--auth重新启动该过程才能启用身份验证。 -
实际上,在切换到 -auth 选项后,我什至无法访问 mongo。我得到:未知主机。请检查 MongoDB 是否在给定的主机和端口上运行!错误。但是 mongo 在 27017 上运行,如果我关闭 -auth,它会照常工作(但是,我有一个新数据库“admin”)
标签: mongodb authentication passwords