3

我有一个 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,该应用程序可以正常工作。

任何想法这里可能出了什么问题?

4

2 回答 2

2

ReactiveMongo 0.11.7.play23支持mongo 3.0 auth-protocols,但仍使用旧的作为默认值。

使用 ReactiveMongo 0.11.7.play23 -plugin,您可以通过将“?authMode=scram-sha1”添加到 mongodb.uri 的末尾来使其与 mongo 3.0 进行身份验证。例如:

mongodb.uri = "mongodb://geoAdmin:secret@192.168.2.89:27017/geo_db?authMode=scram-sha1"
于 2015-10-14T09:03:45.540 回答
1

mongo 2.6 使用 MONGODB-CR auth 协议,3.0 默认使用 MONGODB-SHA-1

reactivemongo 使用 MONGODB-CR 身份验证协议(不确定)

将 mongodb 3.0 身份验证机制降级为 MONGODB-CR

  1. 登录 mongo noauth
  2. 删除所有用户
  3. 更新 authSchema 的版本文档。

前任。

db.getSiblingDB("admin").system.users.remove( {} )
db.getSiblingDB("admin").system.version.update(
   { _id: "authSchema" },
   { $set: { currentVersion: 3 } }
);

将 authSource 参数添加到 mongodb url ex。

mongodb.uri = "mongodb://geoAdmin:secret@192.168.2.89:27017/geo_db?authSource=geo_db"
于 2015-06-17T16:17:32.977 回答