Як захистити 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.