CREATE ROLE

Создание новой роли базы данных (пользователя или группы).

Синтаксис

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

Где option может быть:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | CREATEEXTTABLE | NOCREATEEXTTABLE 
      [ ( attribute='value'[, ...] ) ]
           where attributes and value are:
           type='readable'|'writable'
           protocol='gpfdist'|'http'
    | 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 [, ...]
    | SYSID uid [, ...]
    | RESOURCE QUEUE queue_name
    | RESOURCE GROUP group_name
    | [ DENY deny_point ]
    | [ DENY BETWEEN deny_point AND deny_point]

Описание

Команда CREATE ROLE добавляет новую роль в систему базы данных YMatrix. Роль — это сущность, которая может владеть объектами базы данных и обладать привилегиями базы данных. В зависимости от способа использования роль может рассматриваться как пользователь, группа или и то, и другое одновременно. Для использования этой команды необходимо иметь привилегию CREATEROLE или быть суперпользователем базы данных.

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

Параметры

name

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

SUPERUSER
NOSUPERUSER

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

CREATEDB
NOCREATEDB

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

CREATEROLE
NOCREATEROLE

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

CREATEUSER
NOCREATEUSER

  • Эти параметры устарели, но всё ещё поддерживаются в виде альтернативных написаний SUPERUSER и NOSUPERUSER. Обратите внимание, что они не эквивалентны параметрам CREATEROLE и NOCREATEROLE.

CREATEEXTTABLE
NOCREATEEXTTABLE

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

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, и аутентификация по паролю для этого пользователя всегда будет завершаться неудачей. Пустой пароль можно явно указать как PASSWORD NULL.

ENCRYPTED
UNENCRYPTED

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

VALID UNTIL 'timestamp'

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

IN ROLE rolename

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

ROLE rolename

  • Добавляет указанную роль в качестве члена новой роли, превращая новую роль в группу.

ADMIN rolename

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

RESOURCE GROUP group_name

  • Имя группы ресурсов, которая будет назначена новой роли. Эта роль будет ограничена количеством одновременных транзакций, объемом памяти и лимитами ЦП, заданными группой ресурсов. Группу ресурсов можно назначить одной или нескольким ролям.
    Если группа ресурсов не указана для новой роли, ей автоматически будет назначена группа ресурсов по умолчанию: роли с атрибутом SUPERUSER будет назначена admin_group, а неадминистративным ролям — 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

Примечание

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

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

Атрибут INHERIT управляет наследованием привилегий (прав доступа к объектам базы данных и членству в ролях). Он не распространяется на специальные свойства ролей, устанавливаемые командами CREATE ROLE и ALTER ROLE. Например, даже при установленном INHERIT члены роли с привилегией CREATEDB не получают немедленно возможность создавать базы данных. Эти привилегии/атрибуты никогда не наследуются: SUPERUSER, CREATEDB, CREATEROLE, CREATEEXTTABLE, LOGIN, RESOURCE GROUP и RESOURCE QUEUE. Такие свойства должны быть установлены для каждой роли уровня пользователя отдельно.

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

Будьте осторожны при использовании привилегии CREATEROLE. Для привилегии CREATEROLE не существует понятия наследования. Это означает, что даже если роль не имеет определённых привилегий, но может создавать другие роли, она легко может создать новую роль с привилегиями, отличными от собственных (за исключением создания роли суперпользователя). Например, если роль имеет привилегию CREATEROLE, но не имеет CREATEDB, она может создать новую роль с привилегией CREATEDB. Таким образом, роль с привилегией CREATEROLE считается почти эквивалентной суперпользователю.

Суперпользователи никогда не подчиняются ограничению CONNECTION LIMIT.

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

Примеры

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

CREATE ROLE jonathan LOGIN;

Создание роли, принадлежащей очереди ресурсов:

CREATE ROLE jonathan LOGIN RESOURCE QUEUE poweruser;

Создание ролей с паролями, действительными до конца 2016 года (CREATE USER эквивалентен CREATE ROLE, за исключением того, что подразумевает LOGIN):

CREATE USER joelle WITH PASSWORD 'jw8s0F4' VALID UNTIL '2017-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 определяет понятия пользователей и ролей, но рассматривает их как разные концепции и оставляет все команды, определяющие пользователей, на усмотрение реализации базы данных. В YMatrix Database пользователи и роли объединены в один тип объектов. Поэтому роли имеют больше дополнительных атрибутов, чем предусмотрено стандартом.

CREATE ROLE соответствует стандарту SQL, однако стандарт требует только следующий синтаксис:

CREATE ROLE name [WITH ADMIN rolename]

Расширение YMatrix Database позволяет указывать нескольких начальных администраторов, а также включает все остальные параметры команды CREATE ROLE.

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

Смотрите также

ALTER ROLE , DROP ROLE