我有一个 MongoDB 服务器,我在其中启用了身份验证并创建了具有 DB 特定权限的用户。此应用程序的用户定义如下所示,即 geoAdmin 具有相关数据库的读取、读取写入和 dbOwner 权限:
MongoDB shell version: 3.0.0
connecting to: 192.168.2.89/test
> use geo_db
switched to db geo_db
> db.getUser("geoAdmin")
{
"_id" : "geo_db.geoAdmin",
"user" : "geoAdmin",
"db" : "geo_db",
"roles" : [
{
"role" : "read",
"db" : "geo_db"
},
{
"role" : "dbOwner",
"db" : "geo_db"
},
{
"role" : "readWrite",
"db" : "geo_db"
}
]
}
以下查询可以正常工作,即从我的本地 mongo 客户端连接到远程服务器:
mint:~ $ mongo 192.168.2.89:27017 -u geoAdmin -p secret --authenticationDatabase geo_db
MongoDB shell version: 3.0.0
connecting to: 192.168.2.89/test
> use geo_db
switched to db geo_db
> db.LAD_DEC_2013_GB_BFE.findOne({},{'properties.LAD13NM':1})
{
"_id" : ObjectId("54ffe2824f0787ec1293017f"),
"properties" : {
"LAD13NM" : "Hartlepool"
}
}
然后,我从同一个本地客户端上的 ReactiveMongo Play 应用程序连接到同一个远程主机,并在应用程序配置文件中使用此 URL:
# ReactiveMongo
mongodb.uri = "mongodb://geoAdmin:secret@192.168.2.89:27017/geo_db"
但是当我的应用程序尝试从同一个集合中读取数据时,我收到了 MongoDB“code = 13”错误:
[DetailedDatabaseException: DatabaseException['not authorized for query on geo_db.LAD_DEC_2013_GB_BFE' (code = 13)]]
如果我连接到未启用身份验证的本地 MongoDB,该应用程序可以正常工作。
任何想法这里可能出了什么问题?