Mongoose驱动程序的Mongodb碎片上没有查询权限
我为node.js使用mongoDB 2.6.7和mongoose 3.8.23驱动程序。 数据库被分成2个分片(每个分开的副本),当我在任何实例,副本,mongos,configuration服务器等上inputmongo shell时,一切看起来都正常。
之后,我添加了pipe理员用户和用户 (名为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的身份login时,我可以查询任何内容,并且可以。
有谁知道为什么我不能做任何查询,虽然我已经readWriteangular色给用户,并指定在mongoose的连接URL的用户? 也许我错过了mongoose的东西?
我甚至试图把dbOwner的angular色放在normaluser上 ,但没有任何改变
谢谢,伊万
伊凡,尝试这个语法:
mongoose.createConnection('mongodb:// user:pass @localhost:port/db, ...', opts);