CREATE ROLE#

CREATE ROLE

CREATE ROLE

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

Синтаксис

CREATE ROLE name [ [ WITH ] option [ ... ] ]

where option can be:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | BYPASSRLS | NOBYPASSRLS
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

Описание

CREATE ROLE добавляет новую роль в кластер базы данных Tantor BE. Роль - это сущность, которая может владеть объектами базы данных и иметь привилегии доступа к базе данных; роль может рассматриваться как пользователь, группа или и то, и другое, в зависимости от способа использования. См. разделы Глава 20 и Глава 19 для получения информации о управлении пользователями и аутентификации. Для использования этой команды необходимо иметь привилегию CREATEROLE или быть суперпользователем базы данных.

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

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

Параметры

name

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

SUPERUSER
NOSUPERUSER

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

CREATEDB
NOCREATEDB

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

CREATEROLE
NOCREATEROLE

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

INHERIT
NOINHERIT

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

В версиях Tantor BE до 16, наследование было атрибутом уровня роли, который контролировал все проверки членства в этой роли во время выполнения.

LOGIN
NOLOGIN

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

REPLICATION
NOREPLICATION

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

BYPASSRLS
NOBYPASSRLS

Эти предложения определяют, обходит ли роль каждую политику безопасности на уровне строк (RLS). NOBYPASSRLS является значением по умолчанию. Только роли суперпользователей или роли с BYPASSRLS могут указывать BYPASSRLS.

Обратите внимание, что по умолчанию pg_dump устанавливает row_security в значение OFF, чтобы гарантировать полный выгрузку содержимого таблицы. Если пользователь, запускающий pg_dump, не имеет соответствующих разрешений, будет возвращена ошибка. Однако суперпользователи и владелец выгружаемой таблицы всегда обходят RLS.

CONNECTION LIMIT connlimit

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

[ ENCRYPTED ] PASSWORD 'password'
PASSWORD NULL

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

Примечание

Указание пустой строки также установит пароль в значение null, но это не было так до версии 10 PostgreSQL. В более ранних версиях пустая строка могла использоваться или нет в зависимости от метода аутентификации и конкретной версии, и в любом случае libpq отказывалась ее использовать. Чтобы избежать неоднозначности, следует избегать указания пустой строки.

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

VALID UNTIL 'timestamp'

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

IN ROLE role_name

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

IN GROUP role_name

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

ROLE role_name

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

ADMIN role_name

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

USER role_name

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

SYSID uid

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

Примечания

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

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

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

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

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

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

Tantor BE включает программу 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 name [ WITH ADMIN role_name ]

Несколько начальных администраторов и все остальные параметры команды CREATE ROLE являются расширениями Tantor BE.

Стандарт SQL определяет понятия пользователей и ролей, но он рассматривает их как отдельные концепции и оставляет все команды, определяющие пользователей, для спецификации каждой реализации базы данных. В Tantor BE мы решили объединить пользователей и роли в один вид сущности. Поэтому роли имеют гораздо больше необязательных атрибутов, чем в стандарте.

Поведение, указанное стандартом SQL, наиболее точно приближено созданием пользователей SQL-стандарта как Tantor BE ролей с опцией NOINHERIT, а роли SQL-стандарта как роли Tantor BE с опцией INHERIT.