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

Задание 3: Разблокировка пользователя

Для того, чтобы пользователь был заблокирован, необходима авторизация с ошибкой такое количество раз, которое настроено в параметре max_failure.

  1. Подключитесь к серверу виртуальной машины, на которой работаете:

    [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.
  2. Проверьте количество разрешенных неудачных попыток авторизации пользователя до блокировки:

    test_user@postgres=# SHOW password_policy.max_failure;
    ┌─────────────────────────────┐
    │ password_policy.max_failure │
    ├─────────────────────────────┤
    │ 10 │
    └─────────────────────────────┘
    (1 row)

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

  3. Попытайтесь осуществить подключение, вводя некорректный пароль. Повторите действие столько раз, сколько указано в параметре 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
  4. Отследите соответствующие сообщения в системном журнале:

    [postgres@ServerName ~]$ tail /pgerrorlogs/06/postgresql-{year}-{month}-{day}_*.log
    2025-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_user

    2025-07-22 15:02:19.764 MSK [1285] LOG: AUDIT: SESSION, CONNECTION, FAILED,database = postgres,user = test_user

    2025-07-22 15:02:19.764 MSK [1285] FATAL: password authentication failed for user "test_user": Role is blocked due to fail authentication attempts
  5. Подключитесь под пользователем 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 неудачных попыток авторизации.

  6. Разблокируйте пользователя:

    postgres@postgres=# SELECT unblock_role('test_user');
    ┌──────────────┐
    │ unblock_role │
    ├──────────────┤
    │ t │
    └──────────────┘
    (1 row)

    Теперь при выполнении запроса детализированной информации о роли test_user из предыдущего пункта значение поля is_blocked примет значение f (false). Можно повторно подключаться к серверу с корректным паролем.

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

Вопрос 1

Выберете все верные утверждения: