20.1. Роли базы данных#

20.1. Роли базы данных

20.1. Роли базы данных #

Роли базы данных концептуально полностью отделены от пользователей операционной системы. Практически может быть удобно поддерживать соответствие, но это не требуется. Роли базы данных являются глобальными для установки кластера баз данных (а не для отдельной базы данных). Для создания роли используйте SQL-команду CREATE ROLE:

CREATE ROLE name;

name следует правилам для идентификаторов SQL: либо без специальных символов, либо в двойных кавычках. (На практике, обычно требуется добавить дополнительные опции, такие как LOGIN, к команде. Подробности приведены ниже). Чтобы удалить существующую роль, используйте аналогичную команду DROP ROLE:

DROP ROLE name;

Для удобства, программы createuser и dropuser предоставляются в качестве оболочек для этих SQL-команд, которые могут быть вызваны из командной строки оболочки:

createuser name
dropuser name

Чтобы определить набор существующих ролей, изучите системный каталог pg_roles, например:

SELECT rolname FROM pg_roles;

или чтобы увидеть только тех, кто может войти в систему:

SELECT rolname FROM pg_roles WHERE rolcanlogin;

Программа psql также полезна для перечисления существующих ролей с помощью метакоманды \du.

Для начальной загрузки системы баз данных, вновь инициализированная система всегда содержит одну предопределенную роль с возможностью входа. Эта роль всегда является суперпользователем, и она будет иметь то же имя, что и пользователь операционной системы, который инициализировал кластер базы данных с помощью initdb, если не указано другое имя. Эта роль часто называется postgres. Для создания дополнительных ролей сначала необходимо подключиться как эта начальная роль.

Каждое подключение к серверу баз данных осуществляется с использованием имени определенной роли, и эта роль определяет начальные привилегии доступа для команд, выполняемых в этом подключении. Имя роли, которое следует использовать для конкретного подключения к базе данных, указывается клиентом, инициирующим запрос на подключение, в специфичном для приложения формате. Например, программа psql использует опцию командной строки -U для указания роли, с которой следует установить соединение. Многие приложения по умолчанию предполагают имя текущего пользователя операционной системы (включая createuser и psql). Поэтому часто удобно поддерживать соответствие между именами ролей и пользователями операционной системы.

Совокупность ролей базы данных, к которым может подключиться данный клиентский соединение, определяется настройками клиентской аутентификации, как объясняется в разделе Глава 19. (Таким образом, клиент не ограничен подключением в качестве роли, соответствующей его операционной системе, так же, как имя пользователя не обязательно должно совпадать с его реальным именем). Поскольку идентификатор роли определяет набор привилегий, доступных подключенному клиенту, важно тщательно настроить привилегии при настройке многопользовательской среды.