Как добавить аутентификацию в 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 на своих серверах?
Ответы
Ответ 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 });
Литература:
Ответ 2
Попробуйте эту команду в консоли mongo
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" } ]
}
)
-
Добавьте в /usr/local/etc/mongod.conf следующее:
auth=true
-
перезапустить mongo:
mongod --dbpath /data/db
-
Перейдите в оболочку на Mac и войдите в систему (также обратите внимание на отдельные цитаты вокруг имени пользователя и пароля):
mongo admin -u 'your_use_name' -p 'your_password'
Ответ 4
Моя версия mongoDb 2.6.5
Ошибка ниже команды
db.system.version.update({}, {$set: {currentVersion: 3}});