Как добавить пользователя admin в Mongo в версии 2.6?
Я обновил с 2.4 до 2.6, и аутентификация сломалась. Этот учебник кажется довольно простым, но я продолжаю блокироваться из своей собственной базы данных. Моя ситуация довольно проста, у меня есть единственный сервер Mongo и вам нужна одна комбинация user/pwd для подключения.
Сначала я подключаюсь через исключение localhost, как указано. Затем я создаю пользователя admin как предложено:
use admin
db.createUser(
{
user: "myadmin",
pwd: "mysecret",
roles:
[
{
role: "userAdminAnyDatabase",
db: "admin"
}
]
}
)
Теперь пришло время добавить новых пользователей, чтобы проверить работоспособность, я выхожу из оболочки. Теперь, когда я печатаю "монго", это терпит неудачу. Это работает, но хорошо, он не видит пароль пользователя, и я думаю, что исключение localhost больше не существует, поэтому следую инструкциям здесь:
mongo --port 27017 -u myadmin -p mysecret --authenticationDatabase admin
И я получаю:
MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27017/test
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
>
Любая идея о том, как:
-
Установите Mongo 2.6, чтобы я мог легко входить и выходить из оболочки, управляющей базами данных (я бы подумал, что это "администратор системы" )
-
Включить пользователя из удаленного клиента для подключения? (Только сторона mongo, никакая помощь не нужна с iptables...)
Спасибо!
Ответы
Ответ 1
По-видимому, "системному администратору" недостаточно. Создайте пользователя root:
> db.createUser({user:"someadmin",pwd:"secret", roles:[{role:"root",db:"admin"}]})
Затем добавьте пользователя своей базы данных:
> use some_db
> db.createUser(
{
user: "mongouser",
pwd: "someothersecret",
roles: ["readWrite"]
}
)
Подробнее о этот смысл. Комментарии к gist и лучшим ответам на SO приветствуются - я не администратор sys
Ответ 2
1) Роль, которую вы назначаете администратору user-userAdminAnyDatabase, не имеет неограниченных привилегий. Это просто роль, которая позволяет создавать и управлять пользователями в любой базе данных. По-видимому, по умолчанию ему запрещено выполнять определенные команды, которые напрямую не связаны с управлением пользователями базы данных (например, получение предупреждений о запуске из журнала, запрос состояния сервера и т.д.).
Вместо этого вы можете использовать роль "root", как предлагает Тони. Если вы собираетесь использовать корневую учетную запись для настройки и управления, а затем просто иметь несколько базовых учетных записей для чтения/записи, говорящих с базой данных, это, вероятно, имеет наибольший смысл.
2) В общем, подключение на стороне клиента требует только вызова функции db.authenticate() после подключения вашего кода клиента. Существуют разные способы сделать это в зависимости от того, какой драйвер/язык вы используете для клиента. Код драйвера node.js довольно типичен: http://mongodb.github.io/node-mongodb-native/api-generated/db.html#authenticate
Ответ 3
Даже после следующего метода @Tony я получал
`com.mongodb.CommandFailureException:`
Добавление
compile 'org.mongodb:mongo-java-driver:2.13.1'
в разделе "Зависимость" в BuildConfig.groovy, однако, исправлена проблема.