Привилегии и права доступа: GRANT и REVOKE

🤝 Введение в привилегии: почему это важно?

Базы данных — как многоэтажные дома. Без правил доступа любой может зайти в вашу квартиру и переставить мебель! GRANT и REVOKE — это «замки» для ваших SQL-данных.

Пример проблемы:

-- Уборщик случайно удалил таблицу с клиентами
DELETE FROM customers;  -- Ой!

🗝️ Основные привилегии: мини-словарь

Привилегия Что разрешает?
SELECT Чтение данных
INSERT Добавление записей
UPDATE Изменение данных
DELETE Удаление данных
ALL PRIVILEGES Полный доступ (администратор)

🔓 GRANT: выдача прав

Синтаксис-пазл:

GRANT привилегия1, привилегия2
ON объект
TO пользователь;

Живые примеры

1. Даём доступ к чтению:

GRANT SELECT
ON employees
TO accountant;  -- Бухгалтеру можно только смотреть

2. Права на несколько действий:

GRANT SELECT, INSERT, UPDATE
ON orders
TO manager;  -- Менеджер может работать с заказами

3. Суперспособности для админа:

GRANT ALL PRIVILEGES
ON *.*
TO db_admin;  -- Полный контроль над всеми БД

🔒 REVOKE: отзыв прав

Работает зеркально GRANT:

REVOKE привилегия
ON объект
FROM пользователь;

Пример «разжалования»:

REVOKE DELETE
ON products
FROM intern;  -- Стажёр больше не сможет удалять товары

🎯 Гранты с условиями: WITH GRANT OPTION

Хитрый флаг, который позволяет пользователю передавать свои права другим:

GRANT SELECT
ON reports
TO team_lead
WITH GRANT OPTION;  -- Теперь team_lead может давать SELECT другим

⚠️ Опасность: цепочка прав может выйти из-под контроля!


🧩 Комбинированные сценарии

1. Создание ролей (для групп пользователей):

CREATE ROLE marketing;
GRANT SELECT ON campaigns TO marketing;
GRANT marketing TO user1, user2;  -- Назначение роли

2. Каскадный отзыв:

REVOKE GRANT OPTION FOR SELECT
ON database.table
FROM user3
CASCADE;  -- Отзывает и все производные права

💡 Проверка прав: кто на что имеет доступ?

Полезные системные таблицы:

-- Для MySQL
SHOW GRANTS FOR current_user;

-- Для PostgreSQL
\du

🚨 Типичные ошибки

1. Избыточные права: Не давайте ALL PRIVILEGES без необходимости.

-- Плохо:
GRANT ALL PRIVILEGES ON *.* TO 'dev'@'%';

-- Лучше:
GRANT SELECT, INSERT ON dev_db.* TO 'dev'@'%';

2. Забытый REVOKE: Увольняете сотрудника? Отзывайте права!

REVOKE ALL PRIVILEGES ON *.* FROM 'ex_employee'@'%';

🏆 Лучшие практики

  1. Принцип минимальных прав: Выдавайте только то, что действительно нужно.
  2. Роли > Индивидуальные права: Управлять 10 ролями проще, чем 100 пользователями.
  3. Аудит: Раз в квартал проверяйте SHOW GRANTS.

📚 Где потренироваться?

  1. Создайте тестовую БД и пользователей
  2. Поиграйте с комбинациями GRANT/REVOKE
  3. Попробуйте «сломать» доступ, чтобы понять ограничения
-- Пример для тренировки
CREATE USER trainee IDENTIFIED BY 'password';
GRANT SELECT ON sakila.* TO trainee;
REVOKE SELECT ON sakila.actor FROM trainee;
Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео