未授权从Mongoose驱动程序查询Mongodb分片

Iva*_*gin 8 mongoose mongodb node.js

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

之后,我为我正在连接的特定数据库添加了admin用户和用户(名为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"
        }
    ]
}
]
Run Code Online (Sandbox Code Playgroud)

[
{
    "_id" : "mydb.normaluser",
    "user" : "normaluser",
    "db" : "mydb",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "mydb"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

]

从我的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}}
Run Code Online (Sandbox Code Playgroud)

我已成功连接到数据库但是当我尝试从应用程序查询mydb.some-collection时出现此错误:

 Possibly unhandled MongoError: not authorized for query on mydb.some-collection
Run Code Online (Sandbox Code Playgroud)

当我在某些mongos实例上访问mongo shell并以normaluser身份登录时,我可以查询任何内容并且没问题.

有没有人知道为什么我不能进行任何查询虽然我有用户的readWrite角色并在mongoose的连接url中指定用户?也许我错过了猫鼬的东西?

我甚至试图将dbOwner角色放到normaluser上但没有改变

谢谢,伊万

小智 2

伊万,试试这个语法:

mongoose.createConnection('mongodb://user:pass@localhost:port/db, ...', opts);
Run Code Online (Sandbox Code Playgroud)