Что происходит при создании пользователя (ROLE) в PostgreSQL?

«Что происходит при создании пользователя (ROLE) в PostgreSQL?» — вопрос из категории Базы данных, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PostgreSQL CREATE ROLE (или CREATE USER, который является синонимом для CREATE ROLE ... WITH LOGIN) выполняет несколько внутренних операций:

1. Запись в системные каталоги:

  • Основная запись создается в таблице pg_authid, которая хранит аутентификационные данные ролей (OID, имя, хеш пароля, атрибуты).
  • Пароль (если указан) хешируется с использованием выбранного метода, например scram-sha-256.

2. Установка атрибутов роли: Команда устанавливает флаги (атрибуты) для новой записи в pg_authid, такие как:

  • rolcanlogin — может ли роль подключаться к БД.
  • rolsuper — является ли роль суперпользователем.
  • rolcreatedb — может ли роль создавать БД.
  • rolvaliduntil — срок действия пароля.

3. Наследование привилегий: Новая роль автоматически становится членом роли PUBLIC, что дает ей базовые привилегии (например, право на подключение к базе данных и использование схемы public).

Пример и его внутренний эффект:

CREATE ROLE app_user WITH LOGIN PASSWORD 'secret' VALID UNTIL '2025-01-01';

Эта команда создаст запись в pg_authid с rolcanlogin = true, rolpassword (содержащей хеш), rolvaliduntil и уникальным OID. Для управления доступом к конкретным объектам позже потребуются отдельные команды GRANT.