CREATE ROLE

CREATE ROLE — определить новую роль в базе данных


Синтаксис

CREATE ROLE имя [ [ WITH ] параметр [ ... ] ]

где параметром может быть:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT предел_подключений
    | [ ENCRYPTED ] PASSWORD 'пароль' | PASSWORD NULL
    | VALID UNTIL 'временная_метка'
    | IN ROLE имя_роли [, ...]
    | IN GROUP имя_роли [, ...]
    | ROLE имя_роли [, ...]
    | ADMIN имя_роли [, ...]
    | USER имя_роли [, ...]
    | SYSID uid
    | PROFILE имя_профиля

Описание

Команда CREATE ROLE добавляет новую роль в кластер баз данных QHB. Роль — это сущность, которая может владеть объектами базы данных и иметь некоторые права в базе данных; роль может рассматриваться как «пользователь», «группа» или и то, и другое, в зависимости от того, как она используется. Информацию об управлении пользователями и аутентификации см. в главах Роли в базе данных и Аутентификация клиентского приложения. Чтобы выполнить эту команду, нужно быть суперпользователем базы данных или иметь право CREATEROLE.

Обратите внимание, что роли определяются на уровне кластера баз данных и поэтому действительны во всех базах данных в кластере.

Во время создания роли можно сразу назначить создаваемую роль членом существующей роли, а также назначить существующие роли членами создаваемой роли. Правила, по которым включаются начальные параметры членства в роли описываются ниже в предложениях IN ROLE, ROLE и ADMIN. Команда GRANT позволяет более точно управлять параметрами во время назначения членства и дает возможность изменять эти параметры после создания новой роли.


Параметры

имя

Имя новой роли.

SUPERUSER
NOSUPERUSER

Эти предложения определяют, является ли новая роль «суперпользователем», который может переопределить все ограничения доступа в базе данных. Статус суперпользователя опасен и должен использоваться только тогда, когда это действительно необходимо. Чтобы создать нового суперпользователя нужно самому быть суперпользователем. Если ничего не указано, по умолчанию установлен атрибут NOSUPERUSER.

CREATEDB
NOCREATEDB

Эти предложения определяют способность роли создавать базы данных. Если указывается CREATEDB, то определяемой роли будет разрешено создавать новые базы данных. Указание NOCREATEDB лишит роль возможности создавать базы данных. Если ничего не указано, по умолчанию установлен атрибут NOCREATEDB. Только роли- суперпользователи или роли с правом CREATEDB могут указывать CREATEDB.

CREATEROLE
NOCREATEROLE

Эти предложения определяют, будет ли роли разрешено создавать, изменять и удалять другие роли, комментировать их и изменять их метку безопасности. Более подробную информацию о том, какие возможности предоставляются с этим правом, см. в описании атрибута Создание ролей. Если ничего не указано, по умолчанию установлен атрибут NOCREATEROLE.

INHERIT
NOINHERIT

Эти предложения влияют на статус наследования членства, когда эта роль добавляется в качестве члена другой роли, как в этой, так и в будущих командах. В частности, они управляют статусом наследования членства, добавленного этой командой с помощью предложения IN ROLE, и в более поздних командах с помощью предложения ROLE. Также они используются в качестве статуса наследования по умолчанию при добавлении этой роли в качестве члена с помощью команды GRANT. Если ничего не указано, по умолчанию установлен атрибут INHERIT.
В версиях QHB до 1.5.3 наследование было атрибутом уровня роли, управлявшим всеми проверками членства для этой роли.

LOGIN
NOLOGIN

Эти предложения определяют, разрешен ли роли вход на сервер; то есть может ли роль быть задана в качестве начального авторизованного имени сеанса при подключении клиента. Роль с атрибутом LOGIN может рассматриваться как пользователь. Роли без этого атрибута полезны для управления правами доступа к базе данных, но не являются пользователями в обычном смысле этого слова. Если ничего не указано, по умолчанию установлен атрибут NOLOGIN, за исключением случаев, когда CREATE ROLE вызывается через альтернативное написание CREATE USER.

