21.2. Атрибуты ролей
Роль базы данных может иметь атрибуты, определяющие её полномочия и взаимодействие с системой аутентификации клиентов.
- Право подключения
Только роли с атрибутом
LOGIN
могут использоваться для начального подключения к базе данных. Роль с атрибутомLOGIN
можно рассматривать как пользователя базы данных. Для создания такой роли можно использовать любой из вариантов:CREATE ROLE
имя
LOGIN; CREATE USERимя
;(Команда
CREATE USER
эквивалентнаCREATE ROLE
за исключением того, чтоCREATE USER
по умолчанию включает атрибутLOGIN
, в то время какCREATE ROLE
— нет.)- Статус суперпользователя
Суперпользователь базы данных обходит все проверки прав доступа, за исключением права на вход в систему. Это опасная привилегия и она не должна использоваться небрежно. Лучше всего выполнять большую часть работы не как суперпользователь. Для создания нового суперпользователя используется
CREATE ROLE
. Это нужно выполнить из под роли, которая также является суперпользователем.имя
SUPERUSER- Создание базы данных
Роль должна явно иметь разрешение на создание базы данных (за исключением суперпользователей, которые пропускают все проверки). Для создания такой роли используется
CREATE ROLE
.имя
CREATEDB- Создание роли
Роль должна явно иметь разрешение на создание других ролей (за исключением суперпользователей, которые пропускают все проверки). Для создания такой роли используется
CREATE ROLE
. Роль с правомимя
CREATEROLECREATEROLE
может не только создавать, но и изменять и удалять другие роли, а также выдавать и отзывать членство в ролях. Изменение роли включает большинство действий командыALTER ROLE
, например смену пароля, а также действия командCOMMENT
иSECURITY LABEL
в отношении ролей.Однако, имея право
CREATEROLE
, нельзя ни создавать, ни каким-либо образом влиять на ролиSUPERUSER
. Кроме того, с правомCREATEROLE
нельзя ни создавать пользователейREPLICATION
, ни предоставлять или отзывать правоREPLICATION
, ни изменять свойства ролей таких пользователей. Тем не менее, это право позволяет использовать командыALTER ROLE ... SET
иALTER ROLE ... RENAME
в отношении ролейREPLICATION
, а такжеCOMMENT ON ROLE
,SECURITY LABEL ON ROLE
иDROP ROLE
. Наконец, правоCREATEROLE
не даёт возможности предоставлять или отзывать правоBYPASSRLS
.Поскольку право
CREATEROLE
даёт пользователю возможность предоставлять или отзывать членство даже в тех ролях, к которым у него (пока) нет доступа, пользователь с правомCREATEROLE
может получить доступ к возможностям каждой заданной роли в системе, включая роли, имеющие множество прав, такие какpg_execute_server_program
иpg_write_server_files
.- Запуск репликации
Роль должна иметь явное разрешение на запуск потоковой репликации (за исключением суперпользователей, которые пропускают все проверки). Роль, используемая для потоковой репликации, также должна иметь атрибут
LOGIN
. Для создания такой роли используетсяCREATE ROLE
.имя
REPLICATION LOGIN- Пароль
Пароль имеет значение, если метод аутентификации клиентов требует, чтобы пользователи предоставляли пароль при подключении к базе данных. Методы аутентификации
password
иmd5
используют пароли. База данных и операционная система используют раздельные пароли. Пароль указывается при создании роли:CREATE ROLE
.имя
PASSWORD 'строка
'- Наследование прав
По умолчанию роль получает разрешение наследовать права той роли, членом которой она является. Однако можно создать роль и без такого разрешения, выполнив
CREATE ROLE
.имя
NOINHERIT- Игнорирование защиты на уровне строк
Разрешение обходить все политики защиты на уровне строк (RLS) нужно давать роли явно. Создать роль с таким разрешением можно, выполнив
CREATE ROLE
от имени суперпользователя.имя
BYPASSRLS- Ограничение соединений
Для роли можно ограничить число одновременных соединений. -1 (по умолчанию) означает отсутствие ограничения. Для создания роли с ограничением используется
CREATE ROLE
.name
CONNECTION LIMIT 'число
'
Атрибуты ролей могут быть изменены после создания командой ALTER ROLE
. Более детальная информация в справке по командам CREATE ROLE и ALTER ROLE.
На уровне ролей можно устанавливать многие конфигурационные параметры времени выполнения, описанные в Главе 19. Например, если по некоторым причинам всякий раз при подключении к базе данных требуется отключить использование индексов (подсказка: плохая идея), можно выполнить:
ALTER ROLE myname SET enable_indexscan TO off;
Установленное значение параметра будет сохранено (но не будет применено сразу). Для последующих подключений с этой ролью это будет выглядеть как выполнение команды SET enable_indexscan TO off
перед началом сеанса. Но это только значение по умолчанию; в течение сеанса этот параметр можно изменить. Для удаления установок на уровне ролей для параметров конфигурации используется ALTER ROLE
. Обратите внимание, что установка параметров конфигурации на уровне роли без права имя_роли
RESET имя_переменной
LOGIN
лишено смысла, т. к. они никогда не будут применены.