如何为有权访问多个数据库的用户在mongo中正确进行身份验证?

时间:2017-02-27 09:19:36

标签: node.js mongodb

我有一个角色为Compile的用户,它应该可以访问我的mongo实例中的所有数据库。我在node.js中使用{role: 'root', db:'admin'}与mongo进行交互。我的问题是它没有正确访问我的数据库。如果我使用

进行身份验证
mongoskin

它只是给了我mongodb://owner:mylocalpassword@localhost:27017/mydatabase 。如果我改为使用:

MongoError: Authentication failed

它进行身份验证,但我无法访问mongodb://owner:mylocalpassword@localhost:27017/admin

这是我的连接代码:

mydatabase

我认为,因为我在那里访问管理数据库,所以它是唯一与之交互的数据库。所以我试着这样做:

var connection = mongoskin.db("mongodb://owner:mylocalpassword@localhost:27017/admin", {journal:true, auto_reconnect:true})

但是当我使用它时,我的应用程序没有返回查询我知道有数据的集合的结果。我在这做错了什么?如何让此用户访问var mydatabaseConnection = connection.db('mydatabase') 以外的数据库?

1 个答案:

答案 0 :(得分:1)

好的,所以我发现mongoskin的db方法根本不起作用。最后,我被迫从我的代码库中完全删除了mongoskin。这里真正的答案是不要使用mongoskin。

此代码适用于mongo native:

MongoClient.connect("mongodb://owner:mylocalpassword@localhost:27017/admin", {journal: true, auto_reconnect:true}).then(function(db) {    
    console.log("Connected!")

    var mydb = db.db('mydatabase')

    var User = mydb.collection('User')
    return User.find({}).toArray().then(function(users) {
        console.log(users)
        db.close()        
    })
}).catch(function(e) {
    console.log(e.stack)
})