Як захистити MongoDB за допомогою імені користувача та пароля


376

Я хочу встановити автентифікацію імені користувача та пароля для мого примірника MongoDB, щоб будь-який віддалений доступ запитав ім’я користувача та пароль. Я спробував підручник з сайту MongoDB і зробив наступне:

use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');

Після цього я вийшов і знову побіг монго. І мені не потрібен пароль для доступу до нього. Навіть якщо я підключаюсь до бази даних віддалено, мені не запропонують ім’я користувача та пароль.


ОНОВЛЕННЯ Ось рішення, яке я закінчив

1) At the mongo command line, set the administrator:

    use admin;
    db.addUser('admin','123456');

2) Shutdown the server and exit

    db.shutdownServer();
    exit

3) Restart mongod with --auth

  $ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/

4) Run mongo again in 2 ways:

   i) run mongo first then login:

        $ ./mongodb/bin/mongo localhost:27017
        use admin
        db.auth('admin','123456');

  ii) run & login to mongo in command line.

        $ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456

Ім'я користувача та пароль працюватимуть так само, як mongodumpі для mongoexport.


4
це для версії MongDB 2.2.x
Том Імрей

22
У Mongo 3.0.4 командою для створення користувача є db.createUser () .
chronologos

4
Дотримуйтесь цього, щоб створити користувача адміністратора на Mongodb 3.0 docs.mongodb.org/v3.0/tutorial/add-user-administrator
Суль-ага


1
Щоб було зрозуміло, це не шифрує байти, які проходять через провід. Це лише для контролю доступу.
Даніель Ф

Відповіді:


117

Почати потрібно mongodз цієї --authопції після налаштування користувача.

З сайту MongoDB:

Запустіть базу даних (процес mongod) з --authможливістю включення безпеки. Ви повинні або додати користувача до адміністратора db перед запуском сервера --auth, або додати першого користувача з інтерфейсу localhost.

Аутентифікація MongoDB


1
Я спробував це і наслідував приклад. тепер .. я можу встановити його після перезавантаження сервера з --auth. Однак, коли я намагаюся увійти (./mongo -u theadmin -p 12345), я не вдається. Я не можу ввійти.
murvinlai

Якщо після цього ви не можете підключитися, це тому, що ви намагаєтесь підключитися на admindb, використовуйте інший db і повторіть спробу. Підключити може лише користувачAdmin (AnyDatabase) admin.
Vadorequest

80

Ось так багато складних / заплутаних відповідей тут.

Це станом на v3.4 .

Коротка відповідь.

1) Запустіть MongoDB без контролю доступу.

mongod --dbpath /data/db

2) Підключіться до екземпляра.

mongo

3) Створіть користувача.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

4) Зупиніть екземпляр MongoDB і запустіть його знову за допомогою контролю доступу.

mongod --auth --dbpath /data/db

5) Підключіться та автентифікуйтесь як користувач.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

Довга відповідь: прочитайте це, якщо хочете правильно зрозуміти.

Це дійсно просто. Я буду глумити наступне нижче https://docs.mongodb.com/manual/tutorial/enable-authentication/

Якщо ви хочете дізнатися більше про те, що ролі насправді виконують, читайте більше тут: https://docs.mongodb.com/manual/reference/built-in-roles/

1) Запустіть MongoDB без контролю доступу.

mongod --dbpath /data/db

2) Підключіться до екземпляра.

mongo

3) Створіть адміністратора користувача. Далі створюється адміністратор користувача в adminбазі даних аутентифікації. Користувач є dbOwnerнад some_dbбазою даних, а НЕ над adminбазою даних, це важливо пам'ятати.

use admin
db.createUser(
  {
    user: "myDbOwner",
    pwd: "abc123",
    roles: [ { role: "dbOwner", db: "some_db" } ]
  }
)

Або якщо ви хочете створити адміністратора, який є адміністратором над будь-якою базою даних:

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

4) Зупиніть екземпляр MongoDB і запустіть його знову за допомогою контролю доступу.

mongod --auth --dbpath /data/db

5) Підключіть і автентифікуйтесь як адміністратор користувача до admin базу даних автентифікації, а не some_dbБД. Адміністратор користувача створений в adminбазі даних аутентифікації, користувач не існує в some_dbбазі даних аутентифікації.

use admin
db.auth("myDbOwner", "abc123")

