web-dev-qa-db-ja.com

MongoDB-CR認証に失敗しました

ユーザーの認証中に次のエラーが表示されます:purchase_user @ purchaseが失敗しました。 MongoDB-CR認証に失敗しました。ブラウザ経由でWebサービスにアクセスすると、ユーザードキュメントに資格情報がありません。

しかし、1を返すmongoからpurchase_userを認証できます。

47
ashwini

mongoDBコンソールに移動して現在のユーザーを削除し、authSchemaバージョンを5ではなく3に設定し、mongoコンソールで次のコマンドを実行します-

mongo
use admin
db.system.users.remove({})    <== removing all users
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })

Mongodを再起動して新しいユーザーを作成すると、正常に動作するはずです。

注:実稼働で更新を使用する場合は、テストデータベースでのみremoveコマンドを使用してください。

Kubernetes Helm Chartの認証情報

すべてのユーザーを削除し、構成で認証が有効になっている場合(またはKubernetesヘルムチャートでデフォルトで設定されている--auth param)、MongoDBにアクセスできなくなります。認証を無効にし、新しいユーザーを作成してから再度有効にする必要があります。

Kubernetesでは、パラメータを編集し、--noauthを引数として追加する必要があります。これは、インストールされている従来のMongoDBのようにデフォルトではないためです。 --noauthおよび対応する--authの詳細については、 CLIドキュメント を参照してください。

84
Vivek

同じ問題がありました。私に起こっていたことは、MongoDB 3を使用してユーザーを作成するとき、MongoDB-CRの代わりにSCRAM-SHA-1を認証メカニズムとして使用していたことです。私がしなければならなかったことは:

  1. リストアイテム
  2. 作成されたユーザーを削除します。
  3. AuthSchemaのcurrentVersionが5ではなく3になるように、コレクションadmin.system.versionを変更します(3はMongoDB-CRを使用しています)。
  4. ユーザーを再作成します。

問題なく動作するはずです。

20
Winston Lee

上記のステップ番号2.は明確に詳述されていません。この解決策を見つけて、私のために働きました。

var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
18
acabra85

私はこれがあなたが必要とする答えだと思う:

1)認証を有効にせずに3.0を起動します。 (認証は無効にする必要があります。そうしないと、認証されていないエラーが表示されます)。

2)実行(「admin」use dbを選択した後):

var schema = db.system.version.findOne({"_ id": "authSchema"})

schema.currentVersion = 3

db.system.version.save(スキーマ)

3)認証を有効にしてmongodbを再起動します。

4)新しい管理ユーザーを作成します(古い管理ユーザーは、この回避策の前に作成したユーザーは機能しません)。

動作するはずです。この問題も私を夢中にさせました。

答えはここから来ました: https://jira.mongodb.org/browse/SERVER-17459

11
Ahmed Haque

Vivekによる上記のソリューションへの追加と説明 ここから

use admin
db.system.users.remove({})    <== removing all users
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })
  • mONGODB-CRユーザーを作成するためにスキーマをダウングレードするだけです。それらが存在すると、authSchemaVersionの値に関係なく、古いドライバーが機能します。ただし、authSchemaUpgradeを実行して「3」から「5」に変更すると、ユーザーは明らかにアップグレードされます。
  • 新しいユーザーに関する私のコメントは、既存のSCRAMユーザーがいて、スキーマを手動で「3」に変更した場合、ユーザードキュメントは新しいスキーマと一致しないということでした。ただし、これは強制ではありませんが、SCRAMユーザーはSCRAMをサポートするすべてのドライバーで引き続き作業できます。
8
Zubair Alam

Mongo-Java-driverを3.0.3にアップグレードして、以下を使用します。

MongoCredential.createMongoCRCredentialの代わりにMongoCredential.createScramSha1Credential

MongoCredential createMongoCRCredential = MongoCredential.createScramSha1Credential(mongoConfiguration.getDatabaseUserName()、mongoConfiguration.getAuthenticationDatabase()、mongoConfiguration.getDatabasePassword()。toCharArray());

http://docs.mongodb.org/master/release-notes/3.0-scram/

3

私にとっては、mongo 3サーバーに接続しようとするmongo 2クライアントを使用していました。クライアントをアップグレードすると問題が修正されました。

2
Derrick Petzold
  • ubuntuが提供するパッケージをアンインストールmongodb-clients
  • インストールmongodb-org-Shell公式提供 MongoDB

Ubuntuが提供する非公式のmongodbパッケージはMongoDBによって管理されていないため、これで問題は解決しました。常に公式のMongoDB mongodb-orgパッケージを使用する必要があります。これは、最新のメジャーおよびマイナーMongoDBリリースで最新の状態に保たれます。

1
rajivm1991

このエラーも発生していました。

Spring Configファイルを確認してください。「MONGODB-CR」という名前のコンストラクタ引数があり、これを「SCRAM-SHA-1」に切り替えて問題を修正しました。

mongodbログファイルをテーリングすると、これを診断するのに役立ちました。

0
technocrat

おそらく古いニュースであり、問​​題は解決しましたが、同じエラーで私の経験を追加します:

私はまったく同じ問題(MongoDB 3.0を使用)と、3.0以前のdbを使用するようにセットアップされたC#ドライバーがありました。

C#では、「MongoDB.Driver.CreateMongoCRCredentials()」を使用しました。これにより、OPでエラーが発生していました。

修正(私にとって)は、上記のコマンドを「MongoDB.Driver.CreateCredential()」に切り替えることでした。

これは、アップグレードされたシステムで(3.0より前の)「古い」ユーザーを使用していることが原因と考えられます。これにより、ユーザーを新しい認証メカニズムに強制的にアップグレードするか、サーバー上の認証メカニズムをダウングレードします。

0
TylerD75

2018年6月、/ usr/binにインストールされた古代のクライアントからMongodbバージョン3.6に接続しようとすると、このエラーが発生しました。 mongo DBをOS標準ディレクトリ以外の別のフォルダーにインストールしたため、パッケージマネージャーによってインストールされた古いバージョンと競合していました。

0
Brad Hein