Ошибка аутентификации 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. Что я должен был сделать:

  1. Элемент списка
  2. Удалить созданного пользователя.
  3. Измените коллекцию admin.system.version так, чтобы currentVersion authSchema был 3 вместо 5 (3 использует MongoDB-CR).
  4. Создайте заново своего пользователя.

Должен работать без проблем сейчас.

Шаг № 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 ());

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

Я использовал клиент 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
Другие вопросы по тегам