Привет, коллеги! Сегодня разберёмся с одной из самых частых задач при работе с PostgreSQL — созданием пользователей и управлением их правами. Даже если ты не DBA, а просто девелопер или DevOps, знать, как грамотно раздавать доступы, критически важно. Пару неверных команд — и вот уже твой продакшен-юзер имеет права дропа таблиц, а тестовый аккаунт случайно попал в прод. Знакомо? Давай учиться делать всё правильно!
Зачем вообще заморачиваться с правами?
PostgreSQL — это не только про хранение данных, но и про безопасность. Грамотно настроенные роли и права доступа — твоя страховка от случайных (и не очень) косяков, утечек и багов. К тому же, это must-have для прохождения аудитов и соответствия стандартам безопасности.
Что потребуется
- ОС: Любая Unix-подобная (Linux, macOS, BSD). Windows тоже ок, но примеры будут под Linux.
- Железо: Любой сервер или виртуалка, хватит даже t2.micro.
- PostgreSQL: Версия не старше 10-й (лучше 12+).
- Доступ к shell и права sudo (или root-доступ к БД).
Установка PostgreSQL (быстро и по делу)
Если у тебя уже стоит PostgreSQL — можешь пропустить этот пункт. Для остальных:
# Ubuntu/Debian sudo apt update sudo apt install postgresql postgresql-contrib # CentOS/RHEL sudo dnf install postgresql-server postgresql-contrib sudo postgresql-setup --initdb sudo systemctl enable --now postgresql # macOS (через Homebrew) brew install postgresql brew services start postgresql
После установки проверь, что всё работает:
sudo -u postgres psql -c "SELECT version();"
Если видишь версию — значит, всё ок.
Создание пользователя: пошагово
В PostgreSQL пользователи называются roles
. Они могут быть с правами входа (login) или без. Обычно всё делаем через psql:
# Заходим под системным пользователем postgres sudo -u postgres psql # Создаём пользователя (роль) с паролем CREATE ROLE myuser WITH LOGIN PASSWORD 'supersecret'; # Альтернативно, одной строкой: CREATE USER myuser WITH PASSWORD 'supersecret';
Если нужен superuser (не делай так на бою, только для теста!):
CREATE USER admin WITH SUPERUSER PASSWORD 'adminpass';
Управление правами: даём и забираем
Самое важное — права на базы, схемы, таблицы, функции. Вот основные команды:
-
- Дать права на подключение к базе:
GRANT CONNECT ON DATABASE mydb TO myuser;
-
- Дать права на схему:
GRANT USAGE ON SCHEMA public TO myuser;
-
- Дать права на таблицу:
GRANT SELECT, INSERT, UPDATE ON TABLE public.mytable TO myuser;
-
- Забрать права:
REVOKE UPDATE ON TABLE public.mytable FROM myuser;
-
- Дать все права на все таблицы схемы:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;
-
- Дать права на создание объектов в схеме:
GRANT CREATE ON SCHEMA public TO myuser;
Полный список прав:
- SELECT
- INSERT
- UPDATE
- DELETE
- TRUNCATE
- REFERENCES
- TRIGGER
- ALL PRIVILEGES
Подробнее: https://www.postgresql.org/docs/current/sql-grant.html
Ошибки и как делать не надо
- Не давай SUPERUSER без необходимости. Это как sudo root — опасно.
- Не используй одного пользователя для всего. Разделяй по сервисам и ролям.
- Не забывай про REVOKE. Если кто-то ушёл — забирай права.
- Не храни пароли в git. Используй переменные окружения или vault.
- Не забывай про pg_hba.conf. Даже если есть роль, доступ зависит от настроек pg_hba.conf.
Пример реального использования
Допустим, у тебя есть веб-приложение и BI-аналитика. Не хочешь, чтобы BI-юзер мог писать в базу. Как быть?
-- Создаём юзера для веба: CREATE USER webapp WITH PASSWORD 'webpass'; GRANT CONNECT ON DATABASE mydb TO webapp; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO webapp; -- Создаём BI-юзера: CREATE USER bi_readonly WITH PASSWORD 'bipass'; GRANT CONNECT ON DATABASE mydb TO bi_readonly; GRANT SELECT ON ALL TABLES IN SCHEMA public TO bi_readonly; -- Чтобы новые таблицы тоже были доступны: ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO bi_readonly;
Всё, BI-юзер теперь только читает, а веб-приложение может писать.
Заключение
Вроде бы всё просто, но грамотное управление пользователями и правами — это фундамент безопасности твоей базы. Не ленись, делай раздельные роли, не раздавай лишнего, и будет тебе счастье (и спокойный сон). Если хочешь копнуть глубже — вот дока:
https://www.postgresql.org/docs/current/user-manag.html
Вопросы? Ошибки? Пиши в комменты!
Ваш отзыв