如何使用NodeJS以超级用户身份连接到另一个MongoDB数据库?

时间:2013-12-13 09:49:53

标签: node.js security mongodb

this problem的解决方案很好用:

而不是:

$ mongo my_db_name -u superuser -p 1234

我做

$ mongo admin -u superuser -p 1234 # connecting as super user to admin db
> use anotherDb

在shell中。


NodeJS中的哪个解决方案?

我尝试连接到mongodb://superuser:1234@localhost:27017/my_db_name但我收到此错误:

  

{ [MongoError: auth fails] name: 'MongoError', code: 18, ok: 0, errmsg: 'auth fails' }

我的代码是:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://superuser:1234@localhost:27017/my_db_name",
    function(err, db) {
       if (err) { return console.log(err); }
       console.log("Successfully connected.");
    }
); 

请注意,超级用户是无所不能的用户,可以在任何数据库中读取权限。

如果我执行MongoClient.connect("mongodb://superuser:1234@localhost:27017/admin(将my_db_name替换为admin),则表示已成功连接。为什么呢?

如何使用my_db_name和密码(superuser)连接到1234

2 个答案:

答案 0 :(得分:3)

解决方案是使用从Nodejs端执行的shell脚本:

mongo <<EOF
use admin
db.auth("superuser", "1234");
use another_db
db.addUser({
   user: "test",
   pwd: "12345",
   roles: ["userAdmin"]
});
exit
EOF

然后我可以使用以下连接字符串:"mongodb://test:12345@localhost:27017/my_db_name"

此解决方案有效,但我仍在寻找Mongo原生解决方案。

答案 1 :(得分:3)

您可以使用Db().db(dbname)方法创建共享相同连接的新Db实例。

因此,您可以对admin数据库进行身份验证,然后更改为another_db

db.auth("superuser", "1234");
another_db = db.db("another_db");
another_db.addUser({...}