我正在使用 node.js mongoDB 2.6.7 mongoose 3.8.23 驱动程序。
数据库分为2个分片(每个分片都是单独的副本),当我在实例,副本,mongos,配置服务器等中的任何一个上输入mongo shell时,一切看起来都正常。

之后,我为我要连接的特定数据库添加了管理员用户和用户(名为normaluser)。我已经在 mongos 实例上添加了它们。用户是:

[
{
    "_id" : "admin.adminuser",
    "user" : "adminuser",
    "db" : "admin",
    "roles" : [
        {
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "readWriteAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "clusterAdmin",
            "db" : "admin"
        }
    ]
}
]


[
{
    "_id" : "mydb.normaluser",
    "user" : "normaluser",
    "db" : "mydb",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "mydb"
        }
    ]
}

]

从我的node.js应用程序中,我正在连接到mongos实例(我有2个mongos实例),如下所示:
mongoose.createConnection('mongodb://mongos-ip-1:27018,mongos-ip-2:27018/mydb', {user : 'normaluser', password : 'some-password', mongos : true, server : {poolSize : 5, keepAlive : true}}

我已成功连接到数据库,但是当我尝试从应用程序查询 mydb.some-collection 时,出现此错误:
 Possibly unhandled MongoError: not authorized for query on mydb.some-collection

当我在某些mongos实例上进入mongo shell并以 normaluser 身份登录时,我可以查询任何内容,这是可以的。

有谁知道为什么我虽然对用户具有readWrite角色并在 Mongoose 的连接URL中指定了用户,但为什么不能进行任何查询?也许我缺少 Mongoose 的东西?

我什至尝试将 dbOwner 角色设置为普通用户,但未进行任何更改

谢谢,
伊万

最佳答案

伊凡,请尝试以下语法:

mongoose.createConnection('mongodb://user:pass@localhost:port/db, ...', opts);

关于node.js - 未授权从Mongoose驱动程序查询Mongodb碎片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28541855/

10-09 21:23