如何使用NodeJS以超级用户身份连接到另一个MongoDB数据库?
解决这个问题的工作很好:
而不是做:
$ mongo my_db_name -u superuser -p 1234
我做
$ mongo admin -u superuser -p 1234 # connecting as super user to admin db > use anotherDb
在壳。
哪个是NodeJS的解决scheme?
我试图连接到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
(用admin
取代my_db_name
),它连接成功。
如何使用superuser
和密码( 1234
)连接到my_db_name
?
解决方法是使用从Nodejs端执行的shell脚本:
mongo <<EOF use admin db.auth("superuser", "1234"); use another_db db.addUser({ user: "test", pwd: "12345", roles: ["userAdmin"] }); exit EOF
然后我可以使用下面的连接string: "mongodb://test:12345@localhost:27017/my_db_name"
。
这个解决scheme有效,但我仍然在寻找Mongo本地解决scheme。
您可以使用Db().db(dbname)
方法创build共享相同连接的新Db实例。
所以你可以validation到admin
数据库,并更改为another_db
:
db.auth("superuser", "1234"); another_db = db.db("another_db"); another_db.addUser({...}