Функции парольных политик
Функции, представленные в данном разделе, реализованы в рамках функциональности парольных политик.
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
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
rolname | name | Имя роли |
roleid | oid | Идентификатор роли |
policies (policy1, policy2, ...) | record | Значение настройки парольной политики, задается специальной функцией |
Для параметра policies доступны следующие настройки:
| Имя настройки парольной политики | Функция и ее синонимы | 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]+ |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
roleid | regrole | Идентификатор роли |
reuse_time | interval | Время, в течение которого старый пароль сохраняется, и попытка сменить пароль на совпадающий со старым заканчивается ошибкой |
in_history | integer | Максимальное количество сохраненных старых паролей. При достижении максимума добавление еще одного старого пароля приводит к удалению наиболее старого (по createtime) |
max_age | interval | Время жизни пароля, после которого пароль считается истекшим |
min_age | interval | Время, которое должно пройти между двумя изменениями пароля |
grace_login_limit | integer | Максимальное количество аутентификаций, доступных роли после истечения времени жизни пароля |
grace_login_time_limit | interval | Время после окончания действия пароля, в течение которого он продолжает работать |
expire_warning | interval | Время до окончания действия пароля, в течение которого пользователю будет отображаться предупреждение |
lockout | boolean | Признак включенного правила блокировки аккаунта при превышении максимума попыток входа с неверным паролем |
lockout_duration | interval | Время, на которое блокируется аккаунт при превышении максимума попыток входа |
max_failure | integer | Максимальное количество подряд введенных неверных паролей, при достижении которого вызывается блокировка пароля |
failure_count_interval | interval | Время, после которого обнуляется количество неверных вводов пароля |
check_syntax | boolean | Признак включенных правил синтаксической проверки пароля |
min_length | integer | Минимальная длина пароля |
illegal_values | boolean | Признак включенного правила проверки пароля по списку часто используемых |
alpha_numeric | integer | Минимальное количество цифр в пароле |
min_alpha_chars | integer | Минимальное количество букв в пароле |
min_special_chars | integer | Минимальное количество символов в пароле, не являющихся буквой или цифрой |
min_uppercase | integer | Минимальное количество прописных букв |
min_lowercase | integer | Минимальное количество строчных букв |
max_rpt_chars | integer | Максимальное количество повторяющихся символов |
policy_enable | boolean | Признак включенной политики |
track_login | boolean | Запоминать ли время последней аутентификации |
max_inactivity | interval | Время после последней аутентификации, по истечении которого роль будет заблокирована |
use_password_strength_estimator | boolean | Использовать библиотеку zxcvbn для проверки пароля |
password_strength_estimator_score | integer | Минимальная допустимая сложность пароля |
custom_function | regproc | Название пользовательской функции проверки пароля |
transport_password_life_time | interval | Время жизни транспортного пароля |
grace_authid_period | interval | Время после истечения пароля (до блокировки), в течение которого возможна аутентификация |
Пример использования:
Создадим для пользователя 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_name | name | Имя роли |
roleoid | oid | Идентификатор роли |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
roleid | regrole | Идентификатор роли |
reuse_time | interval | Время, в течение которого старый пароль сохраняется, и попытка сменить пароль на совпадающий со старым заканчивается ошибкой |
in_history | integer | Максимальное количество сохраненных старых паролей. При достижении максимума добавление еще одного старого пароля приводит к удалению наиболее старого (по createtime) |
max_age | interval | Время жизни пароля, после которого пароль считается истекшим |
min_age | interval | Время, которое должно пройти между двумя изменениями пароля |
grace_login_limit | integer | Максимальное количество аутентификаций, доступных роли после истечения времени жизни пароля |
grace_login_time_limit | interval | Время после окончания действия пароля, в течение которого он продолжает работать |
expire_warning | interval | Время до окончания действия пароля, в течение которого пользователю будет отображаться предупреждение |
lockout | boolean | Признак включенного правила блокировки аккаунта при превышении максимума попыток входа с неверным паролем |
lockout_duration | interval | Время, на которое блокируется аккаунт при превышении максимума попыток входа |
max_failure | integer | Максимальное количество подряд введенных неверных паролей, при достижении которого вызывается блокировка пароля |
failure_count_interval | interval | Время, после которого обнуляется количество неверных вводов пароля |
check_syntax | boolean | Признак включенных правил синтаксической проверки пароля |
min_length | integer | Минимальная длина пароля |
illegal_values | boolean | Признак включенного правила проверки пароля по списку часто используемых |
alpha_numeric | integer | Минимальное количество цифр в пароле |
min_alpha_chars | integer | Минимальное количество букв в пароле |
min_special_chars | integer | Минимальное количество символов в пароле, не являющихся буквой или цифрой |
min_uppercase | integer | Минимальное количество прописных букв |
min_lowercase | integer | Минимальное количество строчных букв |
max_rpt_chars | integer | Максимальное количество повторяющихся символов |
policy_enable | boolean | Признак включенной политики |
track_login | boolean | Запоминать ли время последней аутентификации |
max_inactivity | interval | Время после последней аутентификации, по истечении которого роль будет заблокирована |
use_password_strength_estimator | boolean | Использовать библиотеку zxcvbn для проверки пароля |
password_strength_estimator_score | integer | Минимальная допустимая сложность пароля |
custom_function | regproc | Название пользовательской функции проверки пароля |
transport_password_life_time | interval | Время жизни транспортного пароля |
grace_authid_period | interval | Время после истечения пароля (до блокировки), в течение которого возможна аутентификация |
Пример использования:
Активация настроек парольной политики для пользователя по идентификатору роли:
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_name | name | Имя роли |
roleoid | oid | Идентификатор роли |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
roleid | regrole | Идентификатор роли |
reuse_time | interval | Время, в течение которого старый пароль сохраняется, и попытка сменить пароль на совпадающий со старым заканчивается ошибкой |
in_history | integer | Максимальное количество сохраненных старых паролей. При достижении максимума добавление еще одного старого пароля приводит к удалению наиболее старого (по createtime) |
max_age | interval | Время жизни пароля, после которого пароль считается истекшим |
min_age | interval | Время, которое должно пройти между двумя изменениями пароля |
grace_login_limit | integer | Максимальное количество аутентификаций, доступных роли после истечения времени жизни пароля |
grace_login_time_limit | interval | Время после окончания действия пароля, в течение которого он продолжает работать |
expire_warning | interval | Время до окончания действия пароля, в течение которого пользователю будет отображаться предупреждение |
lockout | boolean | Признак включенного правила блокировки аккаунта при превышении максимума попыток входа с неверным паролем |
lockout_duration | interval | Время, на которое блокируется аккаунт при превышении максимума попыток входа |
max_failure | integer | Максимальное количество подряд введенных неверных паролей, при достижении которого вызывается блокировка пароля |
failure_count_interval | interval | Время, после которого обнуляется количество неверных вводов пароля |
check_syntax | boolean | Признак включенных правил синтаксической проверки пароля |
min_length | integer | Минимальная длина пароля |
illegal_values | boolean | Признак включенного правила проверки пароля по списку часто используемых |
alpha_numeric | integer | Минимальное количество цифр в пароле |
min_alpha_chars | integer | Минимальное количество букв в пароле |
min_special_chars | integer | Минимальное количество символов в пароле, не являющихся буквой или цифрой |
min_uppercase | integer | Минимальное количество прописных букв |
min_lowercase | integer | Минимальное количество строчных букв |
max_rpt_chars | integer | Максимальное количество повторяющихся символов |
policy_enable | boolean | Признак включенной политики |
track_login | boolean | Запоминать ли время последней аутентификации |
max_inactivity | interval | Время после последней аутентификации, по истечении которого роль будет заблокирована |
use_password_strength_estimator | boolean | Использовать библиотеку zxcvbn для проверки пароля |
password_strength_estimator_score | integer | Минимальная допустимая сложность пароля |
custom_function | regproc | Название пользовательской функции проверки пароля |
transport_password_life_time | interval | Время жизни транспортного пароля |
grace_authid_period | interval | Время после истечения пароля (до блокировки), в течение которого возможна аутентификация |
Пример использования:
Деактивация настроек парольной политики для пользователя по имени роли:
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
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
rolename | name | Имя роли |
roleoid | oid | Идентификатор роли |
Возвращаемые значения:
| Название поля | Тип значения | Описание |
|---|---|---|
roleid | regrole | Идентификатор роли |
reuse_time | interval | Минимальный срок повторного использования старого пароля |
in_history | integer | Количество хранимых старых паролей |
max_age | interval | Время жизни пароля |
min_age | interval | Минимальное время, через которое пароль можно сменить |
grace_login_limit | integer | Количество доступных входов после истечения пароля |
grace_login_time_limit | interval | Время действия пароля после истечения |
expire_warning | interval | Время, в течение которого показывается предупреждение об истечении |
lockout | boolean | Включено ли правило блокировки учетной записи |
lockout_duration | interval | Длительность блокировки учетной записи |
max_failure | integer | Максимальное количество подряд неверных вводов |
failure_count_interval | interval | Время, через которое счетчик ошибок сбрасывается |
check_syntax | boolean | Включена ли синтаксическая проверка пароля |
min_length | integer | Минимальная длина пароля |
illegal_values | boolean | Проверка по списку запрещенных паролей |
alpha_numeric | integer | Минимальное количество цифр |
min_alpha_chars | integer | Минимальное количество букв |
min_special_chars | integer | Минимальное количество специальных символов |
min_uppercase | integer | Минимальное количество прописных букв |
min_lowercase | integer | Минимальное количество строчных букв |
max_rpt_chars | integer | Максимальное количество подряд идущих одинаковых символов |
policy_enable | boolean | Включена ли политика |
track_login | boolean | Вести ли учет времени последней аутентификации |
max_inactivity | interval | Максимальное время неактивности пользователя |
use_password_strength_estimator | boolean | Использовать ли библиотеку zxcvbn |
password_strength_estimator_score | integer | Минимально допустимая оценка сложности пароля |
custom_function | regproc | Пользовательская функция проверки пароля |
transport_password_life_time | interval | Время жизни транспортного пароля |
Пример использования:
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
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
name | name | Имя роли |
roleoid | oid | Идентификатор роли |
Возвращаемые значения:
Таблица, где каждый столбец — параметр парольной политики и его значение.
| Название поля | Тип значения | Описание |
|---|---|---|
policy_name | text | Имя параметра |
value | text | Значение |
source_type | text | Источник, из которого получено значение параметра value: - config — из конфигурационного файлаpostgresql.conf/postgres.yml;- role — из политики, назначенной роли, указанной в поле source |
source | text | Имя роли, из которой получено значение. Пусто, если 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 = 0unblockexpirytime = <текущее время на сервере>is_blockedlastfailtimecheck_lockout_text
Синтаксис:
-
По имени роли:
unblock_role(role_name name)
RETURNS record -
По идентификатору роли:
unblock_role_by_id(role_name oid)
RETURNS record
Входные параметры:
| Название параметра | Тип значения | Описание |
|---|---|---|
role_name | name | Имя роли |
role_name | oid | Идентификатор роли |
Возвращаемое значение:
| Название поля | Тип значения | Описание |
|---|---|---|
unblock_role | boolean | Всегда возвращает 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 подключен к сторонней системе аутентификации.