Перейти к основному содержимому

Функции парольных политик

Функции, представленные в данном разделе, реализованы в рамках функциональности парольных политик.

set_role_policies()

Функция для создания или изменения парольной политики по имени роли, либо идентификатору.

Примечание

Для изменения параметраpolicy_enable используйте функции активации и деактивации политики.

Синтаксис:

  • По имени роли:

    set_role_policies(rolname name, VARIADIC policies record)
    RETURNS record
  • По идентификатору роли:

    set_role_policies_by_id(roleid oid, VARIADIC policies record[])
    RETURNS record

Входные параметры:

Название параметраТип значенияОписание
rolnamenameИмя роли
roleidoidИдентификатор роли
policies (policy1, policy2, ...)recordЗначение настройки парольной политики, задается специальной функцией

Для параметра policies доступны следующие настройки:

Имя настройки парольной политикиФункция и ее синонимыPOSIX шаблон для <value>
reusetimereuse_time(‘<value>’)\d+ s
inhistoryin_history(‘<value>’)\d+
maxagemax_age(‘<value>’)\d+ s
minagemin_age(‘<value>’)\d+ s
graceloginlimitgrace_login_limit(‘<value>’), grace_li(‘<value>’)\d+
gracelogintimelimitgrace_login_time_limit(‘<value>’), grace_lti(‘<value>’)\d+ s
expirewarningexpire_warning(‘<value>’)\d+ s
lockoutlockout(‘<value>’)true/false
lockoutdurationlockout_duration(), lduration(‘<value>’)\d+ s
maxfailuremax_failure(‘<value>’)\d+
failurecountintervalfailure_count_interval(‘<value>’), fc_interval(‘<value>’)\d+ s
checksyntaxcheck_syntax(‘<value>’)true/false
minlengthmin_length(‘<value>’)\d+
illegalvaluesillegal_values(‘<value>’)true/false
alphanumericalpha_numeric(‘<value>’)\d+
minalphacharsmin_alpha_chars(‘<value>’)\d+
minspecialcharsmin_special_chars(‘<value>’)\d+
minuppercasemin_uppercase(‘<value>’)\d+
minlowercasemin_lowercase(‘<value>’)\d+
maxrptcharsmax_rpt_chars(‘<value>’)\d+
policyenablepolicy_enable(‘<value>’)true/false
tracklogintrack_login(‘<value>’)true/false
maxinactivitymax_inactivity(‘<value>’)\d+ s
usepasswordstrengthestimatoruse_password_strength_estimator(‘<value>’), use_zxcvbn(‘<value>’)true/false
passwordstrengthestimatorscorepassword_strength_estimator_score(‘<value>’), zxcvbn_score(‘<value>’)[0-4]
customfunctioncustom_function(‘<value>’)[\w\d]+

Возвращаемые значения:

Название поляТип значенияОписание
roleidregroleИдентификатор роли
reuse_timeintervalВремя, в течение которого старый пароль сохраняется, и попытка сменить пароль на совпадающий со старым заканчивается ошибкой
in_historyintegerМаксимальное количество сохраненных старых паролей. При достижении максимума добавление еще одного старого пароля приводит к удалению наиболее старого (по createtime)
max_ageintervalВремя жизни пароля, после которого пароль считается истекшим
min_ageintervalВремя, которое должно пройти между двумя изменениями пароля
grace_login_limitintegerМаксимальное количество аутентификаций, доступных роли после истечения времени жизни пароля
grace_login_time_limitintervalВремя после окончания действия пароля, в течение которого он продолжает работать
expire_warningintervalВремя до окончания действия пароля, в течение которого пользователю будет отображаться предупреждение
lockoutbooleanПризнак включенного правила блокировки аккаунта при превышении максимума попыток входа с неверным паролем
lockout_durationintervalВремя, на которое блокируется аккаунт при превышении максимума попыток входа
max_failureintegerМаксимальное количество подряд введенных неверных паролей, при достижении которого вызывается блокировка пароля
failure_count_intervalintervalВремя, после которого обнуляется количество неверных вводов пароля
check_syntaxbooleanПризнак включенных правил синтаксической проверки пароля
min_lengthintegerМинимальная длина пароля
illegal_valuesbooleanПризнак включенного правила проверки пароля по списку часто используемых
alpha_numericintegerМинимальное количество цифр в пароле
min_alpha_charsintegerМинимальное количество букв в пароле
min_special_charsintegerМинимальное количество символов в пароле, не являющихся буквой или цифрой
min_uppercaseintegerМинимальное количество прописных букв
min_lowercaseintegerМинимальное количество строчных букв
max_rpt_charsintegerМаксимальное количество повторяющихся символов
policy_enablebooleanПризнак включенной политики
track_loginbooleanЗапоминать ли время последней аутентификации
max_inactivityintervalВремя после последней аутентификации, по истечении которого роль будет заблокирована
use_password_strength_estimatorbooleanИспользовать библиотеку zxcvbn для проверки пароля
password_strength_estimator_scoreintegerМинимальная допустимая сложность пароля
custom_functionregprocНазвание пользовательской функции проверки пароля
transport_password_life_timeintervalВремя жизни транспортного пароля
grace_authid_periodintervalВремя после истечения пароля (до блокировки), в течение которого возможна аутентификация

