Роли, права и резервные копии
Раздаём права ролям и делаем резервные копии — основа безопасной эксплуатации.
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восстанавливают; бэкап нужно проверять восстановлением.