21.2. Атрибуты роли#
21.2. Атрибуты роли
Роль базы данных может иметь несколько атрибутов, которые определяют ее привилегии и взаимодействуют с системой аутентификации клиента.
- login privilege
Только роли, у которых есть атрибут
LOGIN, могут быть использованы в качестве начального имени роли для подключения к базе данных. Роль с атрибутомLOGINможно считать тем же самым, что и “пользователь базы данных”. Чтобы создать роль с привилегией на вход, используйте один из следующих способов:CREATE ROLE
nameLOGIN; CREATE USERname;(
CREATE USERэквивалентноCREATE ROLE, за исключением того, чтоCREATE USERпо умолчанию включаетLOGIN, в то время какCREATE ROLE- нет).- superuser status
Суперпользователь базы данных обходит все проверки разрешений, за исключением права на вход в систему. Это опасное привилегированное положение и не следует использовать его небрежно; лучше выполнять большую часть работы от имени роли, которая не является суперпользователем. Чтобы создать нового суперпользователя базы данных, используйте
CREATE ROLE. Вы должны выполнить это в роли, которая уже является суперпользователем.nameSUPERUSER- database creation
Роли должны явно быть предоставлены разрешения на создание баз данных (за исключением суперпользователей, так как они обходят все проверки разрешений). Чтобы создать такую
- role creation
Чтобы роль могла создавать другие роли, ей явно должны быть предоставлены соответствующие разрешения (за исключением суперпользователей, так как они обходят все проверки разрешений). Для создания такой роли используйте
CREATE ROLE. Роль с привилегиейnameCREATEROLECREATEROLEтакже может изменять и удалять другие роли, а также назначать или отзывать их членство. Изменение роли включает в себя большинство изменений, которые можно сделать с помощьюALTER ROLE, включая, например, изменение паролей. Это также включает изменения роли, которые можно сделать с помощью команд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.Поскольку привилегия
CREATEROLEпозволяет пользователю назначать или отзывать членство даже в ролях, к которым у него (пока что) нет доступа, пользователь с привилегиейCREATEROLEможет получить доступ к возможностям каждой предопределенной роли в системе, включая высокопривилегированные роли, такие какpg_execute_server_programиpg_write_server_files.- initiating replication
Роли должны явно быть предоставлены разрешения на инициирование потоковой репликации (за исключением суперпользователей, так как они обходят все проверки разрешений). Роль, используемая для потоковой репликации, должна также иметь разрешение
LOGIN. Чтобы создать такую роль, используйтеCREATE ROLE.nameREPLICATION LOGIN- password
Важность пароля возникает только в том случае, если метод аутентификации клиента требует от пользователя предоставить пароль при подключении к базе данных. Методы аутентификации
passwordиmd5используют пароли. Пароли базы данных отличаются от паролей операционной системы. Укажите пароль при создании роли с помощьюCREATE ROLE.namePASSWORD 'string'- inheritance of privileges
В роли по умолчанию разрешено наследовать привилегии ролей, к которым она принадлежит. Однако, чтобы создать роль без этого разрешения, используйте
CREATE ROLE.nameNOINHERIT- bypassing row-level security
Роль должна явно получить разрешение на обход каждой политики защиты на уровне строк (RLS) (за исключением суперпользователей, так как они обходят все проверки разрешений). Для создания такой роли используйте
CREATE ROLEв качестве суперпользователя.nameBYPASSRLS- connection limit
Ограничение на количество соединений может указывать, сколько одновременных соединений может установить роль. -1 (по умолчанию) означает отсутствие ограничения. Укажите ограничение на соединение при создании роли с помощью
CREATE ROLE.nameCONNECTION LIMIT 'integer'
Атрибуты роли могут быть изменены после создания с помощью команды ALTER ROLE.
См. страницы справки для команд CREATE ROLE и ALTER ROLE для получения подробной информации.
Роль также может иметь специфичные для роли значения по умолчанию для многих настроек времени выполнения, описанных в Глава 19. Например, если по какой-то причине нужно отключить сканирование индексов (подсказка: не очень хорошая идея) каждый раз при подключении, вы можете использовать:
ALTER ROLE myname SET enable_indexscan TO off;
Это сохранит настройку (но не применит ее немедленно). В последующих подключениях этой роли будет казаться, что была выполнена команда SET enable_indexscan TO off прямо перед началом сессии.
Вы все равно можете изменить эту настройку во время сессии; она будет только по умолчанию. Чтобы удалить ролевую настройку по умолчанию, используйте команду ALTER ROLE .
Обратите внимание, что ролевые настройки по умолчанию, привязанные к ролям без привилегии rolename RESET varnameLOGIN, довольно бесполезны, так как они никогда не будут вызваны.