Задание 3: Разблокировка пользователя
Для того, чтобы пользователь был заблокирован, необходима авторизация с ошибкой такое количество раз, которое настроено в параметре max_failure.
-
Подключитесь к серверу виртуальной машины, на которой работаете:
[postgres@ServerName ~]$ psql -U test_user -d postgres -h <IP-Address>Password for user test_user:Pager is used for long output.Border style is 2.Line style is unicode.psql (15.5)Type "help" for help. -
Проверьте количество разрешенных неудачных попыток авторизации пользователя до блокировки:
test_user@postgres=# SHOW password_policy.max_failure;┌─────────────────────────────┐│ password_policy.max_failure │├─────────────────────────────┤│ 10 │└─────────────────────────────┘(1 row)В нашем случае для блокировки необходимо авторизоваться с некорректным паролем 10 раз.
-
Попытайтесь осуществить подключение, вводя некорректный пароль. Повторите действие столько раз, сколько указано в параметре
max_failure.test_user@postgres=# \q[postgres@ServerName ~]$ psql -U test_user -d postgres -h <IP-Address>Password for user test_user:psql: error: connection to server at "<IP-Address>", port 5432 failed: FATAL: password authentication failed for user "test_user"В последнем сообщении мы видим сообщение о том, что лимит попыток для авторизации исчерпан, а роль заблокирована:
[postgres@ServerName ~]$ psql -U test_user -d postgres -h <IP-Address>Password for user test_user:psql: error: connection to server at "<IP-Address>", port 5432 failed: FATAL: password authentication failed for user "test_user": Role is blocked due to fail authentication attempts -
Отследите соответствующие сообщения в системном журнале:
[postgres@ServerName ~]$ tail /pgerrorlogs/06/postgresql-{year}-{month}-{day}_*.log2025-07-22 15:01:58.184 MSK [1279] FATAL: password authentication failed for user "test_user"2025-07-22 15:01:58.184 MSK [1279] DETAIL: Connection matched pg_hba.conf line 6: "host all all 0.0.0.0/0 scram-sha-256"2025-07-22 15:02:16.752 MSK [1284] LOG: AUDIT: SESSION, CONNECTION, FAILED,database = postgres,user = test_user2025-07-22 15:02:19.764 MSK [1285] LOG: AUDIT: SESSION, CONNECTION, FAILED,database = postgres,user = test_user2025-07-22 15:02:19.764 MSK [1285] FATAL: password authentication failed for user "test_user": Role is blocked due to fail authentication attempts -
Подключитесь под пользователем
postgresи запросите детализированную информацию о ролиtest_user:postgres@postgres=# SELECT * FROM pp_password_detailed WHERE roloid = to_regrole('test_user')\gx┌─[ RECORD 1 ]─────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐│ roloid │ test_user ││ failcounter │ 10 ││ lastfailtime │ 2025-07-22 15:11:38.392225+03 ││ gracesuccesscounter │ 0 ││ lastsuccesstime │ 2025-07-22 15:07:09.661655+03 ││ createtime │ 2025-07-22 13:30:59.369096+03 ││ unblockexpirytime │ 2025-07-22 15:06:52.501609+03 ││ istransportpassword │ f ││ is_auth_available │ f ││ is_blocked │ t ││ check_policy_for_max_age │ t ││ check_policy_for_max_age_text │ OK ││ check_policy_for_lockout │ t ││ check_policy_for_lockout_text │ OK ││ check_policy_for_inactivity_check │ t ││ check_policy_for_inactivity_check_text │ OK ││ check_policy_for_password_check │ t ││ check_policy_for_password_check_text │ OK ││ check_lockout │ f ││ check_lockout_text │ Role was blocked with 10 fail authentification attempts. Last fail at 22.07.2025 15:11:38 Role wasn't unblocked. ││ check_inactivity │ t ││ check_inactivity_text │ OK. Inactivity check is off. ││ check_password_age │ t ││ check_password_age_text │ Max password age check passed. Password will expire in 59 days ││ check_policy_for_transport_password │ t ││ check_policy_for_transport_password_text │ OK ││ check_transport_password_life_time │ ││ check_transport_password_life_time_text │ │└──────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘В таблице видно, что параметр
is_blockedпринял значениеt(true), а в полеcheck_lockout_textприведено сообщение о блокировке после 10 неудачных попыток авторизации. -
Разблокируйте пользователя:
postgres@postgres=# SELECT unblock_role('test_user');┌──────────────┐│ unblock_role │├──────────────┤│ t │└──────────────┘(1 row)Теперь при выполнении запроса детализированной информации о роли
test_userиз предыдущего пункта значение поляis_blockedпримет значениеf(false). Можно повторно подключаться к серверу с корректным паролем.