Приклад створення БД, та користувача

Стисло

Створити користувача adm для бази testdb з паролем “admPass” і максимальними привілеями для всіх таблиць цієї бази:

CREATE USER 'adm'@'localhost' IDENTIFIED BY 'admPass';
GRANT ALL PRIVILEGES ON testdb.* TO 'adm'@'localhost';
FLUSH PRIVILEGES;

Створити користувача usr для бази testdb з паролем “usrPass” і мінімальними привілеями для всіх таблиць цієї бази:

CREATE USER 'usr'@'localhost' IDENTIFIED BY 'usrPass';
GRANT SELECT, UPDATE, INSERT, DELETE, LOCK TABLES, CREATE TEMPORARY TABLES, CREATE VIEW ON testdb.* TO 'usr'@'localhost';"
FLUSH PRIVILEGES;

Цей користувач матиме право додавати, змінювати, видаляти дані у таблицях однієї бази, блокувати їх, створювати тимчасові (для сесії) таблиці:

Вхід

Заходимо під root’ом в MySQL (MariaDB):

Якщо палоль є:

sudo mysql -uroot -p
[sudo] password for olex: 
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 47
Server version: 10.1.47-MariaDB-0ubuntu0.18.04.1 Ubuntu 18.04
...

Якщо система налаштована на вхід без паролю:

sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.29-0ubuntu0.22.04.2 (Ubuntu)
...

Створення бази даних

CREATE DATABASE db_name;
CREATE DATABASE IF NOT EXISTS db_name;

https://dev.mysql.com/doc/refman/8.0/en/create-database.html

https://mariadb.com/kb/ru/create-database/

Переглянути існуючих користувачів та їх привілеї

Список користувачів:

SELECT user, host FROM mysql.user;

Список привілеїв (для кожного користувача виглядає окремо):

SHOW GRANTS FOR 'root'@'localhost';

Створення користувача та видача прав

Створити користувача без будь-яких прав:

CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'password';

Можемо отримати помилку про недостатній рівень захищеності пароля:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

У нових версіях за замовчуванням активовано політику на перевірку складності пароля. Подивимося поточні налаштування:

SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

Можемо змінити деякі параметри:

SET GLOBAL validate_password.special_char_count = 0;"
small="Query OK, 0 rows affected (0,02 sec)"

Тепер можемо створити користувача з паролем без спеціальних символів.

Після цього права призначаються командою ‘GRANT’:

GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost';

До MySQL 8 можна було однією командою і створити користувача, і надати йому права:

GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Але, починаючи з версії 8, разробники заборонили її використання. Необхідно спочатку створити користувача (CREATE USER).

Опис команди:

Інші приклади

Надання особливих прав користувачу:

GRANT SELECT, UPDATE ON base1.* TO 'dbuser'@'localhost' IDENTIFIED BY 'password';

Користувач, що має право змінювати додавати, редагувати, видаляти дані у таблицях однієї бази, створювати тимчасові (для сесії) таблиці:

GRANT
  SELECT, UPDATE, INSERT, DELETE, LOCK TABLES, CREATE TEMPORARY TABLES, CREATE VIEW
ON base1.* TO 'dbuser'@'localhost';"

Разрешение на удаленное подключение и использование базы MySQL:

GRANT ALL PRIVILEGES ON *.* TO 'dbuser'@'192.168.0.55' IDENTIFIED BY 'password'

предоставит права пользователю dbuser, который будет подключаться с компьютера с IP-адресом 192.168.0.55.

Создание учетной записи MySQL с правами создания резервных копий:

GRANT 
  SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES
ON *.* TO 'backup'@'localhost' IDENTIFIED BY 'backup';

Оновити всі надані привілеї

FLUSH PRIVILEGES;

Оновити всі привілеї з таблиць привілеїв у базі даних mysql. Якщо сервер запущено з опцією –skip-grant-table, це знову активує таблиці привілеїв.

https://dev.mysql.com/doc/refman/8.0/en/privilege-changes.html

https://mariadb.com/kb/en/flush/

Див також