Атрибуты ролей#
Примечание
Эта страница переведена при помощи нейросети GigaChat.
Роли базы данных обладают различными атрибутами, определяющими их привилегии и взаимоотношения с системой аутентификации клиентов.
- Привилегия входа в систему
Только роли, которые имеют атрибут
LOGIN, могут использоваться в качестве первоначального имени роли для подключения к базе данных. Роль с атрибутомLOGINможет рассматриваться как эквивалентная «пользователь базы данных». Чтобы создать роль с привилегией входа в систему, используйте любой из следующих вариантов:CREATE ROLE name LOGIN; CREATE USER name;(
CREATE USERаналогиченCREATE ROLE, за исключением того, чтоCREATE USERвключаетLOGINпо умолчанию, аCREATE ROLE- нет.)- Статус суперпользователя
Суперпользователь базы данных пропускает все проверки разрешений, за исключением входа в систему. Эту привилегию следует использовать с осторожностью, так как она открывает широкие возможности. Большую часть операций рекомендуется выполнять под обычными учетными записями. Для создания нового пользователя с правами суперпользователя применяется команда
CREATE ROLEnameSUPERUSER. Выполнить ее может только существующий суперпользователь.- Создание баз данных
Роль должна явно получить разрешение на создание баз данных (за исключением суперпользователей, поскольку они обходят все проверки разрешений). Чтобы создать такую роль, используйте
CREATE ROLEnameCREATEDB.- Создание ролей
Роль должна явно получить разрешение на создание дополнительных ролей (за исключением суперпользователей, поскольку они обходят все проверки разрешений). Чтобы создать такую роль, используйте
CREATE ROLEnameCREATEROLE. Роль с привилегией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 ROLEnameREPLICATION LOGIN.- Пароль
Пароль имеет значение только в том случае, если метод аутентификации клиента требует от пользователя ввода пароля при подключении к базе данных. Методы аутентификации
passwordиmd5используют пароли. Пароли баз данных отделены от системных паролей операционной системы. Укажите пароль при создании роли с помощьюCREATE ROLEnamePASSWORD 'string'.- Наследование привилегий
По умолчанию роль получает разрешение наследовать привилегии ролей, членом которых она является. Однако чтобы создать роль без разрешения, используйте
CREATE ROLEnameNOINHERIT.- Обход политики безопасности уровня строки
Роль должна явно получить разрешение на обход каждой политики безопасности уровня строки (RLS) (за исключением суперпользователей, поскольку они обходят все проверки разрешений). Чтобы создать такую роль, используйте
CREATE ROLEnameBYPASSRLSкак суперпользователь.- Ограничение количества подключений
Ограничение подключения может указывать, сколько одновременных подключений может установить роль. -1 (по умолчанию) означает отсутствие ограничений. Укажите ограничение подключения при создании роли с помощью
CREATE ROLEnameCONNECTION 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 в этой роли может ее администрировать.