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

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