Аутентифікація в MongoDB (RBAC)

pic

Захист бази даних — це одна з очевидних задач, яку ви виконуватимете при підготовці бази даних до роботи в продакшн-середовищі.
MongoDB має дуже зрозумілу та легку для навчання структуру аутентифікації та авторизації. У цьому посібнику я розкажу, як увімкнути
аутентифікацію в локально встановленій MongoDB (на Arch-подібних системах). Давайте спочатку розглянемо, як створити користувача, щоб ви могли авторизуватися, інакше ви не зможете увійти.
Отже, давайте спершу створимо базу даних:
use

use carPrice

Тепер, коли ми маємо нашу базу даних, давайте створимо користувача, який матиме доступ до бази даних carPrices.

Щоб створити користувача в MongoDB, введіть:
db.createUser({
user:"yourusername",
pwd:"thePasswordOfUser",
role:[{role:"Name of Role",db:"The Database Name Which User will access"}]
})
Отже, наша команда виглядатиме так:

db.createUser({  
user:"employee_one",  
pwd:"pass@123",  
role:[{role:"readWrite",db:"carPrices"}]  
})

Щоб перевірити, чи створено користувача, перейдіть до бази даних, в якій ви створили користувача, і введіть:

db.getUsers()

Ви побачите вашого користувача в списку, але чекайте хвилину, чому я вказав readWrite в значенні ролі. Це стандартна роль, створена MongoDB, яка дозволяє користувачу створювати, видаляти та оновлювати записи.
Що ж таке ролі в MongoDB?
(Приблизне пояснення) Уявіть, що ви керуєте фабрикою, яка виробляє металеві труби, і ваш персонал складається з робітників, менеджерів, охоронців. Вони мають різні назви та функції, але по суті вони однакові — тобто це люди. Лише їхні імена та дії в межах фабрики відрізняються. Менеджер не працюватиме як охоронець. Точно так само у нас є ролі — це імена, присвоєні користувачам, і ми визначаємо, які дії вони можуть виконувати в базі даних, наприклад, читання, оновлення, видалення тощо.
Щоб створити роль у MongoDB, введіть:
db.createRole({
name:"name you want to give your role"
privileges:[
{
resource:{db:"databaseName",collection:""}
,actions:["find","insert"] — Це стандартні дії, більше можна знайти тут https://www.mongodb.com/docs/v8.0/reference/privilege-actions/#mongodb-authaction-insert
}
],roles:[] — Якщо ви хочете успадкувати ролі від інших ролей
})
Отже, наш запит виглядатиме так:

db.createRole({  
 role:"carPricesDev's",  
 privileges:[  
 {resource:{db:"carPrice",collection:""},actions:["find","insert","remove"]}  
 ],  
 roles:[]  
 });

Перевірити це можна за допомогою команди:

db.getRoles()

Тепер ви можете призначити цю роль користувачу, якого ми створили, за допомогою:

db.grantRolesToUser("employee_one",[{role:"carPricesDev's",db:"carPrices"}])

Ми можемо забрати роль за допомогою:

db.revokeRolesFromUser("username", [{ role: "roleName", db: "databaseName" }])

Ого, це було багато роботи! Тепер давайте зробимо головну річ — увімкнемо аутентифікацію, щоб будь-хто, хто намагається підключитися до нашої бази даних, потребував ім’я користувача та пароль. Для цього потрібно знайти файл під назвою mongodb.conf.
Найімовірніше, ви знайдете його
у папці /etc, а якщо ні, ви можете ввести:

find / -name "mongodb.conf"

Коли ви відкриєте цей файл, знайдіть рядок, який починається з # security, і приберіть хеш-мітку. На наступному рядку введіть authorization: "enabled" (переконайтесь, що відступи точно такі ж, інакше при запуску сервера ви отримаєте помилку), як показано нижче:

security:  
 authorization: "enabled"

Тепер збережіть файл і перезавантажте сервер, ввівши:

sudo systemctl restart mongodb

І перевірте це, набравши:

sudo systemctl status mongodb

Тепер доступ до MongoDB матимуть лише аутентифіковані користувачі. Щоб підключитись, введіть:

mongosh -u “username” -p “password” — authenticationDatabase “database where the user is created”

Отже, наша команда виглядатиме так:

mongosh -u "employee_one" -p "pass@123" - authenticationDatabase "carPrice"

Ось і все з цієї теми, ви завжди можете покращити свої знання, читаючи офіційну документацію — це був лише короткий огляд 👾⋆˚☆˖°👾 👨🏻‍💻 👾⋆˚☆˖°👾.

Перекладено з: Authentication In Mongodb (RBAC)

Leave a Reply

Your email address will not be published. Required fields are marked *