Перейти к основному содержимому

Атрибуты ролей

примечание

Эта страница переведена при помощи нейросети GigaChat.

Роли базы данных обладают различными атрибутами, определяющими их привилегии и взаимоотношения с системой аутентификации клиентов.

Привилегия входа в систему

: Только роли, которые имеют атрибут LOGIN, могут использоваться в качестве первоначального имени роли для подключения к базе данных. Роль с атрибутом LOGIN может рассматриваться как эквивалентная «пользователь базы данных». Чтобы создать роль с привилегией входа в систему, используйте любой из следующих вариантов:

CREATE ROLE name LOGIN;
CREATE USER name;

(CREATE USER аналогичен CREATE ROLE, за исключением того, что CREATE USER включает LOGIN по умолчанию, а CREATE ROLE - нет.)

Статус суперпользователя

: Суперпользователь базы данных пропускает все проверки разрешений, за исключением входа в систему. Эту привилегию следует использовать с осторожностью, так как она открывает широкие возможности. Большую часть операций рекомендуется выполнять под обычными учетными записями. Для создания нового пользователя с правами суперпользователя применяется команда CREATE ROLE name SUPERUSER. Выполнить ее может только существующий суперпользователь.

Создание баз данных

: Роль должна явно получить разрешение на создание баз данных (за исключением суперпользователей, поскольку они обходят все проверки разрешений). Чтобы создать такую роль, используйте CREATE ROLE name CREATEDB.

Создание ролей

: Роль должна явно получить разрешение на создание дополнительных ролей (за исключением суперпользователей, поскольку они обходят все проверки разрешений). Чтобы создать такую роль, используйте CREATE ROLE name CREATEROLE. Роль с привилегией CREATEROLE может изменять и удалять роли, которые были назначены пользователю с правами CREATEROLE и ADMIN OPTION. Такое назначение ролей происходит автоматически, когда пользователь с правом CREATEROLE, не являющийся суперпользователем, создает новую роль. Поэтому по умолчанию пользователь с правом CREATEROLE может изменять и удалять созданные им роли. Это также включает изменения в роли, которые можно внести с помощью команд COMMENT и SECURITY LABEL.

Однако CREATEROLE не предоставляет возможность создавать роли SUPERUSER, и она также не дает никаких полномочий над существующими ролями 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 name REPLICATION LOGIN.

Пароль

: Пароль имеет значение только в том случае, если метод аутентификации клиента требует от пользователя ввода пароля при подключении к базе данных. Методы аутентификации password и md5 используют пароли. Пароли баз данных отделены от системных паролей операционной системы. Укажите пароль при создании роли с помощью CREATE ROLE name PASSWORD 'string'.

Наследование привилегий

: По умолчанию роль получает разрешение наследовать привилегии ролей, членом которых она является. Однако чтобы создать роль без разрешения, используйте CREATE ROLE name NOINHERIT.

Обход политики безопасности уровня строки

: Роль должна явно получить разрешение на обход каждой политики безопасности уровня строки (RLS) (за исключением суперпользователей, поскольку они обходят все проверки разрешений). Чтобы создать такую роль, используйте CREATE ROLE name BYPASSRLS как суперпользователь.

Ограничение количества подключений

: Ограничение подключения может указывать, сколько одновременных подключений может установить роль. -1 (по умолчанию) означает отсутствие ограничений. Укажите ограничение подключения при создании роли с помощью CREATE ROLE name CONNECTION LIMIT 'integer'.

Атрибуты ролей могут быть изменены после создания с помощью ALTER ROLE. См. страницы справки для команд CREATE ROLE и ALTER ROLE для получения подробной информации.

Роль может иметь индивидуальные значения по умолчанию для большинства параметров конфигурации времени выполнения, перечисленных в разделе «Конфигурация сервера». Например, если необходимо отключить индексное сканирование при каждом подключении (замечание: это не рекомендуется), можно воспользоваться следующим запросом:

ALTER ROLE myname SET enable_indexscan TO off;

Новая настройка будет сохранена, но не вступит в силу мгновенно. В будущих подключениях с участием этой роли будет выполнено действие, аналогичное выполнению команды SET enable_indexscan TO off в самом начале сессии. При желании эту настройку можно изменить прямо в ходе сессии; она станет новым значением по умолчанию. Для сброса индивидуальной настройки по умолчанию для роли используйте команду ALTER ROLE rolenameRESETvarname. Следует учесть, что настройки по умолчанию, относящиеся к ролям без привилегии 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 в этой роли может ее администрировать.