Ответ
В 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.