Роли базы данных концептуально полностью отделены от
пользователей операционной системы. На практике может быть удобно
поддерживать соответствие между ними, но это не обязательно. Роли базы данных
являются глобальными для всей установки кластера базы данных (а не
для каждой отдельной базы данных). Чтобы создать роль, используйте SQL-команду CREATE ROLE:
CREATE ROLE имя;
имя следует правилам для SQL-идентификаторов:
либо обычное имя без специальных символов, либо имя в двойных кавычках.
(На практике вы обычно захотите добавить в команду дополнительные
опции, такие как LOGIN. Подробности приведены
ниже.) Чтобы удалить существующую роль, используйте аналогичную
команду DROP ROLE:
DROP ROLE имя;
Для удобства предоставляются программы createuser и dropuser, которые являются обертками над этими SQL-командами и могут быть вызваны из командной строки оболочки:
createuserимяdropuserимя
Чтобы определить набор существующих ролей, изучите системный каталог pg_roles,
например:
SELECT rolname FROM pg_roles;
или чтобы увидеть только те роли, которые могут входить в систему:
SELECT rolname FROM pg_roles WHERE rolcanlogin;
Метакоманда \du программы psql
также полезна для вывода списка существующих ролей.
Для начальной инициализации (bootstrap) системы базы данных свежеинициализированная
система всегда содержит одну предопределенную роль с правом входа. Эта роль
всегда является «суперпользователем», и она будет иметь
то же имя, что и пользователь операционной системы, который инициализировал
кластер базы данных с помощью initdb, если не указано другое имя.
Часто эту роль называют postgres. Чтобы создать больше ролей,
вы должны сначала подключиться под этой начальной ролью.
Каждое подключение к серверу базы данных выполняется с использованием имени какой-то
конкретной роли, и эта роль определяет начальные привилегии доступа для
команд, выполняемых в этом соединении.
Имя роли, используемое для конкретного подключения к базе данных,
указывается клиентом, инициирующим запрос на соединение, способом, зависящим от приложения. Например,
программа psql использует опцию командной строки -U
для указания роли, под которой нужно подключиться. Многие приложения по умолчанию
используют имя текущего пользователя операционной системы (включая
createuser и psql). Поэтому
часто удобно поддерживать соответствие имен между ролями и пользователями операционной системы.
Набор ролей базы данных, под которыми может подключиться данный клиент, определяется настройками аутентификации клиента, как описано в Глава 3.5. (Таким образом, клиент не ограничен подключением только под ролью, соответствующей его пользователю операционной системы, точно так же, как логин человека не обязан совпадать с его реальным именем.) Поскольку идентификатор роли определяет набор привилегий, доступных подключенному клиенту, важно тщательно настраивать привилегии при организации многопользовательской среды.