REPLICATION
NOREPLICATION

Эти предложения определяют, является ли роль ролью репликации. Роль должна иметь этот атрибут (или быть суперпользователем), чтобы иметь возможность подключаться к серверу в режиме репликации (физической или логической), а также создавать или удалять слоты репликации. Роль с атрибутом REPLICATION обладает очень большими правами и должна использоваться только в ролях, действительно используемых для репликации. Если ничего не указано, по умолчанию установлен атрибут NOREPLICATION. Только роли-суперпользователи и роли с правом REPLICATION могут указывать REPLICATION.

BYPASSRLS
NOBYPASSRLS

Эти предложения определяют, будут ли для роли игнорироваться все политики защиты на уровне строк (row-level security, RLS). По умолчанию установлен атрибут NOBYPASSRLS. Только роли-суперпользователи и роли с правом BYPASSRLS могут указывать BYPASSRLS.
Обратите внимание, что qhb_dump по умолчанию установит для row_security значение OFF для гарантии, что все содержимое таблицы выгружается. Если пользователь, выполняющий qhb_dump, не имеет соответствующих прав, будет возвращена ошибка. Однако суперпользователи и владелец выгружаемой таблицы всегда обходят RLS.

CONNECTION LIMIT предел_подключений

Если роли разрешен вход, этот параметр указывает, сколько одновременных подключений она может выполнить. Значение -1 (по умолчанию) означает отсутствие ограничений. Обратите внимание, что под это ограничение подпадают только обычные подключения. Ни подготовленные транзакции, ни подключения фоновых рабочих процессов не учитываются.

[ ENCRYPTED ] PASSWORD 'пароль'
PASSWORD NULL

Задает пароль роли. (Пароль используется только для ролей с атрибутом LOGIN, но тем не менее его можно определить и для ролей без этого атрибута.) Если вы не планируете использовать аутентификацию по паролю, можете опустить этот параметр. Если пароль не указан, он будет установлен в значение NULL, и аутентификация по паролю для этого пользователя всегда будет завершаться ошибкой. При желании пароль NULL можно установить явно, указав PASSWORD NULL.

Примечание
При указании пустой строки пароль также будет иметь значение NULL. Чтобы избежать двусмысленности, следует избегать указания пустой строки.

Пароль всегда хранится зашифрованным в системных каталогах. Ключевое слово ENCRYPTED не имеет эффекта, но принимается для обратной совместимости. Способ шифрования определяется параметром конфигурации password_encryption. Если представленная строка пароля уже зашифрована в формате MD5 или SCRAM, она сохраняется как есть независимо от значения password_encryption (поскольку система не может расшифровать указанную зашифрованную строку пароля, чтобы зашифровать ее в другом формате). Это позволяет перезагружать зашифрованные пароли во время выгрузки/восстановления.

VALID UNTIL 'временная_метка'

Предложение VALID UNTIL устанавливает дату и время, после которых пароль роли становится недействительным. Если это предложение опущено, пароль будет действителен в течение всего времени.

IN ROLE имя_роли

Предложение IN ROLE позволяет автоматически добавить новую роль в качестве члена указанных существующих ролей. У нового члена будет включен параметр SET и выключен параметр ADMIN. Параметр INHERIT будет включен, если не указан параметр NOINHERIT.

IN GROUP имя_роли

IN GROUP — это устаревшее написание предложения IN ROLE.

ROLE имя_роли

Предложение ROLE позволяет автоматически добавить одну или несколько указанных существующих ролей в качестве членов новой роли с включенным параметром SET. По сути, это делает новую роль «группой». У ролей, указанных в этом предложении с атрибутом INHERIT уровня роли, в новом членстве будет включен параметр INHERIT. У новых членов будет выключен параметр ADMIN.

ADMIN имя_роли

Предложение ADMIN действует так же, как ROLE, но указанные роли добавляются в качестве членов новой роли с включенным атрибутом ADMIN, что дает им право предоставлять членство в новой роли другим ролям.

USER имя_роли

Предложение USER является устаревшим написанием предложения ROLE.

SYSID uid

