Функции управления парольными политиками
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> |
---|---|---|
reusetime | reuse_time(‘<value>’) | \d+ s |
inhistory | in_history(‘<value>’) | \d+ |
maxage | max_age(‘<value>’) | \d+ s |
minage | min_age(‘<value>’) | \d+ s |
graceloginlimit | grace_login_limit(‘<value>’) , grace_li(‘<value>’) | \d+ |
gracelogintimelimit | grace_login_time_limit(‘<value>’) , grace_lti(‘<value>’) | \d+ s |
expirewarning | expire_warning(‘<value>’) | \d+ s |
lockout | lockout(‘<value>’) | true /false |
lockoutduration | lockout_duration() , lduration(‘<value>’) | \d+ s |
maxfailure | max_failure(‘<value>’) | \d+ |
failurecountinterval | failure_count_interval(‘<value>’) , fc_interval(‘<value>’) | \d+ s |
checksyntax | check_syntax(‘<value>’) | true /false |
minlength | min_length(‘<value>’) | \d+ |
illegalvalues | illegal_values(‘<value>’) | true /false |
alphanumeric | alpha_numeric(‘<value>’) | \d+ |
minalphachars | min_alpha_chars(‘<value>’) | \d+ |
minspecialchars | min_special_chars(‘<value>’) | \d+ |
minuppercase | min_uppercase(‘<value>’) | \d+ |
minlowercase | min_lowercase(‘<value>’) | \d+ |
maxrptchars | max_rpt_chars(‘<value>’) | \d+ |
policyenable | policy_enable(‘<value>’) | true /false |
tracklogin | track_login(‘<value>’) | true /false |
maxinactivity | max_inactivity(‘<value>’) | \d+ s |
usepasswordstrengthestimator | use_password_strength_estimator(‘<value>’) , use_zxcvbn(‘<value>’) | true /false |
passwordstrengthestimatorscore | password_strength_estimator_score(‘<value>’) , zxcvbn_score(‘<value>’) | [0-4] |
customfunction | custom_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');
Результат:
Параметр | Значение | Параметр | Значение |
---|---|---|---|
roleid | user2 | min_length | 7 |
reuse_time | 3 days | illegal_values | f |
in_history | 3 | alpha_numeric | 2 |
max_age | 5 days | min_alpha_chars | 2 |
min_age | 2 days | min_special_chars | 3 |
grace_login_limit | 3 | min_uppercase | 4 |
grace_login_time_limit | 4 days | min_lowercase | 1 |
expire_warning | 3 days | max_rpt_chars | 3 |
lockout | t | policy_enable | t |
lockout_duration | 3 days | track_login | t |
max_failure | 2 | max_inactivity | 4 days |
failure_count_interval | 5 days | use_password_strength_estimator | t |
check_syntax | f | password_strength_estimator_score | 4 |
custom_function | testf2 | - | - |
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_time | in_history | max_age | min_age | grace_login_limit | grace_login_time_limit | expire_warning | lockout | lockout_duration | max_failure | failure_count_interval | check_syntax | min_length | illegal_values |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3 days | 3 | 5 days | 2 days | 3 | 4 days | 3 days | t | 3 days | 2 | 5 days | f | 7 | f |
alpha_numeric | min_alpha_chars | min_special_chars | min_uppercase | min_lowercase | max_rpt_chars | transport_password_life_time | track_login | max_inactivity | use_password_strength_estimator | password_strength_estimator_score | custom_function |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | 2 | 3 | 4 | 1 | 3 | 00:00:00 | t | 4 days | t | 4 | testf2 |
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 подключен к сторонней системе аутентификации.