我正在尝试为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管理界面),它仍然有效。否则,使用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后无法登录?为什么在FAILED尝试添加用户之后,它能够登录?感谢。
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可以正常工作。
答案 0 :(得分:8)
根据您的评论,您提到您正在使用mViewer。 mViewer 0.9.1版不支持身份验证。根据mViewer GitHub上的this issue,这在0.9.2版本中得到了解决,该版本的目标是在10月发布。
在使用身份验证启动节点之前,请登录该节点并添加用户。然后使用--auth
启动节点并连接到没有mViewer的shell。
此时,您可以连接到管理员数据库并验证您的管理员用户:
use admin
db.auth('root', 'root')
由于您设置了一个可以访问所有数据库的管理员用户,因此您需要对管理数据库进行身份验证。完成此操作后,您将可以访问所有数据库。您还可以在任何数据库上创建新用户,或为所有数据库创建新的只读用户。
如果您创建的新用户只能访问一个数据库,则该用户需要use
该数据库并db.auth(name, pass)
对其进行操作。
如果您创建的新用户具有对所有数据库的只读访问权限,他们将use admin
然后db.auth(name, pass)
获得对所有数据库的只读访问权限
您可以找到有关设置身份验证的更多信息here以及有关设置用户的更多信息here
注意:当您启动节点而没有 --auth
时,则不会启用身份验证。这意味着您可以与shell和db.auth('root','root')
建立连接,但就访问而言,它不会执行任何操作。如果没有--auth
命令行选项(分片设置或副本集中为--keyFile
),MongoDB将不会拒绝访问数据库。