Индивидуальная практическая работа по проектированию реляционной подсистемы аутентификации (пользователи, роли, журнал аудита) и макета диалогового окна формы входа (Login Dialog).
Разработайте SQL DDL-скрипты для таблиц: roles (роли), users (пользователи: id, login, salt, password_hash, role_id, is_active, created_at) и audit_logs (журнал аудита: id, user_id, attempted_login, event_type, ip_address, event_time). Предусмотрите корректные типы данных, ограничения NOT NULL, UNIQUE, первичные и внешние ключи.
Опишите графический/структурный макет диалогового окна Login Dialog. Укажите состав элементов интерфейса, их атрибуты, правила маскирования пароля, выпадающий список филиалов складов, состояния кнопки «Войти» (Disabled при пустых полях и во время отправки запроса) и текст системных сообщений.
1) Почему для хранения паролей выбрана связка salt + password_hash, а не простой MD5?
2) Какое сообщение должно отображаться при вводе неверного пароля к существующему логину и почему?
3) Что произойдет с журналом аудита при удалении или деактивации пользователя через is_active = FALSE?
Разработайте SQL DDL-скрипты для таблиц: roles, users (с полями totp_secret или is_2fa_enabled, salt, password_hash, is_active, failed_attempts) и audit_logs (с фиксацией событий успешного входа, сбоя 1 фактора, сбоя 2FA-кода).
Разработайте макет экранной формы авторизации медперсонала. Опишите переход между Шагом 1 (ввод табельного номера и пароля) и Шагом 2 (ввод 6-значного кода 2FA с обратным отсчетом времени жизни токена в 30 секунд), обработку тайм-аута и нейтральные сообщения об ошибках.
1) Почему табельный номер сотрудника должен храниться в типе VARCHAR, а не INTEGER?
2) Каким образом двухфакторная аутентификация защищает медицинские данные в случае утечки хэша пароля?
3) Зачем в таблице users необходим счетчик failed_attempts и поле временной блокировки locked_until?
Разработайте SQL DDL-скрипты для таблиц: roles, users (с поддержкой криптографической соли, хэша алгоритма bcrypt/SHA-256, флагом блокировки терминала) и audit_logs (фиксация IP-адреса рабочего места, ID кассового аппарата и типа операции).
Разработайте макет экранного диалога авторизации оператора терминала. Опишите схему размещения поля табельного номера, замаскированного поля PIN-кода/пароля, матрицы виртуальных цифровых кнопок 0–9 с функцией «Перемешать», кнопки сброса ввода и кнопки авторизации.
1) Почему в банковском секторе хэш bcrypt предпочтительнее быстрого алгоритма SHA-256?
2) Каким образом перемешивание клавиш на экранной клавиатуре предотвращает атаку Shoulder Surfing?
3) Почему при 3 подряд неверных вводах PIN-кода терминал должен блокироваться с записью в audit_logs?
Разработайте SQL DDL-скрипты для таблиц: roles, users (с полями email, salt, password_hash, role_id, is_active), таблицы временных токенов восстановления password_resets (id, user_id, token_hash, expires_at, is_used) и таблицы журнала audit_logs.
Разработайте макет диалога авторизации портала с кнопкой «Войти», чекбоксом «Запомнить меня» и ссылкой «Забыли пароль?». Опишите всплывающее модальное окно запроса email для сброса пароля, нейтральное сообщение подтверждения и защиту от перечисления email.
1) Почему токен сброса пароля в таблице password_resets должен храниться в виде хэша, а не открытой строки?
2) Какое сообщение должен вывести интерфейс после отправки формы «Забыли пароль», если введенный email отсутствует в базе данных?
3) Какой срок жизни (TTL) должен иметь токен сброса пароля и почему он должен становиться недействительным после первого использования?