Роли, права и резервные копии

Раздаём права ролям и делаем резервные копии — основа безопасной эксплуатации.

GRANT — команда, выдающая роли права на объекты базы (таблицы, схемы), а pg_dump — утилита, создающая резервную копию базы.

Роли и привилегии

В PostgreSQL пользователи и группы — это роли. Принцип безопасности — наименьшие привилегии: приложение должно иметь ровно те права, что ему нужны, и ни одним больше. Не стоит подключать рабочее приложение под суперпользователем postgres.

-- Создать роль для приложения с паролем и правом входа
CREATE ROLE app_user WITH LOGIN PASSWORD 'secret';

-- Создать роль-группу только для чтения (без входа)
CREATE ROLE readonly;

Выдача прав: GRANT и REVOKE

GRANT выдаёт права, REVOKE отзывает. Права бывают на конкретные действия: SELECT, INSERT, UPDATE, DELETE и другие.

-- Приложению — полный доступ к таблице orders
GRANT SELECT, INSERT, UPDATE, DELETE ON orders TO app_user;

-- Роли readonly — только чтение всех таблиц схемы public
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

-- Включить пользователя в группу (унаследует её права)
GRANT readonly TO analyst;

-- Отозвать право
REVOKE DELETE ON orders FROM app_user;

Группы-роли удобны: выдаёте права один раз группе readonly, а потом просто включаете в неё новых аналитиков. Менять права у каждого по отдельности не нужно.

Резервные копии: pg_dump

Утилита pg_dump выгружает базу в файл. Это основа защиты от потери данных. Запускают её из шелла, а не из psql.

# Дамп в текстовый SQL-файл (читаемый, переносимый)
pg_dump -U postgres shop > shop_backup.sql

# Дамп в сжатый бинарный формат (быстрее, гибче при восстановлении)
pg_dump -U postgres -F c shop > shop_backup.dump

# Дамп всех баз кластера сразу
pg_dumpall -U postgres > all_databases.sql
ФорматЧем хорош
текстовый .sqlчитается глазами, восстанавливается через psql
бинарный -F cсжатый, позволяет выборочное восстановление через pg_restore

Восстановление

Способ восстановления зависит от формата дампа.

# Текстовый дамп прогоняют через psql
psql -U postgres -d shop_new -f shop_backup.sql

# Бинарный дамп восстанавливают через pg_restore
pg_restore -U postgres -d shop_new shop_backup.dump

Золотое правило: бэкап, который ни разу не пробовали восстановить, бэкапом не является. Периодически проверяйте восстановление на тестовой базе.

Что изучать дальше

  • Производительность: углублённый разбор планов EXPLAIN, настройка параметров, типы индексов (GIN, GiST, BRIN).
  • Конкурентность: уровни изоляции транзакций, блокировки, MVCC.
  • Масштабирование: репликация, секционирование таблиц (partitioning), пулы соединений (PgBouncer).
  • Расширения: PostGIS (геоданные), pg_trgm (нечёткий поиск), full-text search.

Итог

  • Доступ дают роли; следуйте принципу наименьших привилегий, права выдаёт GRANT, отзывает REVOKE.
  • Роли-группы упрощают управление: права у группы, людей включают в группу.
  • pg_dump/pg_dumpall создают резервные копии, psql/pg_restore восстанавливают; бэкап нужно проверять восстановлением.
Проверьте себя
1. Какой принцип безопасности рекомендует давать роли минимально необходимый доступ?
AПринцип максимальной открытости
BПринцип наименьших привилегий
CПринцип единого пароля
DПринцип суперпользователя
2. Что делает команда pg_dump?
AСоздаёт новую пустую базу
BВыгружает базу данных в файл резервной копии
CУдаляет все таблицы
DВосстанавливает базу из копии
3. Зачем удобны роли-группы вроде readonly?
AОни работают быстрее обычных ролей
BПрава выдаются группе один раз, а новых пользователей просто включают в неё
CОни не требуют пароля
DОни автоматически делают бэкапы
Поддержать проект