Ошибка аутентификации MongoDB 3.2

Я создаю пользователя со следующим набором команд. Это должно создать пользователя как в admin db, так и в моем целевом db (c2d):

# mongo 127.0.0.1:27017
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/test
> use admin
switched to db admin
> show collections
system.users
system.version
> db.system.users.find()
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]})
Successfully added user: {
    "user" : "cd2",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "c2d"
        }
    ]
}
> db.system.users.find()
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }
> use c2d
switched to db c2d
> db.createUser({user:"cd2", pwd:"cd2", roles:[{role:"dbOwner", db: "c2d"}]})
Successfully added user: {
    "user" : "cd2",
    "roles" : [
        {
            "role" : "dbOwner",
            "db" : "c2d"
        }
    ]
}
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.cd2", "user" : "cd2", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "4g6t9kC+godz7k6QQOfD+A==", "storedKey" : "m3tDZBQDU2Tlb1lIjLGyTHmr2QQ=", "serverKey" : "GSA4OXSod1s8mBuZBtfmXq2tlTo=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }
{ "_id" : "c2d.cd2", "user" : "cd2", "db" : "c2d", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "vnMjnjfykVQS8ujQXeWaYw==", "storedKey" : "OYXivkmIwuTavlwTGfjrspT6j2E=", "serverKey" : "lw8xqzAaW8V4IQ9wOmQrG2VSp88=" } }, "roles" : [ { "role" : "dbOwner", "db" : "c2d" } ] }

Если я попытаюсь войти в систему, я приветствую сообщение об ошибке:

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/c2d
2016-05-22T10:35:41.862+0100 E QUERY    [thread1] Error: Authentication failed. :
[email protected]/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2

exception: login failed

Затем я включаю функции безопасности в файле conf и перезапуска сервера:

security:
  authorization: enabled

Ошибка все тот же:

# mongo 127.0.0.1:27017/c2d -u c2d -p c2d
MongoDB shell version: 3.2.6-29-g5c19788
connecting to: 127.0.0.1:27017/c2d
2016-05-22T10:37:43.713+0100 E QUERY    [thread1] Error: Authentication failed. :
[email protected]/mongo/shell/db.js:1441:20
@(auth):6:1
@(auth):1:2

exception: login failed

Ответ 1

Нужно выполнить несколько шагов, чтобы создать пользователя успешно.

Прежде всего, вам нужно создать пользователя-администратора. Я предпочитаю создание суперпользователя.

> use admin
> db.createUser({user: "root", pwd: "123456", roles:["root"]})

Перезагрузите сервер MongoDB и включите аутентификацию с --auth флага --auth.

> mongod --auth --port 27017 --dbpath /var/lib/mongodb

Как только ваш сервер встанет, подключитесь к нему как администратор

> mongo <host:port> -u "root" -p "123456" --authenticationDatabase "admin"

Как только вы подключитесь, создайте нормального пользователя. Предполагая, что ваше имя базы данных пользователя cd2.

> use cd2
> db.createUser({user: "cd2", pwd: "cd2", roles:["dbOwner"]})

Если вы видите успешный messsage, отключите оболочку mongo и подключитесь к новым учетным данным пользователя.

> mongo <host:port>/cd2 -u "cd2" -p "cd2"

Ответ 2

Наш опыт работы с этой проблемой в MongoDB (3.2.4) заключается в том, что это кажется ошибкой или недокументированной функцией. Если вы пытаетесь создать пользователей и роли из удаленной оболочки (а не localhost), пользователи создаются, но как только вы покидаете оболочку, они исчезают (они преходящи к этому сеансу) и на самом деле не сохраняются.

Решение. Просто попробуйте создать своих пользователей (без аутентификации, включенной первоначально на MongoDB) и сделать это прямо на консоли вашего сервера БД (localhost).