Как я могу войти в Mongo в качестве суперпользователя или перезагрузить пользователей?

29

Я играл с разрешениями и заблокировал себя из базы данных Монго. Я почти уверен, что сделал это, пытаясь явно добавить доступ к базе данных, но вместо этого я переписал только разрешение на доступ к базе данных. Поэтому я фактически заблокирован в базе данных Mongo, и все, что я прочитал, говорит мне, как создать суперпользователя, если у меня есть привилегия добавления пользователя. Сейчас я не думаю, что у меня есть пользователи с такой привилегией. Есть ли способ войти в базу данных как весь доступ? Я владею сервером и имею root-доступ.

Тони
источник

Ответы:

38

Если вы заблокировали себя, то вам нужно сделать следующее:

  1. Остановите ваш экземпляр MongoDB
  2. Удалите параметры --auth и / или --keyfile из конфигурации MongoDB, чтобы отключить аутентификацию
  3. Запустите экземпляр без аутентификации
  4. Редактировать пользователей по мере необходимости
  5. Перезапустите экземпляр с включенной аутентификацией.
daveh
источник
Удаление auth действительно было недостаточно, спасибо!
Андрей
14

У меня была похожая проблема, когда я создавал пользователя без предварительного добавления суперпользователя. Следующие шаги помогли решить проблему:

  1. Откройте файл конфигурации MongoDB с помощью sudo( sudo vi mongodb.conf).
    Файл можно найти в /etc/папке.
  2. Комментарий "auth = true".
  3. Остановите службу MongoDB ( sudo service mongod stop)
  4. Запустите сервис MongoDB ( sudo service mongod start)
  5. Затем создайте суперпользователя «root» с помощью следующей команды:

    use admin
    
    db.createUser({user:"admin",pwd:"password",roles:[{role:"root",db:"admin"}]});
    

    Для справки https://docs.mongodb.com/manual/reference/built-in-roles/#superuser-roles

  6. Вернитесь и раскомментируйте "auth=true". Остановите и запустите / перезапустите службу mongodb.

Дивья Кришнан
источник
Я не могу отблагодарить тебя достаточно. Я застрял, пытаясь понять это, когда я загрузил проект на сервер разработки. Спасибо большое! :)
Woppi
То же самое. Сообщения об ошибках сервера поразительно бесполезны на этом. Спасибо!
Том
7

Если вы используете набор реплик сkeyfile

Безопасность между членами набора реплик с использованием внутренней аутентификации

Keyfile используется для аутентификации в репликации.

security:
  keyFile: <path-to-keyfile>
replication:
  replSetName: <replicaSetName>

Вы можете использовать эту команду для входа в систему с правами администратора на mongod:

mongo -u __system -p "$(tr -d '\011-\015\040' < path-to-keyfile)" --authenticationDatabase local

Послесловие вы можете создавать или изменять вашего администратора.

Внутренняя роль

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

Не назначайте эту роль пользовательским объектам, представляющим приложения или администраторов, кроме исключительных обстоятельств.

Иванов
источник
где ты нашел эту информацию?
октоэдр
2

Проверьте ответы на этот вопрос, они могут помочь

/programming/20117104/mongodb-root-user

В основном, если у вас все еще есть доступ к серверу, вы можете получить доступ к Adminбазе данных.

На этой странице есть больше http://docs.mongodb.org/v2.4/reference/user-privileges/

Обратите внимание, что версия 2.6 меняет то, как это работает полностью. Для версии 2.6 вам нужно больше времени проводить с http://docs.mongodb.org/manual/security/

Meligy
источник
1
Как упоминалось в сообщении, это единственная информация, которую я смог найти. У меня нет прав для этого
Тони
0

Вы должны остановить Mongo, удалить файлы администратора, а затем запустить Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start
Тони
источник
2
Это разрушает базу данных административных пользователей и позволяет получить доступ через «localHostExcetption». Это не хороший способ администрирования пользователей в случае возникновения проблем.
daveh