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;

Иногда удобно использовать существующий профиль в качестве шаблона для нового.

CREATE PROFILE

CREATE PROFILE — define a new profile

Synopsis

CREATE PROFILE [ IF NOT EXISTS ] name [ LIMIT parameter value [ ... ] ]

where parameter can 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 ] name FROM existing_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

name

The name of the new profile.

FAILED_LOGIN_ATTEMPTS value

Specifies 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 UNLOCK clause.

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, or UNLIMITED.

PASSWORD_REUSE_TIME value

Specifies for how long an old password cannot be reused. Measured in days. Possible values are numbers greater than or equal to 0, interval values, DEFAULT, or UNLIMITED.

Set this parameter together with PASSWORD_REUSE_MAX as its effect depends on the combination. If both these parameters are set to UNLIMITED, there are no restrictions on password reuse. If only one of them is set to UNLIMITED, password reuse is always forbidden.

PASSWORD_REUSE_MAX value

Specifies the number of password changes required before the current password can be reused. Possible values are integers greater than or equal to 0, DEFAULT, or UNLIMITED.

Set this parameter together with PASSWORD_REUSE_TIME as its effect depends on the combination. If both these parameters are set to UNLIMITED, there are no restrictions on password reuse. If only one of them is set to UNLIMITED, password reuse is always forbidden.

PASSWORD_LIFE_TIME value

Specifies for how long the password can be used for authentication on the primary server. Measured in days. Possible values are numbers, interval values, DEFAULT, or UNLIMITED. The resulting value in seconds must be greater than 0. 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_TIME parameter 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_TIME value

Specifies 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 UNTIL attribute of the role or in the PASSWORD_LIFE_TIME parameter of the profile.

Possible values are numbers greater than or equal to 0, interval values, DEFAULT, or UNLIMITED. If the PASSWORD_GRACE_TIME parameter is set to UNLIMITED, the password life time effectively becomes unlimited.

OLD_PASSWORD_TIME value

Specifies 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_password catalog.

Possible values are real numbers greater than or equal to 0, interval values, DEFAULT, or UNLIMITED. If this parameter is set to 0 (default), previous passwords are not stored and cannot be used for authentication.

Set this parameter together with OLD_PASSWORD_MAX as its effect depends on the combination. It is possible to use the previous password only if values of both these parameters differ from 0. If both parameters are set to UNLIMITED, there are no restrictions on using the previous password. However, this is not recommended as it may result in security issues.

OLD_PASSWORD_MAX value

Specifies the number of times a previous password can be used for authentication. The count of used login attempts is stored in the pg_role_password catalog and cannot be reset.

Possible values are integers greater than or equal to 0, DEFAULT, or UNLIMITED. If this parameter is set to 0 (default), authentication with the previous password fails and a corresponding error message is raised.

Set this parameter together with OLD_PASSWORD_TIME as its effect depends on the combination. It is possible to use the previous password only if values of both parameters differ from 0. If both parameters are set to UNLIMITED, there are no restrictions on using the previous password. However, this is not recommended, as it may result in security issues.

USER_INACTIVE_TIME value

Specifies 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 UNLOCK clause. Possible values are numbers, interval values, DEFAULT, or UNLIMITED. The resulting value in seconds must be greater than 0.

FAILED_AUTH_KEEP_TIME value

Specifies for how long the information on the user's first authentication failure is kept. Measured in days. Possible values are numbers, interval values, DEFAULT, or UNLIMITED. The resulting value in seconds must be greater than 0. When the user attempts to log in after this time interval expires, the failed login attempts counter (see FAILED_LOGIN_ATTEMPTS parameter) is reset and the user is unlocked if they were locked previously due to authentication failures.

PASSWORD_MIN_UNIQUE_CHARS value

Specifies minimum number of unique characters for a password. Possible values are integers greater than 0, DEFAULT, or UNLIMITED.

PASSWORD_MIN_LEN value

Specifies minimum number of characters for a password. Possible values are positive integers, DEFAULT, or UNLIMITED.

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 as true.

IF NOT EXISTS

Do not throw an error if a profile with the same name already exists.

existing_profile

The 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.

FAQ