node.js - 未授权从 Mongoose 驱动程序查询 Mongodb 分片

标签 node.js mongodb mongoose

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

之后,我为要连接的特定数据库添加了 admin 用户和 user(名为 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 角色设置为 normaluser 但没有任何改变

谢谢, 伊万

最佳答案

Ivan,试试这个语法:

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

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

相关文章:

Mongodb 高页面错误和高锁但内存足够?

node.js - 没有回调的 Mongoose 更新

mongoose - TS2351 : Cannot use 'new' with an expression whose type lacks a call or construct signature. Mongoose

javascript - 根据条件复选框将字段添加到架构

javascript - Socket.io 服务端回调

node.js - 如何在 Windows 中更改 Node 版本?

node.js - 在同一个子进程中同时使用 stdio 和 stout

node.js - 无法获取鉴别器值mongodb nodejs

java - MongoDB中的查找不与外键_id进行比较

javascript - NodeJS - Uncaught ReferenceError : primordials is not defined