20.2. Атрибуты роли#
20.2. Атрибуты роли #
Роль базы данных может иметь несколько атрибутов, которые определяют ее привилегии и взаимодействуют с системой аутентификации клиента.
- login privilege
Только роли, у которых есть атрибут
LOGIN
, могут быть использованы в качестве начального имени роли для подключения к базе данных. Роль с атрибутомLOGIN
можно считать тем же самым, что и “пользователь базы данных”. Чтобы создать роль с привилегией на вход, используйте один из следующих способов:CREATE ROLE
name
LOGIN; CREATE USERname
;(
CREATE USER
эквивалентноCREATE ROLE
, за исключением того, чтоCREATE USER
по умолчанию включаетLOGIN
, в то время какCREATE ROLE
- нет).- superuser status
Суперпользователь базы данных обходит все проверки разрешений, за исключением права на вход в систему. Это опасное привилегированное положение и не следует использовать его небрежно; лучше выполнять большую часть работы от имени роли, которая не является суперпользователем. Чтобы создать нового суперпользователя базы данных, используйте
CREATE ROLE
. Вы должны выполнить это в роли, которая уже является суперпользователем.name
SUPERUSER- database creation
Роли должны явно быть предоставлены разрешения на создание баз данных (за исключением суперпользователей, так как они обходят все проверки разрешений). Чтобы создать такую
- role creation
Роли должны быть явно предоставлены разрешения на создание других ролей (за исключением суперпользователей, так как они обходят все проверки разрешений). Чтобы создать такую роль, используйте
CREATE ROLE
. Роль с привилегиейname
CREATEROLECREATEROLE
может изменять и удалять роли, которые были предоставлены пользователюCREATEROLE
с опциейADMIN
. Такое предоставление происходит автоматически, когда пользовательCREATEROLE
, который не является суперпользователем, создает новую роль, так что по умолчанию пользовательCREATEROLE
может изменять и удалять роли, которые он создал. Изменение роли включает большинство изменений, которые можно сделать с помощью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
.- initiating replication
Роли должны явно быть предоставлены разрешения на инициирование потоковой репликации (за исключением суперпользователей, так как они обходят все проверки разрешений). Роль, используемая для потоковой репликации, должна также иметь разрешение
LOGIN
. Чтобы создать такую роль, используйтеCREATE ROLE
.name
REPLICATION LOGIN- password
Важность пароля возникает только в том случае, если метод аутентификации клиента требует от пользователя предоставить пароль при подключении к базе данных. Методы аутентификации
password
иmd5
используют пароли. Пароли базы данных отличаются от паролей операционной системы. Укажите пароль при создании роли с помощьюCREATE ROLE
.name
PASSWORD 'string
'- inheritance of privileges
Роль наследует привилегии ролей, членом которых она является, по умолчанию. Однако, чтобы создать роль, которая не наследует привилегии по умолчанию, используйте
CREATE ROLE
. Кроме того, наследование может быть переопределено для отдельных грантов, используяname
NOINHERITWITH INHERIT TRUE
илиWITH INHERIT FALSE
.- bypassing row-level security
Роль должна явно получить разрешение на обход каждой политики защиты на уровне строк (RLS) (за исключением суперпользователей, так как они обходят все проверки разрешений). Для создания такой роли используйте
CREATE ROLE
в качестве суперпользователя.name
BYPASSRLS- connection limit
Ограничение на количество соединений может указывать, сколько одновременных соединений может установить роль. -1 (по умолчанию) означает отсутствие ограничения. Укажите ограничение на соединение при создании роли с помощью
CREATE ROLE
.name
CONNECTION LIMIT 'integer
'
Атрибуты роли могут быть изменены после создания с помощью команды ALTER ROLE
.
См. страницы справки для команд CREATE ROLE и ALTER ROLE для получения подробной информации.
Роль также может иметь специфичные для роли значения по умолчанию для многих настроек времени выполнения, описанных в Глава 18. Например, если по какой-то причине нужно отключить сканирование индексов (подсказка: не очень хорошая идея) каждый раз при подключении, вы можете использовать:
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
на роль в любой момент времени, могут управлять ею.