Ошибка аутентификации MongoDB-CR
Я получаю следующую ошибку при аутентификации пользователя: покупка_user @не удалось. Ошибка аутентификации MongoDB-CR. Отсутствие учетных данных в пользовательском документе при доступе к веб-сервису через браузер.
Но я могу аутентифицировать purchase_user из mongo, он возвращает 1.
Ответы
Ответ 1
перейдите в консоль mongoDB и удалите текущего пользователя и установите версию authSchema 3 вместо 5, следуйте этим командам в консоли 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 и создайте нового пользователя, тогда он должен работать нормально.
Примечание: используйте команды удаления только в тестовой базе данных, если в производственной программе используйте обновление.
Информация об аутентификации для Kubernetes Helm Chart
Если вы удаляете всех пользователей и аутентификация включена в конфигурации (или параметре --auth
который установлен по умолчанию в таблице управления Kubernetes), доступ к MongoDB больше не будет возможен. Требуется отключить аутентификацию, создать нового пользователя и затем снова включить его.
В Kubernetes вам нужно отредактировать параметры и добавить --noauth
качестве аргумента, так как это не значение по умолчанию, как в классической установленной MongoDB. Пожалуйста, обратитесь к документации CLI для получения дополнительной информации о --noauth
и соответствующем --auth
.
Ответ 2
Была та же проблема. То, что происходило со мной, было то, что когда я использую MongoDB 3 для создания своего пользователя, он использовал SCRAM-SHA-1 в качестве механизма аутентификации вместо MongoDB-CR. Что мне нужно было сделать:
- Элемент списка
- Удалить созданного пользователя.
- Измените коллекцию admin.system.version, чтобы authSchema currentVersion составляла 3 вместо 5 (3 использует MongoDB-CR).
- Восстановите своего пользователя.
Теперь нужно работать без проблем.
Ответ 3
Вышеуказанный шаг №2 не детализирован явно, я нашел это решение и работал у меня.
var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
Ответ 4
Я думаю, что это тот ответ, который вам нужен:
1) Начать 3.0 без авторизации. (Auth необходимо отключить, иначе вы получите недопустимую ошибку).
2) Запустите (после выбора "admin" используйте db):
var schema = db.system.version.findOne({ "_ id": "authSchema" })
schema.currentVersion = 3
db.system.version.save(схема)
3) перезапустите mongodb с включенным auth.
4) Создайте нового пользователя admin (старый, тот, который вы создали до этого обходного пути, не будет работать).
Теперь все должно работать. Эта проблема сводила меня с ума.
Ответ пришел отсюда: https://jira.mongodb.org/browse/SERVER-17459
Ответ 5
Добавление к приведенному выше решению 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.
Ответ 6
Обновите mongo-java-драйвер до версии 3.0.3 и используйте: -
MongoCredential.createScramSha1Credential вместо MongoCredential.createMongoCRCredential
MongoCredential createMongoCRCredential = MongoCredential.createScramSha1Credential (mongoConfiguration.getDatabaseUserName(), mongoConfiguration.getAuthenticationDatabase(), mongoConfiguration.getDatabasePassword().CharArray());
http://docs.mongodb.org/master/release-notes/3.0-scram/
Ответ 7
Для меня я использовал клиента mongo 2, пытающегося подключиться к серверу mongo 3. Обновление клиента исправило проблему.
Ответ 8
- удалить пакеты mongodb-clients, предоставляемые Ubuntu
- установить mongodb-org-shell, предоставленный официальным MongoDB
Это решило проблему, потому что неофициальный пакет mongodb, предоставляемый Ubuntu, не поддерживается MongoDB. Вы всегда должны использовать официальные пакеты MongoDB mongodb-org, которые обновляются с самыми последними основными и второстепенными выпусками MongoDB.
Ответ 9
Я тоже получал эту ошибку.
Проверьте файл конфигурации Spring. У меня был конструктор arg с именем "MONGODB-CR", который я поменял на "SCRAM-SHA-1", и он исправил мою проблему.
хвост файла журнала mongodb помог мне диагностировать это.
Ответ 10
Вероятно, старые новости и проблема решена, но добавление моего опыта с той же ошибкой:
У меня была та же самая проблема (с использованием MongoDB 3.0) и драйвер С#, который был настроен на использование pre 3.0 db.
В С# я использовал "MongoDB.Driver.CreateMongoCRCredentials()", который вызвал ошибку, которую получал OP.
Исправление (для меня) состояло в том, чтобы переключить команду выше на "MongoDB.Driver.CreateCredential()".
Я предполагаю, что это может быть вызвано использованием "старых" пользователей (от pre 3.0) в обновленной системе. Это либо заставляет вас обновлять пользователей до нового механизма аутентификации, либо понизить механизм проверки подлинности на вашем сервере.
Ответ 11
Июнь 2018 г. Я получил эту ошибку после попытки подключиться к моей версии Mongodb 3.6 с помощью старого клиента, установленного в /usr/bin. Я установил mongo DB в отдельную папку за пределами стандартного каталога ОС, поэтому моя установка противоречила старой версии, установленной менеджером пакетов.
Ответ 12
У меня была та же ошибка с приложением Spring Boot, использующим новую базу данных MongoDB 3.2.8. Обновив драйвер Java Mongo до последней версии (3.2.2), а затем добавив параметр механизма аутентификации в URI в моем application.properties, я смог заставить его работать:
spring.data.mongodb.uri=mongodb://myusername:[email protected]/?authSource=admin&authMechanism=SCRAM-SHA-1
spring.data.mongodb.database=test