Подтвердить что ты не робот

Как добавить аутентификацию в mongodb 2.6?

У меня есть тестовый сервер, на котором работает mongodb 2.6 на ubuntu. Такая же версия работает на моем macbook. В обеих машинах я обновлялся с mongodb 2.4, используя стандартные механизмы обновления. Теперь мне нужно настроить аутентификацию на основе имени пользователя и пароля

На моем mac я обновил mongodb до 2.6, используя обновление brew. I

Я попробовал следующую команду на своем Mac

$mongo
>db.getSiblingDatabase('admin')
>db.createUser({user:"root", pwd:"mycomplexpassword", roles:[ "userAdminAnyDatabase", "readWrite" ] } )

Я получил следующую ошибку:

Error: couldn't add user: User and role management commands require auth data to have schema version 3 but found 1 at src/mongo/shell/db.js:1004

Следовательно, я не могу разрешить auth to mongodb. Как решить проблему? Ошибка Google для ошибки, похоже, не возвращает ничего полезного прямо сейчас.

PS: Должен ли я ожидать появления той же самой проблемы, когда я добавляю проверку подлинности на mongodb на своих серверах?

4b9b3361

Ответ 1

Схема db.system.users в mongodb 2.4 и 2.6 различна, из-за чего вам не удалось создать нового пользователя.

2.4 схема

db.system.users.find()
{
    "_id" : ObjectId("53675bc48ff842a0657e25ff"),
    "user" : "root",
    "pwd" : "c2ff9601c8590812f0d40b9f60869679",
    "roles" : [
        "userAdminAnyDatabase",
        "readWrite"
    ]
}

2.6 схема

db.system.users.find()
{
    "_id" : "admin.root",
    "user" : "root",
    "db" : "admin",
    "credentials" : {
        "MONGODB-CR" : "c2ff9601c8590812f0d40b9f60869679"
    },
    "roles" : [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "readWrite",
            "db" : "admin"
        }
    ]
}

Я не нашел официального способа их конвертировать. Таким образом, вам может потребоваться преобразовать данные 2,4 в формате db.system.users в 2.6 вручную или удалить всех старых пользователей в версии 2.4 и заново создать их в версии 2.6.

Вы можете использовать следующую команду для обновления.

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });

Литература:

Ответ 3

Я думаю, что приведенные выше ответы верны, но то, что заставило его работать для меня, было следующими шагами (F.Y.I, я на версии 2.6.8):

1.Реон в монго:

db.system.version.update({}, {$set: {currentVersion: 3}});

2.Run in mongo:

db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });

3.Run in mongo:

db.createUser(
  {
    user: "your_user_name",
    pwd: "your_password",
    roles: [ { role: "userAdminAnyDatabase", db:"admin" } ]
  }
)
  1. Добавьте в /usr/local/etc/mongod.conf следующее:

    auth=true

  2. перезапустить mongo:

    mongod --dbpath /data/db

  3. Перейдите в оболочку на Mac и войдите в систему (также обратите внимание на отдельные цитаты вокруг имени пользователя и пароля):

    mongo admin -u 'your_use_name' -p 'your_password'

Ответ 4

Моя версия mongoDb 2.6.5 Ошибка ниже команды

db.system.version.update({}, {$set: {currentVersion: 3}});