#mongodb #mongodb-shell
#mongodb #mongodb-оболочка
Вопрос:
У меня запущен сервер mongod и запущен как служба в ubuntu 14.04, я запустил оболочку mongo и создал пользователя.
db.createUser( {
user: "testAdmin",
pwd: "12345678",
roles: [ { role: "userAdmin", db: "students" } ]
} )
после этого я изменил редактирование mongod.conf и установил auth=true и перезапустил сервер mongod как службу.
После всего этого, когда я хочу запустить оболочку mongo с помощью user testAdmin.
mongo -u testAdmin -p 12345678 --authenticationDatabase students
Но я не могу войти в систему, и это выдает мне ошибку.
MongoDB shell version: 3.2.10
connecting to: 127.0.0.1:25018/test
2016-10-13T05:56:27.500 0000 W NETWORK [thread1] Failed to connect to 127.0.0.1:25018, reason: errno:111 Connection refused
2016-10-13T05:56:27.500 0000 E QUERY [thread1] Error: couldn't connect to server 127.0.0.1:25018, connection attempt failed :
Сначала, когда я указываю студентов базы данных, почему он пытается подключиться к тестированию? Во-вторых, я знаю, что роль UserAdmin в mongodb не предназначена для чтения / записи в базе данных с помощью UserAdmin я могу управлять только ролями пользователей. Но для управления другими пользователями мне все равно нужно войти в оболочку mongo.
Он работает, когда я отключаю авторизацию в mongod.conf, так что все в порядке, только аутентификация не работает.
Ответ №1:
Сначала, когда я указываю студентов базы данных, почему он пытается подключиться к тестированию?
Вы не указываете базу данных (students), к которой хотите подключиться здесь.
Используется --authenticationDatabase
для указания базы данных, в которой был создан пользователь и которая используется для процесса аутентификации.
Вы также должны указать students в качестве опции db, к которой вы хотите подключиться. Если вы опустите его, оболочка автоматически попытается подключиться к test
базе данных:
mongo students -u testAdmin -p 12345678 --authenticationDatabase students
Обратите внимание на добавление students
сразу после mongo
.
Это предполагает, что пользователь был создан в students
базе данных (и не admin
или другой). Обратите внимание, что в этом случае db
объявление внутри role
является избыточным:
roles: [ { role: "userAdmin", db: "students" } ]
также могло быть указано как:
roles: [ "userAdmin" ]