PostgreSQL: создание пользователя и управление правами

Привет, коллеги! Сегодня разберёмся с одной из самых частых задач при работе с 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

Вопросы? Ошибки? Пиши в комменты!

Хотите прочитать больше про Разное?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *