Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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
NOSUPERUSER

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

CREATEDB
NOCREATEDB

Если указано CREATEDB, создаваемой роли будет разрешено создавать новые базы данных. NOCREATEDB (по умолчанию) запрещает роли создавать базы данных

CREATEROLE
NOCREATEROLE

Если указано CREATEROLE, создаваемой роли будет разрешено создавать новые роли, изменять другие роли и удалять другие роли. NOCREATEROLE (по умолчанию) запрещает роли создавать роли или изменять роли, кроме собственной

CREATEUSER
NOCREATEUSER

Эти выражения устарели, но по-прежнему принимаются как варианты написания SUPERUSER и NOSUPERUSER. Обратите внимание, что они не эквивалентны выражениям CREATEROLE и NOCREATEROLE

CREATEEXTTABLE
NOCREATEEXTTABLE

Если указано CREATEEXTTABLE, создаваемой роли разрешено создавать внешние таблицы. Если не указано иначе, по умолчанию type равен readable, а protocol — gpfdist. Допустимые типы: gpfdist, gpfdists и http. NOCREATEEXTTABLE (тип по умолчанию) запрещает роли создавать внешние таблицы. Обратите внимание: внешние таблицы, использующие протоколы file или execute, могут создавать только суперпользователи. Используйте команду GRANT …​ ON PROTOCOL, чтобы разрешить пользователям создавать и использовать внешние таблицы с пользовательским типом протокола, включая протоколы s3 и pxf, поставляемые с Greengage DB

INHERIT
NOINHERIT

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

LOGIN
NOLOGIN

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

REPLICATION
NOREPLICATION

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

CONNECTION LIMIT <connlimit>

Максимальное количество одновременных подключений, которые может установить эта роль. Значение по умолчанию -1 означает отсутствие ограничений

PASSWORD '<password>'

Задает пароль пользователя для ролей с атрибутом LOGIN. Если вы не планируете использовать аутентификацию по паролю, эту опцию можно опустить. Если пароль не указан, пароль будет установлен в null и аутентификация по паролю для этого пользователя всегда будет завершаться неудачей. Null-пароль можно при желании указать явно как PASSWORD NULL. Указание пустой строки также установит пароль в NULL. Чтобы избежать неоднозначности, следует избегать указания пустой строки. Ключевые слова ENCRYPTED и UNENCRYPTED управляют тем, хранится ли пароль в системных каталогах в зашифрованном виде. Если ни одно не указано, поведение по умолчанию определяется параметром конфигурации password_encryption. Если переданная строка пароля уже имеет формат MD5-шифрования или SCRAM-шифрования, она сохраняется зашифрованной как есть независимо от того, указано ENCRYPTED или UNENCRYPTED. Это позволяет повторно загружать зашифрованные пароли при бэкапе и восстановлении. Обратите внимание, что более старые клиенты могут не поддерживать механизм аутентификации SCRAM

VALID UNTIL '<timestamp>'

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

IN ROLE <rolename>

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

ROLE <rolename>

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

ADMIN <rolename>

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

USER <rolename>

Выражение USER — устаревшее написание выражения ROLE

RESOURCE GROUP <group_name>

Имя ресурсной группы, назначаемой новой роли. На роль будут распространяться ограничения по числу параллельных транзакций, памяти и CPU, настроенные для ресурсной группы. Одну ресурсную группу можно назначить одной или нескольким ролям. Если вы не укажете ресурсную группу для новой роли, роль автоматически получит ресурсную группу по умолчанию в соответствии со своими возможностями: admin_group для ролей SUPERUSER и default_group для неадминистративных ролей. Ресурсную группу admin_group можно назначить любой роли с атрибутом SUPERUSER. Ресурсную группу default_group можно назначить любой роли. Нельзя назначить роли ресурсную группу, созданную для внешнего компонента

RESOURCE QUEUE <queue_name>

Имя ресурсной очереди, которой будет назначена новая роль пользовательского уровня. Только роли с привилегией LOGIN могут быть назначены ресурсной очереди. Специальное ключевое слово NONE означает, что роль назначается очереди ресурсов по умолчанию. Роль может принадлежать только одной ресурсной очереди. Роли с атрибутом SUPERUSER не подпадают под ограничения ресурсных очередей. Для роли суперпользователя запросы всегда выполняются немедленно, независимо от ограничений, наложенных назначенной ресурсной очередью

DENY <deny_point>
DENY BETWEEN <deny_point> AND <deny_point>

Ключевые слова DENY и DENY BETWEEN устанавливают временные ограничения, которые применяются при входе в систему. DENY устанавливает день или день и время для запрета доступа. DENY BETWEEN устанавливает интервал, в течение которого доступ запрещен. Оба используют параметр deny_point, который имеет следующий формат:

DAY day [ TIME 'time' ]

Две части параметра deny_point используют следующие форматы. Для дня:

{'Sunday' | 'Monday' | 'Tuesday' |'Wednesday' | 'Thursday' | 'Friday' | 'Saturday' | 0-6 }

Для времени:

{ 00-23 : 00-59 | 01-12 : 00-59 { AM | PM }}

Условие DENY BETWEEN использует два параметра deny_point, которые должны указывать день и время:

DENY BETWEEN <deny_point> AND <deny_point>

Например:

ALTER USER user1 DENY BETWEEN day 'Sunday' time '00:00' AND day 'Monday' time '00:00';

Примечания

Предпочтительный способ добавлять и удалять участников роли (управлять группами) — использовать 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.

См. также