Тепер ви перевірка справжності як dbOwnerпо some_dbбазі даних. Отже, якщо ви хочете читати / писати / робити речі безпосередньо до some_dbбази даних, ви можете змінити її.

use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.

Детальніше про ролі: https://docs.mongodb.com/manual/reference/built-in-roles/

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

6) Створіть нормального користувача. Цей користувач буде створений в some_dbбазі даних аутентифікації внизу.

use some_db
db.createUser(
  {
    user: "myNormalUser",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "some_db" },
             { role: "read", db: "some_other_db" } ]
  }
)

7) Вийдіть з оболонки mongo, повторно підключіться, автентифікуйтесь як користувач.

use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})

2
Нарешті я отримав уявлення про те, що насправді відбувається.
закортований


3
Я вважаю, що бажаю, щоб прийняті відповіді могли оновитись на SO. Це найрелевантніше рішення станом на липень 2017 року
азатар

1
Будь ласка, оновіть свою відповідь! Я не знаю, звідки ви отримали userAdminAnyDatabase, але це не працює. Роль є коренем для доступу адміністратора над усіма dbs.
Аакаш Верма

@AakashVerma docs.mongodb.com/manual/reference/built-in-roles/… ;) Також НІКОЛИ НЕ ВИКОРИСТОВУЙТЕ КОРИНО, якщо з цілей розвитку там, де ви знаєте, що ви не можете бути порушені! (tbh просто ніколи не використовуйте root lol)
K - Токсичність в SO зростає.

63

Спочатку #auth=trueскасуйте коментар до рядка, який починається з вашого конфігураційного файла mongod (шлях за замовчуванням /etc/mongo.conf). Це дозволить встановити автентифікацію для mongodb.

Потім перезапустіть mongodb: sudo service mongod restart


10
шлях за замовчуванням /etc/mongod.confне/etc/mongo.conf
Міфріл,

2
або, по-перше, коментар, потім перезавантажте :)))
GioMac

2
Оновлення: тепер перезапустіть сервіс з: sudo service mongodb restart
sharafjaffri

розташування та ім’я файлу конфігурації є: /etc/mongodb.conf
HGMamaci

46

Відповідь на це питання для Монго 3.2.1 Посилання

Термінал 1:

$ mongod --auth

Термінал 2:

db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})

якщо ви хочете додати без ролей (необов’язково):

db.createUser({user:"admin_name", pwd:"1234", roles:[]})

щоб перевірити, підтверджена чи ні:

db.auth("admin_name", "1234")

він повинен дати вам:

1

ще:

Error: Authentication failed.
0

2
старіші версії, такі як 2.4, будуть використовувати db.addUser
arviman

Мені довелося набрати use adminраніше, createUserінакше це призвело до помилки.
Гійом Ф.

28

Ось javascript-код для додавання користувачів.

  1. Почніть mongodз--auth = true

  2. Доступ до бази даних адміністратора з оболонки mongo та передайте файл javascript.

    Монго адміністратор "Filename.js"

    "Filename.js"

    // Adding admin user
    db.addUser("admin_username", " admin_password");
    // Authenticate admin user
    db.auth("admin_username ", " admin_password ");
    // use  database code from java script
    db = db.getSiblingDB("newDatabase");
    // Adding newDatabase database user  
    db.addUser("database_username ", " database_ password ");
  3. Тепер додавання користувача завершено, ми можемо перевірити доступ до бази даних з оболонки mongo


1
Встановлення імені користувача та пароля у файлі виглядає не дуже захищено.
Дослідження

Javascript. Не "сценарій Java".
Каміло Мартін

яка мета файлу javascript тут?
Раві

@CamiloMartin JavaScript, а не "Javascript".
Madbreaks


10

Спочатку запустіть mongoDB на терміналі

mongod

тепер запустіть оболонку mongo, використовуючи наступні команди

    use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

Перезапустіть екземпляр MongoDB за допомогою контролю доступу.

mongod --auth

Тепер автентифікуйте себе з командного рядка, використовуючи

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

Я читав це з

https://docs.mongodb.com/manual/tutorial/enable-authentication/


