Перейти к содержанию

Безопасность и контроль доступа: пользователи, роли, GRANT и REVOKE

Начало урока

Безопасность и контроль доступа

Пользователи, роли, GRANT и REVOKE и принцип наименьших привилегий, защищающий рабочие данные

Главная идея: движок базы данных решает о каждом подключении две вещи: кто ты (аутентификация) и что тебе разрешено делать (авторизация). Аутентификация - это вход (учётная запись плюс секрет). Авторизация - это набор привилегий - типизированных разрешений вроде SELECT, INSERT или DROP, ограниченных сервером, базой, таблицей или даже одним столбцом. 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. Эта отправная точка "по умолчанию запрещено" - фундамент, на котором строится всё остальное.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя