Вариант 3. Банковский терминал: валидация оператора и срок годности пароля
Предметный сценарий: В банковском терминале самообслуживания и расчетно-кассовом модуле операторы имеют доступ к финансовым транзакциям. Стандарты финансовой безопасности требуют: 1) проверку срока действия пароля (password_expiry, не более 90 дней); 2) флаг принудительной смены пароля при первом входе (must_change_password); 3) терминальный журнал аудита.
3.1. Спецификация таблицы банковских операторов с политиками паролей:
Спроектируйте схему: operator_id, terminal_id, password_hash, salt, password_expiry, must_change_password, failed_attempts.
3.2. Логика проверки срока действия пароля и первого входа:
Составьте SQL-процедуру валидации: если пароль верен, но password_expiry < CURRENT_DATE или must_change_password = TRUE, возвращается статус PASSWORD_EXPIRED с перенаправлением на экран смены пароля без выдачи рабочего токена.
3.3. Процедура защищенной смены пароля в СУБД:
Опишите процедуру смены пароля: генерация новой соли, вычисление нового хэша, установка password_expiry = CURRENT_DATE + INTERVAL '90 day', must_change_password = FALSE и запись в аудит.
3.4. Контрольные вопросы по Варианту 3:
1) Почему при смене пароля необходимо генерировать новую соль, а не использовать старую?
2) Какие ограничения на сложность пароля должны проверяться перед записью нового хэша в базу данных?