Задание 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:
- смена пароля (в том числе с транспортного на постоянный);
- сообщения системы о нарушении парольных политик.
Блокировка пользователя является аварийной ситуацией, сообщения о которой пишутся в журнал:
Сообщение | Расшифровка | Решение |
|---|---|---|
| Пользователь заблокирован из-за превышения счетчика неудачных аутентификаций | Пользователь будет разблокирован, когда пройдет |
| Пользователь заблокирован из-за просроченного пароля | Сменить пароль пользователя |
| Пользователь заблокирован из-за долгой неактивности | Пользователь может быть разблокирован с помощью команд |
| Предупреждение об оставшемся времени до обязательной смены пароля | – |
| Время жизни пароля превышено. Осталось <число> входов, после которых пользователь будет заблокирован | – |
| Время жизни пароля превышено. Остался | – |
Для того, чтобы прочитать лог-файл, удобно использовать команду 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
...