The solution to this problem works fine:
Instead of doing:
$ mongo my_db_name -u superuser -p 1234
I do
$ mongo admin -u superuser -p 1234 # connecting as super user to admin db
> use anotherDb
in shell.
Which is the solution in NodeJS?
I tried to connect to mongodb://superuser:1234@localhost:27017/my_db_name
but I get this error:
{ [MongoError: auth fails] name: 'MongoError', code: 18, ok: 0, errmsg: 'auth fails' }
My code is:
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.");
}
);
Note that superuser is the omnipotent user that can write and read rights in any database.
If I do MongoClient.connect("mongodb://superuser:1234@localhost:27017/admin
(replaced my_db_name
with admin
) it connects successfully. Why?
How can I connect to the my_db_name
using superuser
and the password (1234
)?
A solution would be to use a shell script that is executed from Nodejs side:
mongo <<EOF
use admin
db.auth("superuser", "1234");
use another_db
db.addUser({
user: "test",
pwd: "12345",
roles: ["userAdmin"]
});
exit
EOF
Then I am able to use the following connection string: "mongodb://test:12345@localhost:27017/my_db_name"
.
This solution works, but I am still looking for the Mongo native solution.
You can use the Db().db(dbname)
method to create a new Db instance sharing the same connection.
So you can authenticate to the admin
db and change to another_db
:
db.auth("superuser", "1234");
another_db = db.db("another_db");
another_db.addUser({...}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With