1
Я визначив користувача з корінцем, а потім додаю все більше і більше, поки я не знайду вас, MongoDB Enterprise > db.system.users.find() { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "k96PCEflidMY5seVju+gAw==", "s toredKey" : "CabQTnJtny7cv0wT5X8oX9QOn3A=", "serverKey" : "RJyCdnlIhyIfj2+d44L61 bYK+MU=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "dbAdmin", "db" : "admin" }, { "role" : "userAdmin", "db" : "admin" }, { "role" : "root", "db" : "admin" } ] }все ще не
вдалося пройти

Я навіть використовував db.changeUserPassword (), або будь-яку іншу річ, навіть після цього, коли я називаю db.auth ("адміністратор", "мій пас"), або як ви це зробили, він говорить, що для адміністратора користувача автентифікація не вдалася
deadManN

Використовуйте rootроль, щоб забезпечити доступ до операцій та всіх ресурсів наступних ролей у поєднанні ... root root
Laode Muhammad Al Fatih

8

Це те, що я зробив на Ubuntu 18.04:

$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({  user: "root",  pwd: "rootpw",  roles: [ "root" ]  })  // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({  user: "lefa",  pwd: "lefapw",  roles: [ { role: "dbOwner", db: "lefa" } ]  }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase  "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase  "lefa"
> use lefa
> exit

8

Ви могли змінитись /etc/mongod.conf.

До цього

#security:

Після

security:
    authorization: "enabled"

Тоді sudo service mongod restart


5

Виконайте наступні кроки для того, щоб

  • Створіть користувача за допомогою CLI
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)
  • Увімкніть автентифікацію, те, як це робити, відрізняється від вашої ОС, якщо ви використовуєте Windows, ви можете просто mongod --authв разі Linux ви можете відредагувати /etc/mongod.confфайл, щоб додати, security.authorization : enabledа потім перезапустити службу mongd
  • Для підключення через cli mongo -u "admin" -p "admin123" --authenticationDatabase "admin". Це воно

Ви можете переглянути цю публікацію, щоб дізнатися більше про деталі та навчитися підключатися до неї за допомогою мангуста.


4

Створення користувача з паролем для певної бази даних для забезпечення доступу до бази даних:

use dbName

db.createUser(
   {
     user: "dbUser",
     pwd: "dbPassword",
     roles: [ "readWrite", "dbAdmin" ]
   }
)

4

Вам потрібно буде перейти на базу даних, яку ви бажаєте користувачеві (а не адміністратор db) ...

use mydatabase

Дивіться цю публікацію для отримання додаткової допомоги ... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/


не потрібно, оскільки встановлення db = db.getSiblingDB ("newDatabase");
Озан БАЙРАМ

3

Ці кроки працювали на мене:

  1. написати mongod --port 27017 на cmd
  2. потім підключіться до оболонки mongo: mongo --port 27017
  3. створити адміністратора користувача: використовуйте адміністратора db.createUser ({user: "myUserAdmin", pwd: "abc123", ролі: [{role: "userAdminAnyDatabase", db: "admin"}]})
  4. відключити оболонку монго
  5. перезапустіть mongodb: mongod --auth --port 27017
  6. запустити оболонку mongo: mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
  7. Щоб підтвердити автентифікацію після підключення, підключіть оболонку монго до mongod: mongo --port 27017
  8. перейти на базу даних аутентифікації: використовувати адміністрування db.auth ("myUserAdmin", "abc123"

3

Найкраща практика підключення до mongoDB:

  1. Після первинної установки

    use admin

  2. Потім запустіть наступний скрипт, щоб створити користувача адміністратора

    db.createUser( { user: "YourUserName", pwd: "YourPassword", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" }, { role: "dbAdminAnyDatabase", db: "admin" }, { role: "clusterAdmin", db: "admin" } ] })

наступний сценарій створить користувача адміністратора для БД.

  1. увійдіть у db.admin за допомогою

    mongo -u YourUserName -p YourPassword admin

  2. Після входу ви можете створити N номер бази даних з однаковими обліковими записами адміністратора або різними, повторивши від 1 до 3.

Це дозволяє створити різних користувачів та паролів для іншої колекції, яку ви створюєте в MongoDB


після цього йти до SUDO нано /etc/mongod.conf і поставити цей рядок security.authorization: включена, ви можете побачити посилання посилання тут: stackoverflow.com/a/57384027/3904109
DragonFire

2

після створення нового користувача, не забудьте grant read/write/rootдозволити його. ви можете спробувати

cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])

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