Ошибка аутентификации MongoDB-CR
При аутентификации пользователя я получаю следующую ошибку: покупка_пользователя @ покупка не удалась. Ошибка аутентификации MongoDB-CR. Отсутствие учетных данных в пользовательском документе при доступе к веб-сервису через браузер.
Но я могу аутентифицировать buy_user из mongo, он возвращает 1 .
12 ответов
Перейдите в консоль 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 и создайте нового пользователя, тогда он должен работать нормально.
Примечание: используйте команды удаления только в тестовой базе данных, если в производственной программе используйте обновление.
Была такая же проблема. Что происходило со мной, так это то, что когда я использовал MongoDB 3 для создания своего пользователя, он использовал SCRAM-SHA-1 в качестве механизма аутентификации вместо MongoDB-CR. Что я должен был сделать:
- Элемент списка
- Удалить созданного пользователя.
- Измените коллекцию admin.system.version так, чтобы currentVersion authSchema был 3 вместо 5 (3 использует MongoDB-CR).
- Создайте заново своего пользователя.
Должен работать без проблем сейчас.
Шаг № 2 выше подробно не детализирован, я нашел это решение и работал на меня.
var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
Я думаю, что это ответ, который вам нужен:
1) Запустите 3.0 без авторизации. (Auth должен быть отключен, иначе вы получите неавторизованную ошибку).
2) Запустите (после выбора "admin" используйте 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 })
- вам нужно только понизить схему для создания пользователей MONGODB-CR. Когда они появятся, старые драйверы будут работать независимо от значения authSchemaVersion. Однако если вы запустите authSchemaUpgrade, чтобы изменить "3" на "5", пользователи, очевидно, будут обновлены.
- Мой комментарий о новых пользователях состоял в том, что если у вас есть существующие пользователи SCRAM и вы измените схему вручную на "3", пользовательские документы не будут соответствовать новой схеме. Однако это не применяется, но пользователи SCRAM по-прежнему будут работать с любым драйвером, поддерживающим SCRAM.
Обновите mongo-java-driver до 3.0.3 и используйте: -
MongoCredential.createScramSha1Credential вместо MongoCredential.createMongoCRCredential
MongoCredential createMongoCRCredential = MongoCredential.createScramSha1Credential (mongoConfiguration.getDatabaseUserName (), mongoConfiguration.getAuthenticationDatabase (), mongoConfiguration.getDatabasePassword (). ToCharArray ());
Я использовал клиент mongo 2, пытаясь подключиться к серверу mongo 3. Обновление клиента решило проблему.
Я тоже получал эту ошибку.
Проверьте ваш файл Spring Config. У меня был конструктор arg с именем "MONGODB-CR", который я поменял на "SCRAM-SHA-1", и это исправило мою проблему.
отслеживание файла журнала mongodb помогло мне диагностировать это.
- удалить пакеты mongodb-клиентов, предоставляемые Ubuntu
- установить mongodb-org-shell, предоставленный официальным MongoDB
Это решило проблему, потому что неофициальный пакет mongodb, предоставляемый Ubuntu, не поддерживается MongoDB. Вы всегда должны использовать официальные пакеты MongoDB mongodb-org, которые обновляются с самыми последними основными и второстепенными выпусками MongoDB.
Для тех, кто изо всех сил пытается обновить схему аутентификации (см. Принятый ответ) в MongoDB 3.6 из-за
not authorized on admin to execute command
и
removing FeatureCompatibilityVersion document is not allowed
ошибки, это то, что сработало для меня.
Чтобы устранить первую ошибку:
> db.system.version.remove({})
WriteResult({
"writeError" : {
"code" : 13,
"errmsg" : "not authorized on admin to execute command { update: \"system.version\", ordered: true, lsid: { id: UUID(\"58e86006-d889-440a-bd83-ad09fcd81747\") }, $db: \"admin\" }"
}
})
Мне пришлось создать настраиваемую роль, которая разрешает любые действия с любым ресурсом и пользователем с этой ролью, а затем войти в базу данных администратора с этим новым пользователем:
mongo admin
db.createUser({user: 'admin', pwd: 'mypwd', roles: ['root']})
exit
mongo admin -u admin -p
db.createRole({role: 'fullaccess', privileges: [{resource: {anyResource: true}, actions: ["anyAction"]}], roles: []})
db.createUser({user: 'superadmin', pwd: 'mypwd', roles: ['fullaccess']})
exit
mongo admin -u superadmin -p
(Просто используя
admin
пользователь с
root
роль или отключение
security.authorization
в конфигурации у меня не сработало, и при попытке обновить
system.version
стол.)
После этого у меня была еще одна ошибка:
> db.system.version.remove({})
WriteResult({
"nRemoved" : 0,
"writeError" : {
"code" : 40670,
"errmsg" : "removing FeatureCompatibilityVersion document is not allowed"
}
})
Чтобы решить эту проблему, нам нужно только обновить
authSchema
документ вместо удаления всей коллекции.
(Вообще говоря, вы не должны слепо удалять все из системных таблиц в производственной среде и всегда проверять, каковы будут последствия их обновления, так что это еще одна причина для обновления только необходимой записи.)
db.system.version.update({"_id": "authSchema"}, {currentVersion: 3})
Теперь у вас должна быть возможность создать пользователя со старым механизмом аутентификации. Вам также может потребоваться сначала переключиться на свою базу данных, чтобы пользователь создавался в этой базе данных, а не в
admin
один. В противном случае вам пришлось бы использовать
authSource=admin
параметр в строке подключения.
(На самом деле вру - он все равно будет создан в
admin
база данных, просто с
mydb.myuser
id вместо
admin.myuser
. Но я использую тот же способ описания этих вещей, который используется в документации MongoDB. Я полагаю, что именно так это на самом деле работало в предыдущих версиях, и в целом нам не нужно заботиться о деталях внутренней реализации.)
use mydb
db.createUser({user: 'myuser', pwd: 'mypwd', roles: [{role: 'dbOwner', db: 'mydb'}]})
И не забудьте очистить:
use admin
db.system.version.update({"_id": "authSchema"}, {currentVersion: 5})
exit
mongo admin -u admin -p
db.dropUser('superadmin')
db.dropRole('fullaccess')
Вы можете оставить
admin
пользователь - мне не удалось создать его снова даже с
security.authorization
настройка отключена. Похоже, есть ли записи в
admin.system.users
table, настройка больше не работает, и mongo требует аутентификации для чего-то.
Июнь 2018 г. Я получил эту ошибку после попытки подключиться к моей версии Mongodb 3.6 с помощью старого клиента, установленного в /usr/bin. Я установил mongo DB в отдельную папку за пределами стандартного каталога ОС, поэтому моя установка противоречила старой версии, установленной менеджером пакетов.
Возможно старые новости, и проблема решена, но добавив мой опыт с той же ошибкой:
У меня была точно такая же проблема (с использованием MongoDB 3.0) и драйвер C#, который был настроен для использования до 3.0 дБ.
В C# я использовал "MongoDB.Driver.CreateMongoCRCredentials()", что вызвало ошибку, которую получал OP.
Исправление (для меня) состояло в том, чтобы переключить указанную выше команду на "MongoDB.Driver.CreateCredential()".
Я думаю, это может быть вызвано использованием "старых" пользователей (начиная с версии 3.0) в обновленной системе. Что либо вынуждает вас обновить ваших пользователей до нового механизма аутентификации, либо понизить механизм аутентификации на вашем сервере.
У меня была та же ошибка с приложением Spring Boot, использующим новую базу данных MongoDB 3.2.8. Обновив драйвер Java Mongo до последней версии (3.2.2), а затем добавив параметр механизма аутентификации в URI в моем application.properties, я смог заставить его работать:
spring.data.mongodb.uri=mongodb://myusername:mypassword@localhost/?authSource=admin&authMechanism=SCRAM-SHA-1
spring.data.mongodb.database=test