我正在为 node.js 使用 mongoDB 2.6.7 和 mongoose 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/