MongoDB:设置用户/密码以访问数据库

MongoDB:设置用户/密码以访问数据库,mongodb,authentication,passwords,Mongodb,Authentication,Passwords,我正在尝试为mongodb设置密码,以防止使用空登录名和密码(默认设置)访问db 我是statring 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(

我正在尝试为mongodb设置密码,以防止使用空登录名和密码(默认设置)访问db

我是statring 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 server,结果相同:

./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无法登录?为什么在尝试添加用户失败后,它可以登录?谢谢

更新2: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可以正常工作。

从您的评论中,您提到您正在使用mViewer。mViewer的0.9.1版不支持身份验证。根据mViewer GitHub上的消息,这在版本0.9.2中得到了解决,该版本的目标是在10月发布

在使用身份验证启动节点之前,请登录到该节点并添加用户。然后用
--auth
启动节点,并在不使用mViewer的情况下连接到shell

此时,您可以连接到管理员数据库并对管理员用户进行身份验证:

use admin
db.auth('root', 'root')
由于您设置了一个管理员用户,该用户可以访问所有数据库,因此您需要对管理员数据库进行身份验证。完成此操作后,您将可以访问所有数据库。您还可以在任何数据库上创建新用户,或为所有数据库创建新的只读用户

如果您创建了一个只能访问一个数据库的新用户,则该用户需要
使用该数据库并对其
db.auth(name,pass)

如果您创建了一个对所有数据库都具有只读访问权限的新用户,那么他们将
使用admin
,然后
db.auth(name,pass)
获得对所有数据库的只读访问权限

您可以找到有关设置身份验证的更多信息以及有关设置用户的更多信息


注意:如果启动节点时没有
--auth
,则不会启用身份验证。这意味着您可以连接shell并
db.auth('root','root')
,但就访问而言,它不会做任何事情。MongoDB不会拒绝访问没有
--auth
命令行选项的数据库(
--keyFile
在分片设置或副本集中)

您正在创建管理员用户,是否在管理员数据库上使用
db.auth(“root”,“root”)
?如您所见,您需要使用
--auth
重新启动进程才能启用身份验证。实际上,切换到-auth选项后,我甚至无法访问mongo。我得到:不知名的主持人。请检查MongoDB是否在给定主机和端口上运行!错误。但mongo是在27017上运行的,如果我关闭-auth,它会像往常一样工作(不过,我有了一个新的数据库“admin”),我使用了教程,没有任何问题。如果您试图从本地主机连接,请查看说明。是的,我当前的版本是mViewer-v0.9.1,因为他们官方github上唯一可访问的版本是0.9.1。谢谢你的评论,我将尝试另一个UI,稍后再写。如果你不使用mViewer,你能连接和验证吗?另外,如果您需要使用mViewer,您可以克隆GitHub repo并构建最新版本;它返回我1。现在,验证过程成功了,是吗?我已经更新了答案,但基本上第一个例子中的问题是,您正在尝试针对测试数据库进行验证-管理员用户针对管理员数据库进行验证。谢谢,我已经知道了。要访问我的数据库,我应该登录,使用use切换到我的数据库,为这个数据库添加用户。