Skip to content

User management

Управління користувачами

Раніше для підключення до бази даних ми використовували двох користувачів: root та користувача, якого ми створили для віддалених підключень. Вони мали всі можливі права в системі, від виконання простих SELECT-запитів до видалення баз даних. У реальному світі слід акуратніше розмежовувати права та дозволяти користувачам робити тільки те, що їм необхідно.

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

ssh username@host 
mysql -u mysqluser -pP@ssw0rd optionalDatabaseName

Тут: - testuser — це ім'я користувача; - після @ знаходяться IP-адреси, з яких користувач може підключатись; - P@ssw0rd — це пароль користувача. - optionalDatabaseName - база даних до якої підключатись

💡 Обмеження IP-адрес, з яких може підключатись користувач — це додатковий рівень безпеки в системі, але цим механізмом важко керувати на рівні сервера бази даних, коли інфраструктура велика і динамічна та коли IP-адреса клієнта може часто змінюватись. Саме тому цим механізмом майже ніколи не користуються, а натомість просто дозволяють підключення зі всіх IP-адрес і для цього вказують %.

Налаштування прав

Запит для встановлення прав користувачу виглядає ось так:

GRANT <PRIVILEGE> ON database.table TO 'username'@'host';
Тут PRIVILEGE — це роль, яку потрібно встановити для користувача, тобто список дій, які може виконувати користувач. В MySQL є наступні ролі: CREATEALTERDROPINSERTUPDATEDELETESELECTREFERENCES та RELOAD. При налаштуванні прав, ці ролі потрібно вказувати через кому. Наприклад, якщо потрібно дозволити користувачу лише операції INSERTUPDATEDELETESELECT, команда GRANTвиглядатиме ось так:
GRANT INSERT, UPDATE, DELETE, SELECT ON database.table TO 'username'@'host';
Якщо користувачу потрібно надати всі ці ролі, їх можна замінити одним ключовим словом ALL:
GRANT ALL ON database.table TO 'username'@'host';
Для прикладу налаштуємо права нашому новоствореному користувачу так, щоб він міг зчитувати та записувати дані в базі company, яку ми використовували в попередніх прикладах. Для цього перелогінимось як root і виконаємо наступну команду:
exit
sudo mysql -u root 
GRANT INSERT, UPDATE, DELETE, SELECT ON company.* TO 'testuser'@'%'; 
До речі, саме така конфігурація прав використовується найчастіше для користувачів бази даних, яких використовують для вебзастосунків, адже зазвичай вебзастосунку потрібно лише читати та записувати дані, але аж ніяк не створювати таблиці чи видаляти бази.

Після виконання цієї команди, ми зможемо під'єднатися до сервера під користувачем 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 насправді потрібно лише зчитувати базу даних, але не оновлювати дані в ній. Тоді нам потрібно оновити його права, це можна зробити за допомогою наступної команди:

REVOKE INSERT, UPDATE, DELETE ON company.* FROM 'testuser'@'%';

А ось команда для оновлення пароля користувача:

ALTER USER 'testuser'@'%' IDENTIFIED BY 'newP@ssw0rd';

Видалення користувача

Якщо користувач нам більше не потрібен, його можна видалити ось так:

DROP USER  'testuser'@'%' ; 

Керування користувачами та налаштування їх прав — важливий аспект адміністрування баз даних. Least Privilege Principle, тобто надання користувачам в системі лише тих прав, які необхідні їм для виконання їх задач є однією з основних технік безпеки комп'ютерних систем. Хоча певні деталі можуть відрізнятись, у більшості систем керування баз даних робота з користувачами влаштована майже однаково. Тому навчившись працювати з MySQL ти легко розберешся з тим, як налаштовувати права для будь-якої бази даних.