User management
Управління користувачами
Раніше для підключення до бази даних ми використовували двох користувачів: root та користувача, якого ми створили для віддалених підключень. Вони мали всі можливі права в системі, від виконання простих SELECT-запитів до видалення баз даних. У реальному світі слід акуратніше розмежовувати права та дозволяти користувачам робити тільки те, що їм необхідно.
Працюватимемо з користувачами ми безпосередньо з віртуальної машини, на якій запущено наш сервер бази даних, з вбудованого клієнта:
Тут:
- testuser — це ім'я користувача;
- після @ знаходяться IP-адреси, з яких користувач може підключатись;
- P@ssw0rd — це пароль користувача.
- optionalDatabaseName - база даних до якої підключатись
💡 Обмеження IP-адрес, з яких може підключатись користувач — це додатковий рівень безпеки в системі, але цим механізмом важко керувати на рівні сервера бази даних, коли інфраструктура велика і динамічна та коли IP-адреса клієнта може часто змінюватись. Саме тому цим механізмом майже ніколи не користуються, а натомість просто дозволяють підключення зі всіх IP-адрес і для цього вказують %.
Налаштування прав
Запит для встановлення прав користувачу виглядає ось так:
ТутPRIVILEGE — це роль, яку потрібно встановити для користувача, тобто список дій, які може виконувати користувач. В MySQL є наступні ролі: CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES та RELOAD. При налаштуванні прав, ці ролі потрібно вказувати через кому. Наприклад, якщо потрібно дозволити користувачу лише операції INSERT, UPDATE, DELETE, SELECT, команда GRANTвиглядатиме ось так:
Якщо користувачу потрібно надати всі ці ролі, їх можна замінити одним ключовим словом ALL:
Для прикладу налаштуємо права нашому новоствореному користувачу так, щоб він міг зчитувати та записувати дані в базі company, яку ми використовували в попередніх прикладах. Для цього перелогінимось як root і виконаємо наступну команду:
До речі, саме така конфігурація прав використовується найчастіше для користувачів бази даних, яких використовують для вебзастосунків, адже зазвичай вебзастосунку потрібно лише читати та записувати дані, але аж ніяк не створювати таблиці чи видаляти бази.
Після виконання цієї команди, ми зможемо під'єднатися до сервера під користувачем testuser з MySQL Workbench, вказавши IP-адресу, ім'я користувача, пароль та ім'я бази даних, для якої в нашого користувача налаштовані права (у полі default shema).
Тепер виконаємо запити SELECT та INSERT:
use company;
SELECT * from Employees;
INSERT INTO Employees (FirstName, LastName, Position, Department, HireDate) Values ('Jane', 'Dough', 'Developer', 'IT', '2023-01-10');
Оновлення прав
Тепер повернемось до нашого сервера баз даних. Уявімо, що нашому testuser насправді потрібно лише зчитувати базу даних, але не оновлювати дані в ній. Тоді нам потрібно оновити його права, це можна зробити за допомогою наступної команди:
А ось команда для оновлення пароля користувача:
Видалення користувача
Якщо користувач нам більше не потрібен, його можна видалити ось так:
Керування користувачами та налаштування їх прав — важливий аспект адміністрування баз даних. Least Privilege Principle, тобто надання користувачам в системі лише тих прав, які необхідні їм для виконання їх задач є однією з основних технік безпеки комп'ютерних систем. Хоча певні деталі можуть відрізнятись, у більшості систем керування баз даних робота з користувачами влаштована майже однаково. Тому навчившись працювати з MySQL ти легко розберешся з тим, як налаштовувати права для будь-якої бази даних.