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

Функции управления парольными политиками

set_role_policies (создание или изменение парольной политики)

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

примечание

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

Формат:

  • set_role_policies(name role_name, policy1[, policy2[, ...]]) — по имени роли;
  • set_role_policies_by_id(oid role_id, policy1[, policy2[, ...]]) — по идентификатору роли.

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

  • role_name – имя роли;
  • role_id – идентификатор роли;
  • policy1, policy2, … – значение настройки парольной политики, задается специальной функцией.
Имя настройки парольной политикиФункция и ее синонимы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]+

Пример:

Создадим для пользователя 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 (активация парольной политики)

Формат:

  • enable_policy(name role_name) — по имени роли;
  • enable_policy(oid role_id) — по идентификатору роли.

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

  • role_name – имя роли;
  • role_id – идентификатор роли.

Пример:

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

Команда:

SELECT * FROM enable_policy_by_id('17917');

Пример ответа:

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

disable_policy (деактивация парольной политики)

Формат:

  • disable_policy(name role_name) — по имени роли;
  • disable_policy(oid role_id) — по идентификатору роли.

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

  • role_name – имя роли;
  • role_id – идентификатор роли.

Пример:

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

Команда:

SELECT * FROM disable_policy('user_test');

Пример ответа:

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

recognize_password_policy (вывод парольной политики, примененной для пользователя или роли)

Вывод политики, приписанной этой роли.

Формат:

  • recognize_password_policy(name role_name) — по имени роли;
  • recognize_password_policy_by_id(oid role_id) — по идентификатору роли.

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

  • role_name – имя роли;
  • role_id – идентификатор роли.

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

Таблица с полями:

  • policy_name — имя настройки;

  • value — значение настройки;

  • source_type — источник, из которого получено значение параметра value:

    • config — значение берется из конфигурационного файла postgresql.conf;
    • role — значение берется из политики, назначенной роли, указанной в поле source.
  • source — имя роли, из которой получено значение настройки. Пусто, если значение поля source_type = config.

Команда:

SELECT * FROM recognize_password_policy('user2');

Результат:

ПараметрЗначениеПараметрЗначение
roleiduser2min_length7
reuse_time3 daysillegal_valuesf
in_history3alpha_numeric2
max_age5 daysmin_alpha_chars2
min_age2 daysmin_special_chars3
grace_login_limit3min_uppercase4
grace_login_time_limit4 daysmin_lowercase1
expire_warning3 daysmax_rpt_chars3
lockouttpolicy_enablet
lockout_duration3 daystrack_logint
max_failure2max_inactivity4 days
failure_count_interval5 daysuse_password_strength_estimatort
check_syntaxfpassword_strength_estimator_score4
custom_functiontestf2--

recognize_password_policy_detailed (вывод детализированной информации по примененной парольной политике для пользователя или роли)

Вывод эффективной политики, получившейся в сценарии (выбор политики для пользователя) с указанием, какая политика из какой роли (или из postgresql.conf) действует.

Формат:

  • recognize_password_policy_detailed(name role_name) — по имени роли;
  • recognize_password_policy_detailed_by_id(oid role_id) — по идентификатору роли.

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

  • role_name — имя роли;
  • role_id — идентификатор роли.

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

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

Пример:

Команда:

SELECT * FROM recognize_password_policy_detailed('user_12');

Результат:

reuse_timein_historymax_agemin_agegrace_login_limitgrace_login_time_limitexpire_warninglockoutlockout_durationmax_failurefailure_count_intervalcheck_syntaxmin_lengthillegal_values
3 days35 days2 days34 days3 dayst3 days25 daysf7f
alpha_numericmin_alpha_charsmin_special_charsmin_uppercasemin_lowercasemax_rpt_charstransport_password_life_timetrack_loginmax_inactivityuse_password_strength_estimatorpassword_strength_estimator_scorecustom_function
22341300:00:00t4 dayst4testf2

select_all_password_policies (вывод всех политик)

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

Формат:

select_all_password_policies()

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

Нет

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

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

unblock_role (разблокировка пользователя или роли)

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

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

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

Формат:

  • unblock_role(name role_name) — по имени роли;
  • unblock_role_by_id(oid role_id) — по идентификатору роли.

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

  • role_name – имя роли;
  • role_id – идентификатор роли.

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

Всегда возвращает true.

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

Пользователь может создать 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 подключен к сторонней системе аутентификации.