ユーザーの認証中に次のエラーが表示されます:purchase_user @ purchaseが失敗しました。 MongoDB-CR認証に失敗しました。ブラウザ経由でWebサービスにアクセスすると、ユーザードキュメントに資格情報がありません。
しかし、1を返すmongoからpurchase_userを認証できます。
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ヘルムチャートでデフォルトで設定されている--auth
param)、MongoDBにアクセスできなくなります。認証を無効にし、新しいユーザーを作成してから再度有効にする必要があります。
Kubernetesでは、パラメータを編集し、--noauth
を引数として追加する必要があります。これは、インストールされている従来のMongoDBのようにデフォルトではないためです。 --noauth
および対応する--auth
の詳細については、 CLIドキュメント を参照してください。
同じ問題がありました。私に起こっていたことは、MongoDB 3を使用してユーザーを作成するとき、MongoDB-CRの代わりにSCRAM-SHA-1を認証メカニズムとして使用していたことです。私がしなければならなかったことは:
問題なく動作するはずです。
上記のステップ番号2.は明確に詳述されていません。この解決策を見つけて、私のために働きました。
var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
私はこれがあなたが必要とする答えだと思う:
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
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 })
Mongo-Java-driverを3.0.3にアップグレードして、以下を使用します。
MongoCredential.createMongoCRCredentialの代わりにMongoCredential.createScramSha1Credential
MongoCredential createMongoCRCredential = MongoCredential.createScramSha1Credential(mongoConfiguration.getDatabaseUserName()、mongoConfiguration.getAuthenticationDatabase()、mongoConfiguration.getDatabasePassword()。toCharArray());
私にとっては、mongo 3サーバーに接続しようとするmongo 2クライアントを使用していました。クライアントをアップグレードすると問題が修正されました。
Ubuntuが提供する非公式のmongodbパッケージはMongoDBによって管理されていないため、これで問題は解決しました。常に公式のMongoDB mongodb-orgパッケージを使用する必要があります。これは、最新のメジャーおよびマイナーMongoDBリリースで最新の状態に保たれます。
このエラーも発生していました。
Spring Configファイルを確認してください。「MONGODB-CR」という名前のコンストラクタ引数があり、これを「SCRAM-SHA-1」に切り替えて問題を修正しました。
mongodbログファイルをテーリングすると、これを診断するのに役立ちました。
おそらく古いニュースであり、問題は解決しましたが、同じエラーで私の経験を追加します:
私はまったく同じ問題(MongoDB 3.0を使用)と、3.0以前のdbを使用するようにセットアップされたC#ドライバーがありました。
C#では、「MongoDB.Driver.CreateMongoCRCredentials()」を使用しました。これにより、OPでエラーが発生していました。
修正(私にとって)は、上記のコマンドを「MongoDB.Driver.CreateCredential()」に切り替えることでした。
これは、アップグレードされたシステムで(3.0より前の)「古い」ユーザーを使用していることが原因と考えられます。これにより、ユーザーを新しい認証メカニズムに強制的にアップグレードするか、サーバー上の認証メカニズムをダウングレードします。
2018年6月、/ usr/binにインストールされた古代のクライアントからMongodbバージョン3.6に接続しようとすると、このエラーが発生しました。 mongo DBをOS標準ディレクトリ以外の別のフォルダーにインストールしたため、パッケージマネージャーによってインストールされた古いバージョンと競合していました。