CREATE ROLE — создание новой роли базы данных
CREATE ROLEname[ [ WITH ]option[ ... ] ] гдеoptionможет принимать следующие значения: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITлимит_подключений| [ ENCRYPTED ] PASSWORD 'пароль' | PASSWORD NULL | VALID UNTIL 'метка_времени' | IN ROLErole_name[, ...] | ROLErole_name[, ...] | ADMINrole_name[, ...] | SYSIDuid
CREATE ROLE добавляет новую роль в
Digital Q.DataBase кластер баз данных. Роль — это
сущность, которая может владеть объектами базы данных и иметь привилегии базы данных;
роль можно рассматривать как «пользователя», как «группу», или и то, и другое
в зависимости от способа её использования. Обратитесь к
Глава 3.6 и Глава 3.5 за информацией об управлении
пользователями и аутентификации. Для использования этой команды необходимо иметь CREATEROLE
привилегию или быть суперпользователем базы данных.
Обратите внимание, что роли определяются на уровне кластера баз данных и поэтому действительны во всех базах данных в кластере.
При создании роли можно сразу включить новую роль в состав существующей роли, а также назначить существующие роли членами новой роли. Правила включения исходных параметров членства в ролях описаны ниже в
IN ROLE, ROLE, и
ADMIN предложения. GRANT
команда обеспечивает детальное управление параметрами при создании членства, а также возможность изменения этих параметров после создания новой роли.
nameИмя новой роли.
SUPERUSERNOSUPERUSER
Эти предложения определяют, будет ли новая роль «суперпользователем»,
, который может игнорировать все ограничения доступа в базе данных.
Статус суперпользователя опасен, и его следует использовать только тогда, когда это действительно
необходимо. Для создания нового суперпользователя вы сами должны быть суперпользователем.
Если параметр не указан,
NOSUPERUSER используется по умолчанию.
CREATEDBNOCREATEDB
Эти параметры определяют право роли на создание баз данных. Если
CREATEDB указано, то определяемой роли
будет разрешено создавать новые базы данных. Указание
NOCREATEDB лишит роль возможности
создавать базы данных. Если значение не указано, то
NOCREATEDB используется по умолчанию.
Только суперпользователи или роли с правом CREATEDB
могут указывать CREATEDB.
CREATEROLENOCREATEROLE
Эти параметры определяют, будет ли роли разрешено
создавать, изменять, удалять, комментировать и изменять метку безопасности для
других ролей.
См. создание ролей для получения подробных сведений о том, какие
возможности предоставляет эта привилегия.
Если не указано, NOCREATEROLE используется по умолчанию.
INHERITNOINHERIT
Это влияет на статус наследования членства, когда эта
роль добавляется в качестве члена другой роли, как в текущей, так и в
последующих командах. В частности, это управляет статусом наследования
членств, добавленных этой командой с использованием
IN ROLE предложения, а также в последующих командах с использованием
предложения ROLE . Это значение также используется в качестве
статуса наследования по умолчанию при добавлении этой роли в качестве участника
с помощью GRANT команды. Если параметр не указан,
INHERIT используется по умолчанию.
В Digital Q.DataBase версиях до 16, наследование было атрибутом уровня роли, который управлял всеми проверками членства во время выполнения для этой роли.
LOGINNOLOGIN
Эти параметры определяют, разрешено ли роли входить в систему;
то есть может ли роль быть указана в качестве имени для начальной авторизации
сеанса при подключении клиента. Роль, имеющая
предложения LOGIN этот атрибут, может считаться пользователем.
Роли без этого атрибута полезны для управления привилегиями
баз данных, но не являются пользователями в обычном смысле слова.
Если параметр не указан,
NOLOGIN используется по умолчанию, за исключением случаев, когда
CREATE ROLE команда вызывается в альтернативном написании
CREATE USER.
REPLICATIONNOREPLICATION
Эти параметры определяют, является ли роль ролью репликации. Роль
должна обладать этим атрибутом (или быть суперпользователем), чтобы иметь возможность
подключаться к серверу в режиме репликации (физической или логической
репликации), а также создавать или удалять слоты
репликации.
Роль, имеющая REPLICATION атрибут является очень
высокопривилегированной ролью и должен назначаться только тем ролям, которые действительно
используются для репликации. Если этот параметр не указан,
NOREPLICATION используется по умолчанию.
Только суперпользователи или роли с правом REPLICATION
могут указывать REPLICATION.
BYPASSRLSNOBYPASSRLS
Данные параметры определяют, будет ли роль игнорировать все политики защиты на уровне
строк (RLS). NOBYPASSRLS используется по умолчанию.
Только суперпользователи или роли с правом BYPASSRLS
могут указывать BYPASSRLS.
Учтите, что pg_dump устанавливает row_security в значение
OFF по умолчанию, чтобы гарантировать выгрузку всего содержимого таблицы.
Если у пользователя, запускающего pg_dump, нет необходимых
прав доступа, будет выдана ошибка. Тем не менее, суперпользователи и
владелец выгружаемой таблицы всегда обходят политики RLS.
CONNECTION LIMIT лимит_подключенийЕсли роль может подключаться к базе данных, этот параметр определяет количество одновременных соединений, которые разрешено устанавливать данной роли. -1 (значение по умолчанию) означает отсутствие ограничения. Обратите внимание, что только обычные соединения учитываются в этом ограничении. Ни подготовленные транзакции, ни соединения фоновых рабочих процессов не учитываются в этом ограничении.
ENCRYPTED ] PASSWORD 'пароль'PASSWORD NULL
Устанавливает пароль роли. (Пароль имеет смысл только для
ролей, имеющих атрибут LOGIN , но вы
тем не менее можете определить его для ролей без него.) Если вы
не планируете использовать аутентификацию по паролю, этот параметр можно
опустить. Если пароль не задан, ему будет присвоено пустое значение (null),
и аутентификация по паролю для такого пользователя всегда будет
завершаться неудачей. Пустой пароль может быть по желанию явно указан как
PASSWORD NULL.
Указание пустой строки также установит пароль в значение null, хотя до версии 10 Digital Q.DataBase это было не так. В более ранних версиях пустая строка могла как использоваться, так и нет, в зависимости от метода аутентификации и конкретной версии, при этом библиотека libpq в любом случае отказывалась её использовать. Во избежание двусмысленности следует избегать указания пустой строки.
Пароль всегда хранится в системных каталогах в зашифрованном виде. Данное ключевое
ENCRYPTED слово не имеет эффекта, но принимается для
обратной совместимости. Метод шифрования определяется
параметром конфигурации password_encryption.
Если предоставленная строка пароля уже зашифрована по алгоритму MD5 или
SCRAM, она сохраняется в исходном виде независимо от
password_encryption (так как система не может расшифровать
указанную зашифрованную строку пароля для её перешифрования в
другой формат). Это позволяет выполнять повторную загрузку зашифрованных паролей
во время выгрузки/восстановления.
VALID UNTIL 'метка_времени'
Данное VALID UNTIL предложение устанавливает дату и
время, после которых пароль роли перестает быть действительным. Если
это предложение опущено, пароль будет действителен неограниченное время.
IN ROLE role_name
Данное IN ROLE предложение приводит к тому, что новая роль
автоматически добавляется в качестве члена указанных существующих
ролей. Для нового членства будет SET
включена, а параметр ADMIN отключен.
Данное INHERIT параметр будет включен, если не указан параметр
NOINHERIT option is specified.
ROLE role_name
Данное ROLE предложение приводит к тому, что одна или несколько указанных
существующих ролей автоматически добавляются в качестве членов с
SET включенным параметром. Это фактически делает
новую роль «группу». Роли, указанные в данном предложении,
с атрибутом уровня INHERIT роли будут иметь
предложения INHERIT параметр, включенный в новом членстве.
Новые членства будут иметь ADMIN отключен.
ADMIN role_name
Данное ADMIN предложение имеет тот же эффект, что и
ROLE, но указанные роли добавляются в качестве участников
новой роли с ADMIN включенным параметром, что дает
им право предоставлять членство в новой роли другим субъектам.
SYSID uid
Данное SYSID предложение игнорируется, но принимается
для обеспечения обратной совместимости.
Используйте ALTER ROLE для изменения атрибутов роли, и DROP ROLE
для удаления роли. Все атрибуты,
указанные в CREATE ROLE могут быть изменены в дальнейшем
ALTER ROLE командами.
Рекомендуемым способом добавления и удаления членов ролей, используемых в качестве групп, является использование
GRANT и
REVOKE.
Предложение VALID UNTIL определяет срок действия только для пароля, а не для самой роли. В частности, ограничение по сроку действия не применяется при входе в систему с использованием методов аутентификации без пароля.
Атрибуты роли, определенные здесь, не являются наследуемыми, то есть членство в роли, обладающей, например, CREATEDB не позволит
участнику создавать новые базы данных, даже если при предоставлении членства
был указан параметр INHERIT option. Разумеется, если при предоставлении членства был указан параметр SET роль-член сможет выполнить
SET ROLE к роли createdb, а затем создать новую базу данных.
Назначения членства, создаваемые предложениями
IN ROLE, ROLE, и ADMIN
используют роль, выполняющую эту команду, в качестве предоставляющей стороны (grantor).
Предложение INHERIT атрибут является значением по умолчанию по соображениям обратной совместимости: в предыдущих выпусках Digital Q.DataBase,
пользователи всегда имели доступ ко всем привилегиям групп, членами которых они состояли.
Однако, NOINHERIT обеспечивает более точное соответствие семантике, определённой в стандарте SQL.
Digital Q.DataBase включает программу 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 ROLEname[ WITH ADMINrole_name]
Несколько начальных администраторов и все остальные параметры
CREATE ROLEявляются
Digital Q.DataBase расширениями.
Стандарт SQL определяет понятия пользователей и ролей, но он рассматривает их как отдельные концепции и оставляет реализацию всех команд, определяющих пользователей, на усмотрение конкретных баз данных. В Digital Q.DataBase мы решили объединить пользователей и роли в единый тип сущностей. Поэтому роли имеют гораздо больше необязательных атрибутов, чем в стандарте.
Поведение, определенное стандартом SQL, наиболее точно имитируется созданием пользователей стандарта SQL как Digital Q.DataBase
ролей с параметром NOINHERIT параметр, и роли стандарта SQL как Digital Q.DataBase ролей с параметром
INHERIT параметром.
Предложение USER предложение ведет себя так же, как
ROLE но признан устаревшим:
USER role_name [, ...]
Предложение IN GROUP предложение действует так же, как IN
ROLE но признан устаревшим:
IN GROUP role_name [, ...]