Подтвердить что ты не робот

Как добавить пользователя 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...)

Спасибо!

4b9b3361

Ответ 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, однако, исправлена ​​проблема.