Рабочий лист: Практическое занятие №9: проект БД и форма входа, этап 1

ОП.08 Основы проектирования баз данных — Тема 4. Проектирование структур баз данных

Индивидуальная практическая работа по проектированию реляционной подсистемы аутентификации (пользователи, роли, журнал аудита) и макета диалогового окна формы входа (Login Dialog).

Выберите назначенный вариант:
✓ Данные успешно сохранены в браузере!

Вариант 1: Информационная система «Оптовый склад» Всего: 4 балла

Предметная область: Корпоративная логистическая система складского распределительного центра. В системе работают четыре категории сотрудников: Кладовщик (приемка и перемещение позиций), Менеджер (оформление расходных накладных), Бухгалтер (финансовый учет и фактуры), Администратор (управление правами и аудит).
Специфика входа: Форма авторизации должна содержать обязательное поле выбора филиала/склада из выпадающего списка, поле логина, скрытие символов пароля точками/звездочками, переключатель видимости пароля и нейтральное уведомление об ошибке.

Задание 1.1. Проектирование реляционных таблиц безопасности (2 балла)

Разработайте 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, первичные и внешние ключи.

Задание 1.2. Проектирование макета диалогового окна формы входа (1 балл)

Опишите графический/структурный макет диалогового окна Login Dialog. Укажите состав элементов интерфейса, их атрибуты, правила маскирования пароля, выпадающий список филиалов складов, состояния кнопки «Войти» (Disabled при пустых полях и во время отправки запроса) и текст системных сообщений.

Задание 1.3. Аналитическое обоснование и самопроверка (1 балл)

1) Почему для хранения паролей выбрана связка salt + password_hash, а не простой MD5?
2) Какое сообщение должно отображаться при вводе неверного пароля к существующему логину и почему?
3) Что произойдет с журналом аудита при удалении или деактивации пользователя через is_active = FALSE?

Вариант 2: Медицинская система поликлиники (2FA) Всего: 4 балла

Предметная область: Единая медицинская информационная система поликлинического отделения. Категории пользователей: Врач (доступ к электронным медицинским картам и назначение лечения), Регистратор (запись пациентов на прием, внесение полисов ОМС), Главврач (контроль стандартов лечения и аналитические отчеты).
Специфика входа: Авторизация медперсонала по уникальному табельному номеру сотрудника (login) и паролю, с последующей обязательной двухфакторной аутентификацией (2FA) через ввод 6-значного одноразового кода (TOTP) для защиты врачебной тайны (152-ФЗ).

Задание 2.1. Проектирование таблиц безопасности с поддержкой 2FA (2 балла)

Разработайте SQL DDL-скрипты для таблиц: roles, users (с полями totp_secret или is_2fa_enabled, salt, password_hash, is_active, failed_attempts) и audit_logs (с фиксацией событий успешного входа, сбоя 1 фактора, сбоя 2FA-кода).

Задание 2.2. Проектирование двухэтапного диалога входа (1 балл)

Разработайте макет экранной формы авторизации медперсонала. Опишите переход между Шагом 1 (ввод табельного номера и пароля) и Шагом 2 (ввод 6-значного кода 2FA с обратным отсчетом времени жизни токена в 30 секунд), обработку тайм-аута и нейтральные сообщения об ошибках.

Задание 2.3. Аналитическое обоснование и самопроверка (1 балл)

1) Почему табельный номер сотрудника должен храниться в типе VARCHAR, а не INTEGER?
2) Каким образом двухфакторная аутентификация защищает медицинские данные в случае утечки хэша пароля?
3) Зачем в таблице users необходим счетчик failed_attempts и поле временной блокировки locked_until?

Вариант 3: Банковский терминал обслуживания Всего: 4 балла

Предметная область: Внутренний терминал расчетно-кассового обслуживания финансовой организации. Роли пользователей: Оператор (прием платежей и открытие счетов), Кредитный_инспектор (верификация кредитных заявок), Контролер (акцепт крупных проводок и лимитов кассы).
Специфика входа: Окно входа оснащено интерактивной виртуальной цифровой экранной клавиатурой (On-Screen Keypad) со случайным перемешиванием позиций клавиш 0–9 при каждом открытии (защита от аппаратных кейлоггеров и подглядывания за пальцами — Shoulder Surfing).

Задание 3.1. Проектирование таблиц безопасности банковского контура (2 балла)

Разработайте SQL DDL-скрипты для таблиц: roles, users (с поддержкой криптографической соли, хэша алгоритма bcrypt/SHA-256, флагом блокировки терминала) и audit_logs (фиксация IP-адреса рабочего места, ID кассового аппарата и типа операции).

Задание 3.2. Проектирование макета диалога с экранной клавиатурой (1 балл)

Разработайте макет экранного диалога авторизации оператора терминала. Опишите схему размещения поля табельного номера, замаскированного поля PIN-кода/пароля, матрицы виртуальных цифровых кнопок 0–9 с функцией «Перемешать», кнопки сброса ввода и кнопки авторизации.

Задание 3.3. Аналитическое обоснование и самопроверка (1 балл)

1) Почему в банковском секторе хэш bcrypt предпочтительнее быстрого алгоритма SHA-256?
2) Каким образом перемешивание клавиш на экранной клавиатуре предотвращает атаку Shoulder Surfing?
3) Почему при 3 подряд неверных вводах PIN-кода терминал должен блокироваться с записью в audit_logs?

Вариант 4: Образовательный портал колледжа Всего: 4 балла

Предметная область: Электронная информационно-образовательная среда (ЭИОС) колледжа. Роли пользователей: Студент (просмотр расписания, сдача заданий), Преподаватель (выставление оценок, загрузка методических материалов), Куратор (мониторинг посещаемости группы), Родитель (контроль успеваемости).
Специфика входа: Форма входа по логину/email с паролем, функцией сохранения сессии «Запомнить меня» и безопасным диалогом сброса забытого пароля («Забыли пароль?») через отправку временного одноразового токена с ограниченным сроком действия.

Задание 4.1. Проектирование таблиц безопасности и токенов сброса (2 балла)

Разработайте 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.

Задание 4.2. Проектирование формы входа и сценария «Забыли пароль» (1 балл)

Разработайте макет диалога авторизации портала с кнопкой «Войти», чекбоксом «Запомнить меня» и ссылкой «Забыли пароль?». Опишите всплывающее модальное окно запроса email для сброса пароля, нейтральное сообщение подтверждения и защиту от перечисления email.

Задание 4.3. Аналитическое обоснование и самопроверка (1 балл)

1) Почему токен сброса пароля в таблице password_resets должен храниться в виде хэша, а не открытой строки?
2) Какое сообщение должен вывести интерфейс после отправки формы «Забыли пароль», если введенный email отсутствует в базе данных?
3) Какой срок жизни (TTL) должен иметь токен сброса пароля и почему он должен становиться недействительным после первого использования?