Пример использования:

Создадим для пользователя user_test настройку парольной политики reuse_time со значением 3 дня по имени роли:

SELECT * FROM set_role_policies('user_test',reuse_time('3 days'));

Пример вывода:

-[ RECORD 1 ]---------------------+----------
roleid | user_test
reuse_time | 3 days
...

enable_policy()

Функция активирует парольную политику для роли. Может вызываться как по имени роли, так и по ее идентификатору (oid).

Синтаксис:

  • По имени роли:

    enable_policy(role_name name)
    RETURNS record
  • По идентификатору роли:

    enable_policy_by_id(roleoid oid)
    RETURNS record

Входные параметры:

Название параметраТип значенияОписание
role_namenameИмя роли
roleoidoidИдентификатор роли

Возвращаемые значения:

Название поляТип значенияОписание
roleidregroleИдентификатор роли
reuse_timeintervalВремя, в течение которого старый пароль сохраняется, и попытка сменить пароль на совпадающий со старым заканчивается ошибкой
in_historyintegerМаксимальное количество сохраненных старых паролей. При достижении максимума добавление еще одного старого пароля приводит к удалению наиболее старого (по createtime)
max_ageintervalВремя жизни пароля, после которого пароль считается истекшим
min_ageintervalВремя, которое должно пройти между двумя изменениями пароля
grace_login_limitintegerМаксимальное количество аутентификаций, доступных роли после истечения времени жизни пароля
grace_login_time_limitintervalВремя после окончания действия пароля, в течение которого он продолжает работать
expire_warningintervalВремя до окончания действия пароля, в течение которого пользователю будет отображаться предупреждение
lockoutbooleanПризнак включенного правила блокировки аккаунта при превышении максимума попыток входа с неверным паролем
lockout_durationintervalВремя, на которое блокируется аккаунт при превышении максимума попыток входа
max_failureintegerМаксимальное количество подряд введенных неверных паролей, при достижении которого вызывается блокировка пароля
failure_count_intervalintervalВремя, после которого обнуляется количество неверных вводов пароля
check_syntaxbooleanПризнак включенных правил синтаксической проверки пароля
min_lengthintegerМинимальная длина пароля
illegal_valuesbooleanПризнак включенного правила проверки пароля по списку часто используемых
alpha_numericintegerМинимальное количество цифр в пароле
min_alpha_charsintegerМинимальное количество букв в пароле
min_special_charsintegerМинимальное количество символов в пароле, не являющихся буквой или цифрой
min_uppercaseintegerМинимальное количество прописных букв
min_lowercaseintegerМинимальное количество строчных букв
max_rpt_charsintegerМаксимальное количество повторяющихся символов
policy_enablebooleanПризнак включенной политики
track_loginbooleanЗапоминать ли время последней аутентификации
max_inactivityintervalВремя после последней аутентификации, по истечении которого роль будет заблокирована
use_password_strength_estimatorbooleanИспользовать библиотеку zxcvbn для проверки пароля
password_strength_estimator_scoreintegerМинимальная допустимая сложность пароля
custom_functionregprocНазвание пользовательской функции проверки пароля
transport_password_life_timeintervalВремя жизни транспортного пароля
grace_authid_periodintervalВремя после истечения пароля (до блокировки), в течение которого возможна аутентификация

Пример использования:

Активация настроек парольной политики для пользователя по идентификатору роли:

SELECT * FROM enable_policy_by_id('17917');

Пример вывода:

-[ RECORD 1 ]---------------------+----------
roleid | user_test
reuse_time | 365 days
...
policy_enable | t
...

disable_policy()

