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

Задание 1: Управление парольными политиками

Просмотр настроек политик​

Информация о парольных политиках и их характеристиках хранится в таблице pg_pp_policy, соответственно добавление и удаление политик напрямую изменяет объекты данной таблицы.

Для просмотра настроек парольной политики, которые были применены к пользователю (роли), можно использовать функции:

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

Для вывода всех политик есть функция select_all_password_policies().

Хотите больше информации о парольной политике?

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

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

Создание и изменение политики​

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

Парольная политика применяется к конкретным ролям. Политики связываются с ролью через внешний ключ roloid таблицы pg_pp_policy, соответствующий полю oid таблицы pg_authid, из которой можно получить названия имеющихся политик:

Таблица pg_authid:

postgres@postgres=# SELECT oid, rolname FROM pg_authid;
oid | rolname
------+----------------------------
6171 | pg_database_owner
6181 | pg_read_all_data
6182 | pg_write_all_data
3373 | pg_monitor
3374 | pg_read_all_settings
3375 | pg_read_all_stats
3377 | pg_stat_scan_tables
4565 | pg_read_all_perfinsight
4569 | pg_read_server_files
4570 | pg_write_server_files
4571 | pg_execute_server_program
4200 | pg_signal_backend
4544 | pg_checkpoint
4549 | pg_create_plpgsql_language
4564 | pg_read_all_tracing
4562 | pg_tracing
10 | postgres
16388 │ test_user

Таблица pg_pp_policy:

postgres@postgres=# SELECT roloid FROM pg_pp_policy;
roloid
--------
16396
16395
16394
10
16389
16388
16387
16397
Сведения

Сейчас ваша таблица pg_pp_policy пуста, так как мы еще не настроили парольные политики для ролей.

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

  • set_role_policies — по имени роли (rolname);
  • set_role_policies_by_id — по идентификатору роли (roloid).

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

  • enable_policy - используется для активации парольной политики;
  • enable_policy_by_id - активирует политику по идентификатору роли.
А как изменять парольную политику?

Под изменением политики подразумевается корректировка существующих правил (например, изменение минимальной длины или требований к символам).

Изменение парольных политик осуществляется с помощью функций по созданию парольных политик.

Удаление и деактивация политики​

Под удалением политики подразумевается полное удаление конкретного набора правил.

Внимание!

Политика (запись в таблице pg_pp_policy) не может быть удалена, если она связана хотя бы с одной учетной записью.

Аналогично временной активации, доступно временное отключение применения определенных политик:

  • disable_policy - используется для деактивации парольной политики;
  • disable_policy_by_id - деактивирует политику по идентификатору роли.

Аудит действий с паролями и диагностика​

Анализ действий с паролями позволяет отслеживать критически важные события безопасности.

На постоянной основе в журнале аудита Pangolin фиксируются и помечаются тегом AUDIT:

  • смена пароля (в том числе с транспортного на постоянный);
  • сообщения системы о нарушении парольных политик.

Блокировка пользователя является аварийной ситуацией, сообщения о которой пишутся в журнал:

Сообщения журнала

Сообщение

Расшифровка

Решение

User blocked: too many login fails

Пользователь заблокирован из-за превышения счетчика неудачных аутентификаций

Пользователь будет разблокирован, когда пройдет lockoutduration с момента последней неудачной аутентификации. Пользователь может быть разблокирован с помощью команд unblock_role и unblock_role_by_id

Password was expired

Пользователь заблокирован из-за просроченного пароля

Сменить пароль пользователя

Role blocked cause long inactivity

Пользователь заблокирован из-за долгой неактивности

Пользователь может быть разблокирован с помощью команд unblock_role и unblock_role_by_id

Password will expire in {интервал}

Предупреждение об оставшемся времени до обязательной смены пароля

–

Password was expired. {число} grace logins left

Время жизни пароля превышено. Осталось <число> входов, после которых пользователь будет заблокирован

–

Password was expired. Grace period ends in {интервал}

Время жизни пароля превышено. Остался {интервал}, по истечении которого пользователь будет заблокирован

–

Для того, чтобы прочитать лог-файл, удобно использовать команду less:

[postgres@ServerName ~]$ less /pgerrorlogs/06/postgresql-{year}-{month}-{day}_*.log
...

2025-07-22 13:29:36.215 MSK [923] LOG: AUDIT: SESSION, CONNECTION, FAILED,database = postgres,user = test_user

2025-07-22 13:30:20.426 MSK [926] ERROR: Syntax check fail: minimum length for password is 8 Syntax check fail: minimum number of special characters for password is 1 Syntax check fail: minimum number of uppercase characters for password is 1

2025-07-22 13:30:20.426 MSK [926] STATEMENT: alter role test_user encrypted password ***;

2025-07-22 13:30:50.448 MSK [926] ERROR: Syntax check fail: minimum number of uppercase characters for password is 1

2025-07-22 13:30:50.448 MSK [926] STATEMENT: alter role test_user encrypted password ***;

2025-07-22 13:31:10.422 MSK [931] LOG: AUDIT: SESSION, CONNECTION, FAILED,database = postgres,user = test_user

...

Подведем итоги​

Вопрос 1

Вопрос 1: Могут ли парольные политики быть временно деактивированы?

Вопрос 2

Вопрос 2: Выделите все сценарии, о которых будет создана запись в журнале аудита