4

認証を使用してMongoDBに接続しようとしています。私はMongoサーバーでこれを行いました:

use admin
db.addUser('adminLogin','adminPassword')
db.shutdownServer()
exit

その後、サーバーを再起動して発行しましたmongod --auth

DataSource.groovyでdb構成を次のように設定します。

grails {
    mongo {
        host = "localhost"
        port = 27017
        username = "adminLogin"
        password = "adminPassword"
        databaseName = "my DB name"
        options {
            autoConnectRetry = true
            connectTimeout = 300
        }
    }
}

アプリケーションを起動すると、次のエラーメッセージが表示されます。

ERROR context.GrailsContextLoader  - Error executing bootstraps: Error creating bean
 with name 'mongoDatastore': FactoryBean threw exception on object creation; nested 
exception is org.springframework.data.mongodb.CannotGetMongoDbConnectionException:
 Failed to authenticate to database

どんな提案でも大歓迎です。前もって感謝します。

4

1 に答える 1

13

私はこれと同じ問題に遭遇したので、Mongoが認証を行う方法を説明するのを手伝うことができます。管理者データベースに管理者ユーザーを作成したことがわかります。これはすばらしいことです。ただし、許可されていないadminユーザーを使用して「mydb」に直接接続しようとしています。紛らわしいですか?だからです。これをよりよく説明するために、ここで簡単な演習を行います。

  1. 上記のように、admindbのユーザーを作成します。
  2. モンゴシェルを終了します
  3. 次を実行します
mongo
use myDBname
db.auth("adminlogin", "adminpwd")

それは失敗します。しかし、代わりにこれを試してください。

mongo
use admin
db.auth("adminlogin", "adminpwd")
use myDBname

これは、管理コンテキストを使用してこのデータベースに切り替え、直接接続しようとしなかったために機能します。

したがって、この作業を行うために必要なのは、必要なDBに直接接続し、次のようにそのDBにユーザーを作成することだけです。

mongo
use myDBname
db.addUser("dblogin", "dbpwd")

これでgrails設定ファイルを更新してください。きっとうまくいくでしょう。

最後の部分だけがあなたの答えであり、あなたの問題を解決することに注意してください。しかし、私はこれに苦労し、難しい方法を理解したので、コンテキストは本当にmongoauthをよりよく理解するのに役立つと思います。

気を付けて

于 2012-05-15T00:20:05.950 に答える