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

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

21.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;

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

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

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

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