CREATE ROLE
Определяет новую роль базы данных (пользователя или группу).
Синтаксис
CREATE ROLE <name> [[WITH] <option> [ ... ]]
где option может иметь следующие значения:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| CREATEUSER | NOCREATEUSER
| CREATEEXTTABLE | NOCREATEEXTTABLE [ ( <attribute>='<value>' [, ...] ) ]
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| CONNECTION LIMIT <connlimit>
| [ ENCRYPTED | UNENCRYPTED ] PASSWORD '<password>'
| VALID UNTIL '<timestamp>'
| IN ROLE <rolename> [, ...]
| ROLE <rolename> [, ...]
| ADMIN <rolename> [, ...]
| USER <rolename> [, ...]
| RESOURCE QUEUE <queue_name>
| RESOURCE GROUP <group_name>
| [ DENY <deny_point> ]
| [ DENY BETWEEN <deny_point> AND <deny_point>]
где значения attribute и value могут быть следующими:
type='readable'|'writable'
protocol='gpfdist'|'gpfdists'|'http'
Описание
Команда CREATE ROLE добавляет новую роль в систему Greengage DB.
Роль — это сущность, которая может владеть объектами базы данных и иметь привилегии в базе данных.
Роль можно рассматривать как пользователя, группу или и то и другое — в зависимости от того, как она используется.
Чтобы использовать эту команду, вы должны иметь привилегию CREATEROLE или быть суперпользователем базы данных.
Обратите внимание: роли определяются на уровне системы и действительны для всех баз данных в системе Greengage DB.
Параметры
| Параметр | Описание |
|---|---|
name |
Имя новой роли |
SUPERUSER |
Если указано |
CREATEDB |
Если указано |
CREATEROLE |
Если указано |
CREATEUSER |
Эти выражения устарели, но по-прежнему принимаются как варианты написания |
CREATEEXTTABLE |
Если указано |
INHERIT |
Если указано, |
LOGIN |
Если указано, |
REPLICATION |
Эти выражения определяют, разрешено ли роли инициировать потоковую репликацию или переводить систему в режим резервного копирования и обратно.
Роль с атрибутом |
CONNECTION LIMIT <connlimit> |
Максимальное количество одновременных подключений, которые может установить эта роль.
Значение по умолчанию |
PASSWORD '<password>' |
Задает пароль пользователя для ролей с атрибутом |
VALID UNTIL '<timestamp>' |
Выражение |
IN ROLE <rolename> |
Добавляет новую роль в качестве члена указанных ролей.
Обратите внимание, что это выражение не позволяет добавить новую роль в качестве администратора; для этого следует использовать отдельную команду |
ROLE <rolename> |
Добавляет указанные роли в качестве членов этой роли, делая новую роль группой |
ADMIN <rolename> |
Выражение |
USER <rolename> |
Выражение |
RESOURCE GROUP <group_name> |
Имя ресурсной группы, назначаемой новой роли.
На роль будут распространяться ограничения по числу параллельных транзакций, памяти и CPU, настроенные для ресурсной группы.
Одну ресурсную группу можно назначить одной или нескольким ролям.
Если вы не укажете ресурсную группу для новой роли, роль автоматически получит ресурсную группу по умолчанию в соответствии со своими возможностями: |
RESOURCE QUEUE <queue_name> |
Имя ресурсной очереди, которой будет назначена новая роль пользовательского уровня.
Только роли с привилегией |
DENY <deny_point> |
Ключевые слова
Две части параметра
Для времени:
Условие
Например:
|
Примечания
Предпочтительный способ добавлять и удалять участников роли (управлять группами) — использовать GRANT и REVOKE.
Выражение VALID UNTIL задает срок действия только для пароля, а не для роли.
Срок действия не проверяется при входе с использованием метода аутентификации, не основанного на пароле.
Атрибут INHERIT управляет наследованием предоставляемых привилегий (прав доступа к объектам базы данных и членства в ролях).
Он не применяется к специальным атрибутам роли, задаваемым командами CREATE ROLE и ALTER ROLE.
Например, членство в роли с привилегией CREATEDB не позволяет создавать базы данных, даже если установлен атрибут INHERIT.
Следующие привилегии и атрибуты никогда не наследуются: SUPERUSER, CREATEDB, CREATEROLE, CREATEEXTTABLE, LOGIN, RESOURCE GROUP и RESOURCE QUEUE.
Атрибуты должны быть установлены для каждой роли пользовательского уровня.
Атрибут INHERIT выбран значением по умолчанию для обратной совместимости.
Однако NOINHERIT ближе соответствует семантике, указанной в стандарте SQL.
Следует проявлять осторожность при использовании привилегии CREATEROLE.
На роли, созданные командой CREATEROLE, не распространяется концепция наследования.
Это означает, что даже если у роли нет некоторой привилегии, но ей разрешено создавать другие роли, она может создать другую роль с привилегиями, отличными от ее собственных (за исключением создания ролей с привилегиями суперпользователя).
Например, если роль имеет привилегию CREATEROLE, но не имеет CREATEDB, она может создать новую роль с привилегией CREATEDB.
Поэтому рассматривайте роли с привилегией CREATEROLE как почти суперпользовательские роли.
Опция CONNECTION LIMIT никогда не применяется к суперпользователям.
Следует проявлять осторожность при указании незашифрованного пароля в этой команде.
Пароль будет передан серверу в открытом виде, а также может быть записан в историю команд клиента или в журнал сервера.
Однако клиентская программа createuser передает пароль в зашифрованном виде.
Кроме того, psql содержит команду \password, которую можно использовать для безопасной смены пароля позже.
Примеры
Создать роль, которой разрешен вход, но не задавать ей пароль:
CREATE ROLE jonathan LOGIN;
Создать роль, принадлежащую ресурсной очереди:
CREATE ROLE jonathan LOGIN RESOURCE QUEUE poweruser;
Создать роль с паролем, действительным до конца 2026 года (CREATE USER — то же самое, что CREATE ROLE, за исключением того, что подразумевает LOGIN):
CREATE USER joelle WITH PASSWORD 'jw8s0F4' VALID UNTIL '2027-01-01';
Создать роль, которая может создавать базы данных и управлять другими ролями:
CREATE ROLE admin WITH CREATEDB CREATEROLE;
Создать роль, которой запрещен вход по воскресеньям:
CREATE ROLE user3 DENY DAY 'Sunday';
Создать роль, которая может создавать читаемые и записываемые внешние таблицы типа gpfdist:
CREATE ROLE jan WITH CREATEEXTTABLE (type = 'readable', protocol = 'gpfdist')
CREATEEXTTABLE (type = 'writable', protocol = 'gpfdist');
Создать роль с назначением ресурсной группы:
CREATE ROLE bill RESOURCE GROUP rg_light;
Совместимость
Стандарт SQL определяет понятия пользователей и ролей, но рассматривает их как разные концепции и оставляет команды, определяющие пользователей, на усмотрение разработчиков конкретной СУБД. В Greengage DB пользователи и роли объединены в один тип объекта. Поэтому роли имеют значительно больше необязательных атрибутов, чем предусмотрено стандартом.
CREATE ROLE входит в стандарт SQL, но стандарт требует только следующий синтаксис:
CREATE ROLE <name> [WITH ADMIN <rolename>]
Разрешение нескольких первоначальных администраторов и все остальные опции CREATE ROLE — это расширения Greengage DB.
Поведение, определенное стандартом SQL, наиболее близко воспроизводится, если пользователям задавать атрибут NOINHERIT, а ролям — атрибут INHERIT.