20.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
может не только создавать, но и изменять и удалять другие роли, а также выдавать и отзывать членство в ролях. Однако для создания, изменения, удаления ролей суперпользователей и изменения членства в них требуется иметь статус суперпользователя; праваCREATEROLE
в таких случаях недостаточно.- Запуск репликации
Роль должна иметь явное разрешение на запуск потоковой репликации (за исключением суперпользователей, которые пропускают все проверки). Роль, используемая для потоковой репликации, также должна иметь атрибут
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.
Подсказка
Рекомендуется создать роль с правами CREATEDB
и CREATEROLE
, но не суперпользователя, и в последующем использовать её для управления базами данных и ролями. Такой подход позволит избежать опасностей, связанных с использованием полномочий суперпользователя для задач, которые их не требуют.
На уровне ролей можно устанавливать многие конфигурационные параметры времени выполнения, описанные в Главе 18. Например, если по некоторым причинам всякий раз при подключении к базе данных требуется отключить использование индексов (подсказка: плохая идея) можно выполнить:
ALTER ROLE myname SET enable_indexscan TO off;
Установленное значение параметра будет сохранено (но не будет применено сразу). Для последующих подключений с этой ролью это будет выглядеть как выполнение команды SET enable_indexscan TO off
перед началом сеанса. Но это только значение по умолчанию; в течение сеанса этот параметр можно изменить. Для удаления установок на уровне ролей для параметров конфигурации используется ALTER ROLE
. Обратите внимание, что установка параметров конфигурации на уровне роли без права имя_роли
RESET имя_переменной
LOGIN
лишено смысла, т. к. они никогда не будут применены.