Назначение резервного задания: Данное задание предназначено для самостоятельного освоения и дистанционной сдачи практического этапа связывания формы аутентификации с реляционной базой данных (в случае пропуска аудиторного занятия или по индивидуальному графику).
Спроектируйте SQL-скрипт создания двух таблиц: app_users и security_audit_log со всеми необходимыми индексами, ограничениями целостности и полями защиты от Brute-force атак (failed_attempts, locked_until, password_expiry).
Разработайте хранимую процедуру/функцию verify_user_login(p_login, p_password, p_ip_address), которая строго реализует 5-этапный алгоритм:
AUTH_FAILURE и возврат ошибки «Неверный логин или пароль»).locked_until > CURRENT_TIMESTAMP): если активно — отказ со статусом ACCOUNT_LOCKED.is_active = FALSE): отказ со статусом ACCOUNT_DEACTIVATED.SHA256(p_password || salt) и сравнение с эталонным password_hash.failed_attempts = failed_attempts + 1; если >= 3 → установка locked_until = CURRENT_TIMESTAMP + INTERVAL '15 minute', логирование.failed_attempts = 0, locked_until = NULL, запись AUTH_SUCCESS в лог, возврат роли.Напишите SQL-запрос выборки из таблицы security_audit_log, позволяющий специалисту службы безопасности выявить потенциальные атаки перебора (IP-адреса, с которых за последние 15 минут зафиксировано более 5 неудачных попыток входа с разными или одинаковыми логинами).
failed_attempts в ноль?