Безопасность и контроль доступа
Пользователи, роли, GRANT и REVOKE и принцип наименьших привилегий, защищающий рабочие данные
GRANT выдаёт привилегии, REVOKE их забирает, а роли объединяют привилегии в наборы, чтобы настроить их один раз и переиспользовать на многих учётных записях.
- создавать учётные записи через
CREATE USERи понимать идентичность'user'@'host', - читать иерархию привилегий - глобальный, БД, табличный, столбцовый и подпрограммный уровни,
- выдавать и отзывать ровно те привилегии, что нужны, через
GRANT/REVOKE, - строить переиспользуемые объекты
ROLEв MySQL 8 и назначать их ролями по умолчанию, - применять наименьшие привилегии, чтобы приложение - или полезная нагрузка SQL-инъекции - могло затронуть только то, для чего оно предназначено.
1. Аутентификация против авторизации
Эти два слова часто путают, но движок держит их строго раздельно. Аутентификация отвечает на вопрос "это действительно та учётная запись?" - это проверка пароля при подключении. Авторизация отвечает "можно ли этой учётной записи выполнить этот оператор над этим объектом?" - её проверяют при каждом запросе по привилегиям, хранящимся в служебных таблицах сервера.
В MySQL учётная запись - это не только имя, а имя плюс шаблон хоста: 'user'@'host'. То же имя пользователя, подключающееся с другого хоста, может быть другой учётной записью с другими правами. Это позволяет сказать "приложение может подключаться только с серверов приложений, но не с ноутбука".
-- Пользователь, который может подключаться только из одной приватной подсети
CREATE USER 'app_web'@'10.0.%' IDENTIFIED BY 'S0me-Strong-Secret';
-- Пользователь, который может подключаться откуда угодно (%). Удобно, но шире поверхность атаки.
CREATE USER 'reporting'@'%' IDENTIFIED BY 'An0ther-Secret';
-- Требовать смену пароля и истекать каждые 90 дней
ALTER USER 'app_web'@'10.0.%' PASSWORD EXPIRE INTERVAL 90 DAY;
Создание пользователя не даёт ничего, кроме возможности войти (и видеть information_schema). Совсем новая учётная запись не может прочитать ни одной бизнес-строки, пока вы что-нибудь не GRANT. Эта отправная точка "по умолчанию запрещено" - фундамент, на котором строится всё остальное.