Создание новой роли базы данных (пользователя или группы).
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
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
CREATEUSER
NOCREATEUSER
CREATEEXTTABLE
NOCREATEEXTTABLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
CONNECTION LIMIT connlimit
PASSWORD password
ENCRYPTED
UNENCRYPTED
VALID UNTIL 'timestamp'
IN ROLE rolename
ROLE rolename
ADMIN rolename
RESOURCE GROUP group_name
RESOURCE QUEUE queue_name
DENY deny_point
DENY BETWEEN deny_point AND deny_point
DAY day [ TIME 'time' ]{'Sunday' | 'Monday' | 'Tuesday' |'Wednesday' | 'Thursday' | 'Friday' | 'Saturday' | 0-6 }{ 00-23 : 00-59 | 01-12 : 00-59 { AM | PM }}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.