21.1. Роли базы данных #
Роли базы данных концептуально полностью отличаются от пользователей операционной системы. На практике поддержание соответствия между ними может быть удобным, но не является обязательным. Роли базы данных являются глобальными для всей установки кластера базы данных (не для отдельной базы данных). Для создания роли используется команда 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 также полезна для получения списка существующих ролей.
Для начальной настройки кластера базы данных система сразу после инициализации всегда содержит одну предопределённую роль с возможностью подключения. Эта роль всегда является суперпользователем («superuser») и по умолчанию имеет такое же имя, как и пользователь операционной системы, инициализирующий кластер баз данных командой initdb
, если при её запуске не указано другое имя. Обычно, но необязательно, эта роль называется postgres
. Для создания других ролей вначале нужно подключиться с этой ролью.
Каждое подключение к серверу базы данных выполняется под именем конкретной роли, и эта роль определяет начальные права доступа для команд, выполняемых в этом соединении. Имя роли для конкретного подключения к базе данных указывается клиентской программой характерным для неё способом, таким образом инициируя запрос на подключение. Например, программа psql
для указания роли использует аргумент командной строки -U
. Многие приложения предполагают, что по умолчанию нужно использовать имя пользователя операционной системы (включая createuser
и psql
). Поэтому часто бывает удобным поддерживать соответствие между именами ролей и именами пользователей операционной системы.
Список доступных для подключения ролей, который могут использовать клиенты, определяется конфигурацией аутентификации, как описывалось в Главе 20. (Поэтому клиент не ограничен только ролью, соответствующей имени пользователя операционной системы, так же как и имя для входа может не соответствовать реальному имени.) Так как с ролью связан набор прав, доступных для клиента, в многопользовательской среде распределять права следует с осторожностью.