CREATE PROFILE
CREATE PROFILE — создать профиль
Синтаксис
CREATE PROFILE [ IF NOT EXISTS ]имя[ LIMITпараметрзначение[ ... ] ] Здесьпараметр: FAILED_LOGIN_ATTEMPTS | PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX | PASSWORD_LIFE_TIME | PASSWORD_GRACE_TIME | OLD_PASSWORD_TIME | OLD_PASSWORD_MAX | USER_INACTIVE_TIME | FAILED_AUTH_KEEP_TIME | PASSWORD_MIN_UNIQUE_CHARS | PASSWORD_MIN_LEN | PASSWORD_REQUIRE_COMPLEX CREATE PROFILE [ IF NOT EXISTS ]имяFROMсуществующий_профиль
Описание
Команда CREATE PROFILE добавляет новый профиль в кластер баз данных Postgres Pro. Выполнять эту команду разрешено только суперпользователям базы данных или пользователям с правами роли pg_manage_profiles.
Профиль определяет набор параметров, ограничивающих использование базы данных. В частности, профили Postgres Pro позволяют установить парольную политику для пользователей, которым они назначены. Профили определяются на уровне кластера баз данных, поэтому они распространяются на все базы в кластере.
По умолчанию все параметры нового профиля принимают значения DEFAULT, то есть наследуют значения, установленные для встроенного профиля default. Изначально профиль default не устанавливает никаких ограничений, но это можно изменить, воспользовавшись командой ALTER PROFILE. Значение UNLIMITED указывает, что данный параметр не накладывает ограничений.
Когда роли назначается профиль, на неё распространяются все установленные в нём ограничения. Всем новым ролям по умолчанию назначается профиль default, но вы можете явно задать другой профиль при создании роли.
Параметры
имяИмя нового профиля.
FAILED_LOGIN_ATTEMPTSзначениеЗадаёт число неудачных попыток входа, при котором роль блокируется. Суперпользователь может разблокировать заблокированную роль, выполнив команду ALTER ROLE с предложением
ACCOUNT UNLOCK.Обратите внимание, что при каждой попытке входа со стороны пользователя фактически может предприниматься несколько попыток входа. Например, когда пользователь пытается подключиться к серверу, поддерживающему SSL, клиенты на базе libpq по умолчанию дополнительно предпринимают попытку подключения без SSL, если подключиться через SSL не удаётся.
Возможные значения: положительные целые числа,
DEFAULT(по умолчанию) иUNLIMITED(без ограничения).PASSWORD_REUSE_TIMEзначениеЗадаёт период (в днях), в течение которого нельзя будет использовать старый пароль. Возможные значения: неотрицательные числа, значения типа
interval,DEFAULTиUNLIMITED.Этот параметр надо устанавливать вместе с
PASSWORD_REUSE_MAX, так как они действуют в совокупности. Если они оба имеют значениеUNLIMITED, повторное использование паролей никак не ограничивается. Если же только один из них равенUNLIMITED, повторно использовать старые пароли будет нельзя.PASSWORD_REUSE_MAXзначениеЗадаёт количество смен паролей, после которого можно будет повторно использовать старый пароль. Возможные значения: неотрицательные целые числа,
DEFAULTиUNLIMITED.Этот параметр надо устанавливать вместе с
PASSWORD_REUSE_TIME, так как они действуют в совокупности. Если они оба имеют значениеUNLIMITED, повторное использование паролей никак не ограничивается. Если же только один из них равенUNLIMITED, повторно использовать старые пароли будет нельзя.PASSWORD_LIFE_TIMEзначениеЗадаёт период (в днях), в течение которого можно использовать пароль на ведущем сервере. Возможные значения: числа,
DEFAULT,UNLIMITEDи значения типаinterval. Пересчитанное в секунды значение должно быть больше0. По истечении срока действия пароля последующие попытки подключения соответствующей роли будут отвергнуты. Разблокировать роль и вернуть ей возможность подключения можно с помощью команды ALTER ROLE.Однако если настроена аутентификация LDAP и эта роль не заблокирована в ней, то она по-прежнему сможет подключаться к резервным серверам.
Если также установлен параметр
PASSWORD_GRACE_TIME, срок действия пароля продлевается на заданный период. В течение этого периода лояльности пользователю будет предлагаться сменить пароль, но при этом он сможет осуществлять вход.PASSWORD_GRACE_TIMEзначениеЗадаёт период (в днях), в течение которого будет выдаваться предупреждение об истечении срока действия пароля, но использование этого пароля будет разрешено. Задать срок действия пароля можно в атрибуте
VALID UNTILроли или в параметреPASSWORD_LIFE_TIMEпрофиля.Возможные значения: неотрицательные числа,
DEFAULT,UNLIMITEDи значения типаinterval. Если для параметраPASSWORD_GRACE_TIMEзадано значениеUNLIMITED, срок действия пароля по сути не ограничен.OLD_PASSWORD_TIMEзначениеЗадаёт период, в течение которого для аутентификации можно использовать и старый, и новый пароль. Когда используется старый пароль, выдаётся соответствующее предупреждение. Для аутентификации можно использовать только последний старый пароль, который хранится в системном каталоге
pg_role_password.Возможные значения: неотрицательные действительные числа, значения типа
interval,DEFAULTилиUNLIMITED. Если для параметра задано значение0(по умолчанию), старые пароли не сохраняются и не могут быть использованы для аутентификации.Этот параметр надо устанавливать вместе с
OLD_PASSWORD_MAX, так как они действуют в совокупности. Использовать старый пароль можно, только если значения обоих параметров отличны от0. Если для обоих параметров установлено значениеUNLIMITED, использование старого пароля никак не ограничивается. Однако такой вариант не рекомендуется из-за возможных рисков для безопасности.OLD_PASSWORD_MAXзначениеОпределяет, сколько раз старый пароль может быть использован для аутентификации. Число использованных попыток входа сохраняется в системном каталоге
pg_role_passwordи не может быть сброшено.Возможные значения: неотрицательные целые числа,
DEFAULTилиUNLIMITED. Если для параметра задано значение0(по умолчанию), выполнить аутентификацию со старым паролем невозможно, возникает соответствующее сообщение об ошибке.Этот параметр надо устанавливать вместе с
OLD_PASSWORD_TIME, так как они действуют в совокупности. Использовать старый пароль можно, только если значения обоих параметров отличны от0. Если для обоих параметров установлено значениеUNLIMITED, использование старого пароля никак не ограничивается. Однако такой вариант не рекомендуется из-за возможных рисков для безопасности.USER_INACTIVE_TIMEзначениеЗадаёт максимальный период (в днях) с момента последнего входа пользователя, в течение которого пользователь должен осуществить очередное подключение. В случае отсутствия подключений по истечении этого периода роль пользователя блокируется. Суперпользователь может разблокировать заблокированную роль командой ALTER ROLE с предложением
ACCOUNT UNLOCK. Возможные значения: числа,DEFAULT,UNLIMITEDи значения типаinterval. Пересчитанное в секунды значение должно быть больше0.FAILED_AUTH_KEEP_TIMEзначениеЗадаёт период (в днях), в течение которого хранится информация о первой ошибке аутентификации пользователя. Возможные значения: числа,
DEFAULT,UNLIMITEDи значения типаinterval. Пересчитанное в секунды значение должно быть больше0. При попытке пользователя войти в систему по истечении этого периода, счётчик неудачных попыток входа (параметрFAILED_LOGIN_ATTEMPTS) сбрасывается, и пользователь разблокируется, если он был заблокирован ранее из-за ошибок аутентификации.PASSWORD_MIN_UNIQUE_CHARSзначениеЗадаёт минимальное количество уникальных символов в пароле. Возможные значения: положительные целые числа,
DEFAULTиUNLIMITED.PASSWORD_MIN_LENзначениеЗадаёт минимальное количество символов в пароле. Возможные значения: положительные целые числа,
DEFAULTиUNLIMITED.PASSWORD_REQUIRE_COMPLEX[значение]Определяет, проверяется ли сложность пароля. Если эта проверка включена, пароль должен соответствовать следующим требованиям:
Пароль содержит как минимум по одному символу из трёх перечисленных групп: строчные буквы, прописные буквы, цифры и специальные символы
Пароль не содержит имя пользователя
Возможные значения: логические значения или
DEFAULT. Если значение параметра опущено, подразумеваетсяtrue.IF NOT EXISTSНе считать ошибкой, если профиль с таким именем уже существует.
существующий_профильИмя копируемого существующего профиля. Новый профиль получит те же свойства, что и существующий, но будет независимым объектом.
Важно
Все буквы или их аналоги в языках без разделения на регистры (хинди, китайский и т.п.) в кодировке UTF-8 считаются строчными буквами.
Замечания
Изменить значения параметров профиля позволяет команда ALTER PROFILE, а удалить профиль — DROP PROFILE. Все параметры, задаваемые в CREATE PROFILE, можно изменить позже с помощью команды ALTER PROFILE.
Предупреждение
Параметры PASSWORD_REUSE_TIME и PASSWORD_REUSE_MAX могут не работать, если при установлении пароля он передаётся в зашифрованном виде. Так, в частности, устанавливает пароль команда \password в psql (за подробностями обратитесь к Подразделу «Метакоманды»). Если пароль хешируется с применением MD5, его можно в зашифрованном виде сравнить с предыдущим, и таким образом контролировать его в соответствии с параметрами PASSWORD_REUSE_TIME и PASSWORD_REUSE_MAX. Однако сравнивать пароли, зашифрованные алгоритмом SCRAM-SHA-256, не представляется возможным.
Предупреждение
Параметры PASSWORD_MIN_UNIQUE_CHARS, PASSWORD_MIN_LEN и PASSWORD_REQUIRE_COMPLEX не работают, если при смене пароля он передаётся в зашифрованном виде.
Предупреждение
OLD_PASSWORD_TIME и OLD_PASSWORD_MAX поддерживают все доступные методы аутентификации по паролю. Однако корректная работа этих параметров не гарантируется, если методы аутентификации или шифрования нового и старого паролей различаются. Поэтому при изменении метода аутентификации в файле pg_hba.conf или значения параметра password_encryption в файле postgresql.conf рекомендуется сменить пароль дважды, чтобы обеспечить возможность использовать как новый, так и старый пароль.
Обратите внимание, что OLD_PASSWORD_TIME и OLD_PASSWORD_MAX несовместимы с параметром управления соединением use_scram_passthrough модуля postgres_fdw.
Примеры
Создание профиля admin_profile:
CREATE PROFILE admin_profile
LIMIT PASSWORD_REUSE_MAX 10
PASSWORD_REUSE_TIME 30;Создание роли с профилем admin_profile:
CREATE ROLE admin WITH PROFILE admin_profile;
Создать новый профиль из существующего:
CREATE PROFILE administrator FROM admin_profile;
Иногда удобно использовать существующий профиль в качестве шаблона для нового.
См. также
ALTER PROFILE, DROP PROFILE, CREATE ROLECREATE PROFILE
CREATE PROFILE — define a new profile
Synopsis
CREATE PROFILE [ IF NOT EXISTS ]name[ LIMITparametervalue[ ... ] ] whereparametercan be: FAILED_LOGIN_ATTEMPTS | PASSWORD_REUSE_TIME | PASSWORD_REUSE_MAX | PASSWORD_LIFE_TIME | PASSWORD_GRACE_TIME | OLD_PASSWORD_TIME | OLD_PASSWORD_MAX | USER_INACTIVE_TIME | FAILED_AUTH_KEEP_TIME | PASSWORD_MIN_UNIQUE_CHARS | PASSWORD_MIN_LEN | PASSWORD_REQUIRE_COMPLEX CREATE PROFILE [ IF NOT EXISTS ]nameFROMexisting_profile
Description
The CREATE PROFILE command adds a new profile for the Postgres Pro database cluster. You must be a database superuser or have the privileges of the pg_manage_profiles role to use this command.
A profile defines a set of parameters that restrict database usage. In particular, Postgres Pro profiles enforce password management policy for the roles assigned to them. Profiles are defined at the database cluster level, so they apply to all databases in the cluster.
By default, all parameter values of a new profile are set to DEFAULT, which inherits the actual values from the built-in default profile. Initially, the default profile provides no usage restrictions, but it can be changed by the ALTER PROFILE command. The UNLIMITED value indicates that no restrictions apply to a particular parameter.
Once a profile is assigned to a role, all restrictions of this profile apply to this role. All newly created roles have the default profile, unless you explicitly assign a different profile to this role.
Parameters
nameThe name of the new profile.
FAILED_LOGIN_ATTEMPTSvalueSpecifies the number of failed login attempts before the role is locked. A superuser can unlock the locked role by running the ALTER ROLE command with the
ACCOUNT UNLOCKclause.Note that there can be several actual login attempts made behind each user-perceived login attempt. For example, when the user tries to log in with SSL enabled, libpq-based clients by default also make a non-SSL connection attempt if an SSL connection fails.
Possible values are integers greater than
0,DEFAULT, orUNLIMITED.PASSWORD_REUSE_TIMEvalueSpecifies for how long an old password cannot be reused. Measured in days. Possible values are numbers greater than or equal to
0,intervalvalues,DEFAULT, orUNLIMITED.Set this parameter together with
PASSWORD_REUSE_MAXas its effect depends on the combination. If both these parameters are set toUNLIMITED, there are no restrictions on password reuse. If only one of them is set toUNLIMITED, password reuse is always forbidden.PASSWORD_REUSE_MAXvalueSpecifies the number of password changes required before the current password can be reused. Possible values are integers greater than or equal to
0,DEFAULT, orUNLIMITED.Set this parameter together with
PASSWORD_REUSE_TIMEas its effect depends on the combination. If both these parameters are set toUNLIMITED, there are no restrictions on password reuse. If only one of them is set toUNLIMITED, password reuse is always forbidden.PASSWORD_LIFE_TIMEvalueSpecifies for how long the password can be used for authentication on the primary server. Measured in days. Possible values are numbers,
intervalvalues,DEFAULT, orUNLIMITED. The resulting value in seconds must be greater than0. Once the password expires, all further connections of the corresponding role are rejected. The role can be unlocked with the ALTER ROLE command.However, if the LDAP authentication is configured, this role still can connect to standby servers, unless it is locked in LDAP too.
If
PASSWORD_GRACE_TIMEparameter is also set, the specified grace period is added to the password lifetime. During the grace period, the role is prompted to change the password while still allowed to log in.PASSWORD_GRACE_TIMEvalueSpecifies for how long a warning is raised that the password is going to expire while login is still allowed, measured in days. You can set the password life time in the
VALID UNTILattribute of the role or in thePASSWORD_LIFE_TIMEparameter of the profile.Possible values are numbers greater than or equal to
0,intervalvalues,DEFAULT, orUNLIMITED. If thePASSWORD_GRACE_TIMEparameter is set toUNLIMITED, the password life time effectively becomes unlimited.OLD_PASSWORD_TIMEvalueSpecifies for how long the previous password can be used for authentication alongside the new one. If the previous password is used, a corresponding warning is raised. It is possible to use only the most recent previous password, which is stored in the
pg_role_passwordcatalog.Possible values are real numbers greater than or equal to
0,intervalvalues,DEFAULT, orUNLIMITED. If this parameter is set to0(default), previous passwords are not stored and cannot be used for authentication.Set this parameter together with
OLD_PASSWORD_MAXas its effect depends on the combination. It is possible to use the previous password only if values of both these parameters differ from0. If both parameters are set toUNLIMITED, there are no restrictions on using the previous password. However, this is not recommended as it may result in security issues.OLD_PASSWORD_MAXvalueSpecifies the number of times a previous password can be used for authentication. The count of used login attempts is stored in the
pg_role_passwordcatalog and cannot be reset.Possible values are integers greater than or equal to
0,DEFAULT, orUNLIMITED. If this parameter is set to0(default), authentication with the previous password fails and a corresponding error message is raised.Set this parameter together with
OLD_PASSWORD_TIMEas its effect depends on the combination. It is possible to use the previous password only if values of both parameters differ from0. If both parameters are set toUNLIMITED, there are no restrictions on using the previous password. However, this is not recommended, as it may result in security issues.USER_INACTIVE_TIMEvalueSpecifies for how long the user can be inactive since the last login before the role is locked. Measured in days. A superuser can unlock the locked role by running the ALTER ROLE command with the
ACCOUNT UNLOCKclause. Possible values are numbers,intervalvalues,DEFAULT, orUNLIMITED. The resulting value in seconds must be greater than0.FAILED_AUTH_KEEP_TIMEvalueSpecifies for how long the information on the user's first authentication failure is kept. Measured in days. Possible values are numbers,
intervalvalues,DEFAULT, orUNLIMITED. The resulting value in seconds must be greater than0. When the user attempts to log in after this time interval expires, the failed login attempts counter (seeFAILED_LOGIN_ATTEMPTSparameter) is reset and the user is unlocked if they were locked previously due to authentication failures.PASSWORD_MIN_UNIQUE_CHARSvalueSpecifies minimum number of unique characters for a password. Possible values are integers greater than
0,DEFAULT, orUNLIMITED.PASSWORD_MIN_LENvalueSpecifies minimum number of characters for a password. Possible values are positive integers,
DEFAULT, orUNLIMITED.PASSWORD_REQUIRE_COMPLEX[value]Specifies whether password complexity is checked. If this check is enabled, a password must meet the following requirements:
Password contains at least one character from three of the following groups: lowercase letters, uppercase letters, digits, and special characters
Password doesn't contain the user name
Possible values are booleans or
DEFAULT. If the parameter is used without a value, it is set astrue.IF NOT EXISTSDo not throw an error if a profile with the same name already exists.
existing_profileThe name of an existing profile to copy. The new profile will have the same properties as the existing one, but it will be an independent object.
Important
All letters of languages without case distinction (Hindi, Chinese, etc.) in the UTF-8 encoding are considered lowercase.
Notes
Use ALTER PROFILE to change the parameter values of a profile, and DROP PROFILE to remove a profile. All the parameters specified by CREATE PROFILE can be modified later by running the ALTER PROFILE command.
Warning
PASSWORD_REUSE_TIME and PASSWORD_REUSE_MAX parameters might not work if the password is passed in an encrypted form during the password change. The \password command of psql encrypts the password (see the section called “Meta-Commands” for details). If the password is MD5 encrypted, it can be checked for equivalence, and PASSWORD_REUSE_TIME or PASSWORD_REUSE_MAX parameters can be applied. But there is no way to check for equivalence for SCRAM-SHA-256 encrypted passwords.
Warning
PASSWORD_MIN_UNIQUE_CHARS, PASSWORD_MIN_LEN, and PASSWORD_REQUIRE_COMPLEX parameters don't work if the password is passed in an encrypted form during the password change.
Warning
OLD_PASSWORD_TIME and OLD_PASSWORD_MAX support all available password-based authentication methods. However, correct operation of these parameters is not guaranteed if the authentication or the encryption method of the new password differs from those of the previous password. Thus, if you change the authentication method in pg_hba.conf or the value of password_encryption in postgresql.conf, change the password twice afterwards to ensure that both the new and the previous password can be used for authentication.
Note that OLD_PASSWORD_TIME and OLD_PASSWORD_MAX are incompatible with the use_scram_passthrough connection management option of the postgres_fdw module.
Examples
Create a profile admin_profile:
CREATE PROFILE admin_profile
LIMIT PASSWORD_REUSE_MAX 10
PASSWORD_REUSE_TIME 30;
Create a role having admin_profile:
CREATE ROLE admin WITH PROFILE admin_profile;
Create a profile from an existing profile:
CREATE PROFILE administrator FROM admin_profile;
This can be convenient to be able to use an existing profile as a template for a new one.