Предложение SYSID игнорируется, но принимается для обратной совместимости.

PROFILE имя_профиля

Предложение PROFILE позволяет задать профиль безопасности, назначенный данному пользователю.


Примечания

Используйте команду ALTER ROLE, чтобы изменить атрибуты роли, и DROP ROLE, чтобы ее удалить. Все атрибуты, указанные в CREATE ROLE, могут быть позднее изменены командами ALTER ROLE.

Предпочтительным способом добавления и удаления членов ролей, используемых в качестве групп, является использование команд GRANT и REVOKE.

Предложение VALID UNTIL определяет срок действия только для пароля, а не для роли как таковой. В частности, при входе в систему с помощью метода аутентификации без пароля ограничение срока действия пароля не действует.

Определенные здесь атрибуты роли не являются наследуемыми, т. е. членство в роли, например, с правом CREATEDB не позволит участнику создавать новые базы данных, даже если членство предоставлено с параметром INHERIT. Разумеется, если членство предоставлено с параметром SET, роль-участник сможет выполнить команду SET ROLE для роли createdb, а затем создать новую базу данных.

При предоставлении членства с помощью предложений IN ROLE, ROLE и ADMIN праводателем является роль, выполняющая эту команду.

Атрибут INHERIT устанавливается по умолчанию в целях обратной совместимости: в предыдущих выпусках QHB пользователи всегда имели доступ ко всем правам групп, членами которых являлись. Однако NOINHERIT семантически больше похоже на то, что описано в стандарте SQL.

QHB включает в себя программу createuser, которая имеет ту же функциональность, что и команда CREATE ROLE (на самом деле она вызывает эту команду), но может запускаться в командной оболочке.

Ограничение CONNECTION LIMIT действует только приблизительно; если одновременно запускаются два сеанса, в то время как для этой роли остается только один «слот» подключения, может случиться так, что будут отклонены оба подключения. Кроме того, это ограничение никогда не распространяется на суперпользователей.

При указании с помощью этой команды незашифрованного пароля следует соблюдать осторожность. Пароль будет передан на сервер открытым текстом, и он также может быть зарегистрирован в истории команд клиента или в журнале сервера. Однако команда createuser передает пароль в зашифрованном виде. Кроме того, psql содержит команду \password, которую можно использовать для последующего безопасного изменения пароля.


Примеры

Создание роли, для которой разрешен вход, но не задан пароль:

CREATE ROLE jonathan LOGIN;

Создание роли с паролем:

CREATE USER davide WITH PASSWORD 'jw8s0F4';

(CREATE USER действует так же, как CREATE ROLE, но подразумевает еще и атрибут LOGIN.)

Создание роли с паролем, действующим до конца 2004 г., то есть пароль перестает действовать в первую же секунду 2005 г.

CREATE ROLE miriam WITH LOGIN PASSWORD 'jw8s0F4' VALID UNTIL '2005-01-01';

Создание роли, которая может создавать базы данных и управлять ролями:

CREATE ROLE admin WITH CREATEDB CREATEROLE;

Совместимость

Команда CREATE ROLE описана в стандарте SQL, но стандарт требует поддержки только следующего синтаксиса:

CREATE ROLE имя [ WITH ADMIN имя_роли ]

Возможность создавать множество начальных администраторов и все остальные параметры CREATE ROLE относятся к расширениям QHB.

Стандарт SQL определяет концепции пользователей и ролей, но рассматривает их как отдельные понятия и оставляет на усмотрение каждой реализации СУБД самостоятельно указывать все команды, определяющие пользователей. В QHB пользователи и роли объединены в единую сущность. Таким образом, роли имеют гораздо больше дополнительных атрибутов, чем в стандарте.

Поведение, заданное стандартом SQL, с наибольшей достоверностью можно получить, если создавать пользователей по стандарту SQL как роли QHB с параметром NOINHERIT, а роли по стандарту SQL как роли QHB с параметром INHERIT.


См. также

SET ROLE, ALTER ROLE, DROP ROLE, GRANT, REVOKE, createuser, createrole_self_grant