Создание базы данных и пользователя
Создаём базу под проект, заводим для приложения отдельного пользователя и выдаём ему ровно нужные права.
Пользователь MySQL — учётная запись с паролем и набором привилегий, определяющих, что ему разрешено делать и над какими базами.
Создаём базу данных
База создаётся одной командой. Полезно сразу задать кодировку utf8mb4 — это полноценный Unicode, включая эмодзи (старый utf8 в MySQL урезанный).
CREATE DATABASE shop
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Параметры кодировки — MySQL-специфика, поэтому блок помечен как текст. Сам по себе CREATE DATABASE существует и в стандарте, но SQLite-песочница работает с одной встроенной базой, так что эту команду мы только читаем.
Заводим пользователя приложения
Заходить в продакшен под root — плохая идея. Для приложения создают отдельного пользователя с минимально необходимыми правами. Часть 'app_user'@'localhost' означает «пользователь app_user, подключающийся с локальной машины».
CREATE USER 'app_user'@'localhost'
IDENTIFIED BY 'надёжный_пароль';
Выдаём права командой GRANT
GRANT назначает привилегии. Можно выдать всё на конкретную базу, а можно — только нужные операции (принцип минимальных привилегий).
-- все права, но только на базу shop
GRANT ALL PRIVILEGES ON shop.* TO 'app_user'@'localhost';
-- или аккуратнее: только чтение и запись данных
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'app_user'@'localhost';
-- применить изменения
FLUSH PRIVILEGES;
Запись shop.* означает «все таблицы базы shop». Можно сузить до конкретной таблицы: shop.orders.
Проверяем и отзываем права
SHOW GRANTS FOR 'app_user'@'localhost'; -- что разрешено
REVOKE DELETE ON shop.* FROM 'app_user'@'localhost'; -- отобрать право
DROP USER 'app_user'@'localhost'; -- удалить пользователя
Принцип минимальных привилегий
Главное правило безопасности: выдавайте ровно столько прав, сколько нужно для работы. Веб-приложению, которое только читает каталог, не нужно право DROP TABLE. Если злоумышленник получит доступ через такого пользователя, ущерб будет ограничен.
| Привилегия | Что разрешает |
SELECT | читать данные |
INSERT / UPDATE / DELETE | добавлять, менять, удалять строки |
CREATE / DROP | создавать и удалять таблицы и базы |
ALL PRIVILEGES | всё перечисленное и больше |
Итог
- Базу создаём через
CREATE DATABASE, кодировку лучше братьutf8mb4. - Для приложения заводим отдельного пользователя, а не работаем под root.
GRANTвыдаёт права,REVOKEотзывает,SHOW GRANTSпоказывает их.- Принцип минимальных привилегий снижает риски при взломе.