Пользователь не найден в образе MongoDB Docker с аутентификацией - PullRequest
1 голос
/ 16 октября 2019

Итак, я пытаюсь настроить MongoDB, используя официальный mongo Docker образ , версия 4.2.

Чего я хочу добиться - это использовать сервер с включенной аутентификацией,и я хочу иметь пользовательскую базу данных с пользовательским именем пользователя и паролем.

Итак, я устанавливаю следующие переменные среды:

MONGO_INITDB_DATABASE: mydb
MONGO_INITDB_ROOT_USERNAME: jane
MONGO_INITDB_ROOT_PASSWORD: secret

В документации говорится, что если вы предоставитеДля двух последних переменных среды аутентификация включается автоматически.

Однако, когда я пытаюсь получить доступ к базе данных mydb, используя учетные данные jane и secret, все, что я получаю, это ошибка:

Supported SASL mechanisms requested for unknown user 'jane@mydb'
SASL SCRAM-SHA-1 authentication failed for jane on mydb from client 172.17.0.1:54702 ; UserNotFound: Could not find user "jane" for db "mydb"

Почему это? Чего мне не хватает?

Я предполагаю, что созданный пользователь имеет доступ только к базе данных admin, и мне нужно предоставить пользователю jane доступ к базе данных mydb. Я попытался сделать это с помощью следующей команды:

mongo admin -u jane -p secret --eval "db.grantRolesToUser('jane', [{role: 'dbOwner', db: 'mydb'}])"

Но это тоже не сработало. Чего мне не хватает?

1 Ответ

1 голос
/ 19 октября 2019

Вы можете аутентифицироваться с jane , secret против admin db, а не mydb

Running mongo -u jane -p secretэквивалентно выполнению mongo -u jane -p secret -authenticationDatabase admin. Проверьте журналы контейнера, чтобы убедиться в этом.

MONGO_INITDB_DATABASE предназначен для разных целей.

As документы состояние:

MONGO_INITDB_ROOT_USERNAME, MONGO_INITDASS_ROOT_ переменные, переменные MONGO_INITDASS_ROOTиспользуется совместно, создайте нового пользователя и установите пароль этого пользователя. Этот пользователь создается в административной базе данных аутентификации и ему назначена роль root, которая является ролью «суперпользователя».

MONGO_INITDB_DATABASE Эта переменная позволяет указать имя базы данных, которая будетиспользуется для создания сценариев в /docker-entrypoint-initdb.d/*.js (см. Инициализация нового экземпляра ниже). MongoDB изначально разработан для «создания при первом использовании», поэтому, если вы не вставляете данные в файлы JavaScript, база данных не создается.

Инициализация свежего экземпляра Когда контейнер запускается в первый раз, он запускает файлы с расширениями .sh и .js, которые находятся в /docker-entrypoint-initdb.d. Файлы будут выполнены в алфавитном порядке. Файлы .js будут выполняться mongo с использованием базы данных, указанной в переменной MONGO_INITDB_DATABASE, если она присутствует, или протестировать иначе. Вы также можете переключать базы данных в скрипте .js.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...