Функция деактивирует парольную политику для роли. Может вызываться как по имени роли, так и по ее идентификатору (oid).

Синтаксис:

  • По имени роли:

    disable_policy(role_name name)
    RETURNS record
  • По идентификатору роли:

    disable_policy_by_id(roleoid oid)
    RETURNS record

Входные параметры:

Название параметраТип значенияОписание
role_namenameИмя роли
roleoidoidИдентификатор роли

Возвращаемые значения:

Название поляТип значенияОписание
roleidregroleИдентификатор роли
reuse_timeintervalВремя, в течение которого старый пароль сохраняется, и попытка сменить пароль на совпадающий со старым заканчивается ошибкой
in_historyintegerМаксимальное количество сохраненных старых паролей. При достижении максимума добавление еще одного старого пароля приводит к удалению наиболее старого (по createtime)
max_ageintervalВремя жизни пароля, после которого пароль считается истекшим
min_ageintervalВремя, которое должно пройти между двумя изменениями пароля
grace_login_limitintegerМаксимальное количество аутентификаций, доступных роли после истечения времени жизни пароля
grace_login_time_limitintervalВремя после окончания действия пароля, в течение которого он продолжает работать
expire_warningintervalВремя до окончания действия пароля, в течение которого пользователю будет отображаться предупреждение
lockoutbooleanПризнак включенного правила блокировки аккаунта при превышении максимума попыток входа с неверным паролем
lockout_durationintervalВремя, на которое блокируется аккаунт при превышении максимума попыток входа
max_failureintegerМаксимальное количество подряд введенных неверных паролей, при достижении которого вызывается блокировка пароля
failure_count_intervalintervalВремя, после которого обнуляется количество неверных вводов пароля
check_syntaxbooleanПризнак включенных правил синтаксической проверки пароля
min_lengthintegerМинимальная длина пароля
illegal_valuesbooleanПризнак включенного правила проверки пароля по списку часто используемых
alpha_numericintegerМинимальное количество цифр в пароле
min_alpha_charsintegerМинимальное количество букв в пароле
min_special_charsintegerМинимальное количество символов в пароле, не являющихся буквой или цифрой
min_uppercaseintegerМинимальное количество прописных букв
min_lowercaseintegerМинимальное количество строчных букв
max_rpt_charsintegerМаксимальное количество повторяющихся символов
policy_enablebooleanПризнак включенной политики
track_loginbooleanЗапоминать ли время последней аутентификации
max_inactivityintervalВремя после последней аутентификации, по истечении которого роль будет заблокирована
use_password_strength_estimatorbooleanИспользовать библиотеку zxcvbn для проверки пароля
password_strength_estimator_scoreintegerМинимальная допустимая сложность пароля
custom_functionregprocНазвание пользовательской функции проверки пароля
transport_password_life_timeintervalВремя жизни транспортного пароля
grace_authid_periodintervalВремя после истечения пароля (до блокировки), в течение которого возможна аутентификация

Пример использования:

Деактивация настроек парольной политики для пользователя по имени роли:

SELECT * FROM disable_policy('user_test');

Пример вывода:

-[ RECORD 1 ]---------------------+----------
roleid | user_test
reuse_time | 365 days
...
policy_enable | f
...

recognize_password_policy()

Функция выводит текущую парольную политику, назначенную роли. Доступен вызов как по имени роли, так и по ее идентификатору (oid).

Синтаксис:

  • По имени роли:

    recognize_password_policy(rolename name)
    RETURNS record
  • По идентификатору роли:

    recognize_password_policy_by_id(roleoid oid)
    RETURNS record

Входные параметры:

Название параметраТип значенияОписание
rolenamenameИмя роли
roleoidoidИдентификатор роли

Возвращаемые значения:

