Як я можу ввести Mongo як суперпользователь або скинути користувачів?


29

Я розігрувався з дозволами та закрив себе з бази даних Mongo. Я впевнений, що зробив це, намагаючись явно додати доступ до бази даних, але замість цього я замінив лише дозвіл на базу даних. Тож я фактично заблокований зі своєї бази даних Mongo, і все, що я читаю, говорить про те, як створити суперкористувача, якщо я маю права доступу користувача. Зараз я не думаю, що у мене немає користувачів, які мають таку привілей. Чи є спосіб увійти до бази даних як повний доступ? Я володію сервером і маю кореневий доступ.

Відповіді:


38

Якщо ви заблокували себе, вам потрібно зробити наступне:

  1. Зупиніть свій екземпляр MongoDB
  2. Видаліть параметри --auth та / або --keyfile з конфігурації MongoDB, щоб відключити автентифікацію
  3. Запустіть примірник без автентифікації
  4. Редагуйте користувачів за потребою
  5. Перезапустіть примірник із увімкненою автентифікацією

Видалення 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

Якщо ви використовуєте набір реплік із символом akeyfile

Захист між членами набору реплік за допомогою внутрішньої аутентифікації

Ключ-файл використовується для аутентифікації в реплікації.

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

Перевірте відповіді на це питання, вони можуть допомогти

https://stackoverflow.com/questions/20117104/mongodb-root-user

Якщо ви все ще маєте доступ до сервера, ви можете мати доступ до Adminбази даних.

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

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


1
Як було сказано у публікації, це єдина інформація, яку я зміг знайти. У мене немає дозволів на це
Тоні,

0

Ви повинні зупинити Монго, видалити файли адміністратора, а потім запустити Mongo

sudo service mongod stop
mv /data/admin.* .
sudo service mongod start

2
Це знищує базу даних адміністративних користувачів і дозволяє отримати доступ через "localHostExcetption", це не є гарним способом адмініструвати користувачів, коли у вас є проблеми.
daveh
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.