Роль базы данных может иметь ряд атрибутов, которые определяют ее привилегии и взаимодействуют с системой аутентификации клиентов.
Только роли с атрибутом LOGIN могут использоваться
в качестве начального имени роли для подключения к базе данных. Роль с
атрибутом LOGIN можно считать тем же самым,
что и «пользователь базы данных». Чтобы создать роль с привилегией входа,
используйте либо:
CREATE ROLEимяLOGIN; CREATE USERимя;
(CREATE USER эквивалентна CREATE ROLE,
за исключением того, что CREATE USER включает LOGIN по
умолчанию, в то время как CREATE ROLE — нет.)
Суперпользователь базы данных обходит все проверки разрешений, кроме права
на вход в систему. Это опасная привилегия, и ее не следует использовать
неосторожно; лучше всего выполнять большую часть работы от имени роли, которая не является
суперпользователем. Чтобы создать нового суперпользователя базы данных, используйте CREATE
ROLE . Вы должны делать
это от имени роли, которая уже является суперпользователем.
имя SUPERUSER
Роли должно быть явно дано разрешение на создание баз данных
(за исключением суперпользователей, так как они обходят все проверки
разрешений). Чтобы создать такую роль, используйте CREATE ROLE
.
имя CREATEDB
Роли должно быть явно дано разрешение на создание новых ролей
(за исключением суперпользователей, так как они обходят все проверки
разрешений). Чтобы создать такую роль, используйте CREATE ROLE
.
Роль с привилегией имя 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.
Роли должно быть явно дано разрешение на инициирование потоковой
репликации (за исключением суперпользователей, так как они обходят все проверки
разрешений). Роль, используемая для потоковой репликации, должна
также иметь разрешение LOGIN. Чтобы создать такую роль, используйте
CREATE ROLE .
имя REPLICATION
LOGIN
Пароль имеет значение только в том случае, если метод аутентификации клиента
требует, чтобы пользователь ввел пароль при подключении
к базе данных. Методы аутентификации password и
md5 используют пароли. Пароли базы данных отделены от
паролей операционной системы. Укажите пароль при создании роли с помощью CREATE ROLE
.
имя PASSWORD 'строка'
Роль по умолчанию наследует привилегии ролей, членом которых она является.
Однако, чтобы создать роль, которая по умолчанию не наследует привилегии, используйте CREATE ROLE . В качестве альтернативы наследование можно переопределить
для отдельных предоставлений прав (grants) с помощью имя
NOINHERITWITH INHERIT TRUE
или WITH INHERIT FALSE.
Роли должно быть явно дано разрешение на обход любой политики безопасности на уровне строк (RLS)
(за исключением суперпользователей, так как они обходят все проверки разрешений).
Чтобы создать такую роль, используйте CREATE ROLE от имени суперпользователя.
имя BYPASSRLS
Лимит подключений может указывать, сколько одновременных соединений может установить роль.
-1 (по умолчанию) означает отсутствие лимита. Укажите лимит подключений при создании роли с помощью
CREATE ROLE .
имя CONNECTION LIMIT 'целое_число'
Атрибуты роли могут быть изменены после создания с помощью
ALTER ROLE.
Подробности см. на страницах справочника по командам CREATE ROLE
и ALTER ROLE.
Роль также может иметь специфичные для роли значения по умолчанию для многих параметров конфигурации среды выполнения, описанных в Глава 3.4. Например, если по какой-то причине вы хотите отключать сканирование по индексу (подсказка: это плохая идея) каждый раз при подключении, вы можете использовать:
ALTER ROLE myname SET enable_indexscan TO off;
Это сохранит настройку (но не применит ее немедленно). В
последующих подключениях этой роли это будет выглядеть так, как если бы
команда SET enable_indexscan TO off была выполнена
непосредственно перед началом сессии.
Вы все еще можете изменить эту настройку во время сессии; она будет только
значением по умолчанию. Чтобы удалить специфичную для роли настройку по умолчанию, используйте
ALTER ROLE .
Обратите внимание, что настройки по умолчанию, прикрепленные к ролям без
привилегии имя_роли RESET имя_переменной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 для роли в любой момент времени,
могут ее администрировать.