CREATE ROLE#
CREATE ROLE
CREATE ROLE — определить новую роль базы данных
Синтаксис
CREATE ROLEname
[ [ WITH ]option
[ ... ] ] whereoption
can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit
| [ ENCRYPTED ] PASSWORD 'password
' | PASSWORD NULL | VALID UNTIL 'timestamp
' | IN ROLErole_name
[, ...] | IN GROUProle_name
[, ...] | ROLErole_name
[, ...] | ADMINrole_name
[, ...] | USERrole_name
[, ...] | SYSIDuid
Описание
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 ROLEname
[ WITH ADMINrole_name
]
Несколько начальных администраторов и все остальные параметры команды CREATE ROLE
являются расширениями Tantor BE.
Стандарт SQL определяет понятия пользователей и ролей, но он рассматривает их как отдельные концепции и оставляет все команды, определяющие пользователей, для спецификации каждой реализации базы данных. В Tantor BE мы решили объединить пользователей и роли в один вид сущности. Поэтому роли имеют гораздо больше необязательных атрибутов, чем в стандарте.
Поведение, указанное стандартом SQL, наиболее точно приближено
созданием пользователей SQL-стандарта как Tantor BE
ролей с опцией NOINHERIT
, а роли SQL-стандарта как роли
Tantor BE с опцией INHERIT
.