Название поляТип значенияОписание
roleidregroleИдентификатор роли
reuse_timeintervalМинимальный срок повторного использования старого пароля
in_historyintegerКоличество хранимых старых паролей
max_ageintervalВремя жизни пароля
min_ageintervalМинимальное время, через которое пароль можно сменить
grace_login_limitintegerКоличество доступных входов после истечения пароля
grace_login_time_limitintervalВремя действия пароля после истечения
expire_warningintervalВремя, в течение которого показывается предупреждение об истечении
lockoutbooleanВключено ли правило блокировки учетной записи
lockout_durationintervalДлительность блокировки учетной записи
max_failureintegerМаксимальное количество подряд неверных вводов
failure_count_intervalintervalВремя, через которое счетчик ошибок сбрасывается
check_syntaxbooleanВключена ли синтаксическая проверка пароля
min_lengthintegerМинимальная длина пароля
illegal_valuesbooleanПроверка по списку запрещенных паролей
alpha_numericintegerМинимальное количество цифр
min_alpha_charsintegerМинимальное количество букв
min_special_charsintegerМинимальное количество специальных символов
min_uppercaseintegerМинимальное количество прописных букв
min_lowercaseintegerМинимальное количество строчных букв
max_rpt_charsintegerМаксимальное количество подряд идущих одинаковых символов
policy_enablebooleanВключена ли политика
track_loginbooleanВести ли учет времени последней аутентификации
max_inactivityintervalМаксимальное время неактивности пользователя
use_password_strength_estimatorbooleanИспользовать ли библиотеку zxcvbn
password_strength_estimator_scoreintegerМинимально допустимая оценка сложности пароля
custom_functionregprocПользовательская функция проверки пароля
transport_password_life_timeintervalВремя жизни транспортного пароля

Пример использования:

SELECT * FROM recognize_password_policy('user2') \gx

Пример вывода:

-[ RECORD 1 ]---------------------+---------
roleid | user2
reuse_time |
in_history |
max_age | 00:00:00
min_age | 00:00:00

recognize_password_policy_detailed()

Функция выводит эффективную политику для роли с указанием источника (роль или конфигурационный файл), откуда берется значение каждого параметра.

Синтаксис:

  • По имени роли:

    recognize_password_policy_detailed(name name)
    RETURNS record
  • По идентификатору роли:

    recognize_password_policy_detailed_by_id(roleoid oid)
    RETURNS record

Входные параметры:

Название параметраТип значенияОписание
namenameИмя роли
roleoidoidИдентификатор роли

Возвращаемые значения:

Таблица, где каждый столбец — параметр парольной политики и его значение.

Название поляТип значенияОписание
policy_nametextИмя параметра
valuetextЗначение
source_typetextИсточник, из которого получено значение параметра value:
- config — из конфигурационного файлаpostgresql.conf/postgres.yml;
- role — из политики, назначенной роли, указанной в поле source
sourcetextИмя роли, из которой получено значение. Пусто, если source_type = config

Пример использования:

SELECT * FROM recognize_password_policy_detailed('user_12');

Пример вывода:

           policy_name            |  value   | source_type | source
----------------------------------+----------+-------------+--------
reuse_time | 365 days | config |
in_history | | |
max_age | 00:00:00 | config |

select_all_password_policies()

Поиск всех ролей, к которым прикреплены политики паролей.

Синтаксис:

select_all_password_policies()
RETURNS record

Входные параметры:

Отсутствуют.

Возвращаемые значения:

Кортеж со всеми найденными ролями.

unblock_role()

Функция разблокирует пользователя или роль, заблокированную в результате превышения максимального количества неудачных попыток аутентификации или длительной неактивности.

При выполнении изменяются следующие поля для заданного пользователя или роли:

  • failcounter = 0
  • unblockexpirytime = <текущее время на сервере>
  • is_blocked
  • lastfailtime
  • check_lockout_text

Синтаксис:

  • По имени роли:

    unblock_role(role_name name)
    RETURNS record
  • По идентификатору роли:

    unblock_role_by_id(role_name oid)
    RETURNS record

Входные параметры:

Название параметраТип значенияОписание
role_namenameИмя роли
role_nameoidИдентификатор роли

Возвращаемое значение:

Название поляТип значенияОписание
unblock_rolebooleanВсегда возвращает true

Пример использования:

SELECT unblock_role('user_test');

unblock_role
--------------
t
(1 row)

Пользовательская функция проверки пароля

Пользователь может создать PL/pgSQL функцию проверки пароля.

Требования к пользовательской функции.

ТребованиеОписание
Применимо к механизмамСоздание или изменение роли
Не применимо к механизмамАутентификация по паролю
Требования к вызовуПользовательская функция проверки пароля должна вызываться из psql: SELECT func(params);
Прототипboolean functionName (name user_name, text password,integer password_type)
Входные атрибутыuser_name – имя пользователя, password – пароль, password_type – тип пароля: 0 – незашифрованный, 1 – зашифрованный методом md5, 2 – зашифрованный методом scram-sha-256
Требование к возвращаемому значениюtrue — проверка пройдена, false — не пройдена
Важно

Засекреченный пароль приходит, если СУБД Pangolin подключен к сторонней системе аутентификации.