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. Роль с правом- имяCREATEROLE- CREATEROLEможет изменять и удалять роли, которые были назначены пользователю с правами- CREATEROLEи- ADMIN OPTION. Такое назначение ролей происходит автоматически, когда пользователь с правом- CREATEROLE, не являющийся суперпользователем, создаёт новую роль. Поэтому по умолчанию пользователь с правом- CREATEROLEможет изменять и удалять созданные им роли. Изменение роли включает большинство действий команды- 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.
- Запуск репликации
- Роль должна иметь явное разрешение на запуск потоковой репликации (за исключением суперпользователей, которые пропускают все проверки). Роль, используемая для потоковой репликации, также должна иметь атрибут - LOGIN. Для создания такой роли используется- CREATE ROLE.- имяREPLICATION LOGIN
- Пароль
- Пароль имеет значение, если метод аутентификации клиентов требует, чтобы пользователи предоставляли пароль при подключении к базе данных. Методы аутентификации - passwordи- md5используют пароли. База данных и операционная система используют раздельные пароли. Пароль указывается при создании роли:- CREATE ROLE.- имяPASSWORD '- строка'
- Наследование прав
- По умолчанию роль наследует права ролей, членом которых она является. Однако можно создать роль, которая не будет наследовать права по умолчанию. Для этого выполните - CREATE ROLE. Как вариант, атрибуты наследования отдельных прав можно переопределить, указав- имяNOINHERIT- WITH INHERIT TRUEили- WITH INHERIT FALSE.
- Игнорирование защиты на уровне строк
- Разрешение обходить все политики защиты на уровне строк (RLS) нужно давать роли явно. Создать роль с таким разрешением можно, выполнив - CREATE ROLEот имени суперпользователя.- имяBYPASSRLS
- Ограничение соединений
- Для роли можно ограничить число одновременных соединений. -1 (по умолчанию) означает отсутствие ограничения. Для создания роли с ограничением используется - CREATE ROLE.- nameCONNECTION 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 лишено смысла, т. к. они никогда не будут применены.
Когда не суперпользователь с правом CREATEROLE создаёт роль, создающая роль автоматически получает членство в создаваемой, как если бы начальный суперпользователь выполнил команду GRANT created_user TO creating_user WITH ADMIN TRUE, SET FALSE, INHERIT FALSE. Поскольку пользователь с правом CREATEROLE может пользоваться специальными правами в отношении существующей роли только при наличии атрибута ADMIN OPTION, такого права вполне достаточно для того, чтобы пользователь с правом CREATEROLE мог администрировать созданную им роль. Тем не менее, поскольку роль создаётся с атрибутами INHERIT FALSE, SET FALSE, пользователь с правом CREATEROLE не будет наследовать права созданной роли и не сможет переключиться на неё с помощью команды SET ROLE. Однако поскольку любой пользователь с правом ADMIN OPTION для роли может разрешать членство в этой роли любым пользователям, пользователь с правом CREATEROLE может стать членом созданной им роли, просто назначив эту роль на себя при помощи INHERIT и/или SET. Поэтому факт того, что права не наследуются по умолчанию и что право не назначается по умолчанию командой SET ROLE, — это способ оградиться от случайных ошибок, а не средство защиты. Кроме того, обратите внимание, что это право автоматически выдаётся от имени начального суперпользователя, поэтому пользователь с правом CREATEROLE не сможет удалить или изменить его. Тем не менее любой суперпользователь может отозвать, модифицировать и/или выдать дополнительно такие права другим пользователям с правом CREATEROLE. Любой пользователь с правами CREATEROLE и ADMIN OPTION в этой роли может её администрировать.