3

認証を有効にし、DB 固有のアクセス許可を持つユーザーを作成した MongoDB サーバーがあります。このアプリのユーザーは、以下に示すように定義されています。つまり、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 プラグインを使用すると、mongodb.uri の末尾に「?authMode=scram-sha1」を追加することで、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 認証プロトコルを使用し、3.0 はデフォルトで MONGODB-SHA-1 を使用します。

反応的なmongoはMONGODB-CR認証プロトコルを使用します(不明)

mongodb 3.0認証メカニズムをMONGODB-CRにダウングレード

  1. ログインモンゴ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 に答える