Атрибуты ролей
Эта страница переведена при помощи нейросети 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
rolename
RESET
varname
. Следует учесть, что настройки по умолчанию, относящиеся к ролям без привилегии
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
в этой роли может ее администрировать.