Это SQL-версия отчёта панели управления по подозрительным входам.
Этот отчёт панели управления содержит сведения о новых входах пользователей, которые подозрительно отличаются от предыдущих входов, за указанный диапазон дат. Выявляя необычные попытки входа, администраторы могут предпринять превентивные меры для защиты учётных записей пользователей и форума от потенциальных угроз безопасности.
-- [params]
-- date :start_date = 2024-01-07
-- date :end_date = 2024-02-08
SELECT
u.id user_id,
u.username,
t.client_ip,
t.user_agent,
t.created_at login_time
FROM user_auth_token_logs t
JOIN users u ON u.id = t.user_id
WHERE t.action = 'suspicious'
AND t.created_at >= :start_date
AND t.created_at <= :end_date
ORDER BY t.created_at DESC
Объяснение SQL-запроса
SQL-запрос работает путём извлечения списка попыток входа, помеченных как подозрительные, в указанном диапазоне дат. Вот подробное описание работы запроса:
- Определение параметров: Запрос начинается с определения двух параметров
:start_dateи:end_dateдля указания периода времени отчёта. Оба параметра даты принимают форматГГГГ-ММ-ДД. - Выбор данных: Запрос выбирает конкретные поля из таблицы
user_auth_token_logs, которая регистрирует сведения о действиях аутентификации пользователей, и из таблицыusers, содержащей информацию о самих пользователях. Выбранные поля включают:u.id(user_id): Уникальный идентификатор пользователя.u.username: Имя пользователя.t.client_ip: IP-адрес, с которого была предпринята попытка входа.t.user_agent: Строка пользовательского агента браузера или устройства, использованного для попытки входа.t.created_at(login_time): Временная метка момента попытки входа.
- Операция соединения: Запрос соединяет таблицу
user_auth_token_logs(t) с таблицейusers(u) по общему полюuser_id, чтобы сопоставить каждую попытку входа с соответствующей информацией о пользователе. - Фильтрация: Запрос фильтрует записи, включая только те попытки входа, которые помечены как
suspiciousв полеactionтаблицыuser_auth_token_logs. Кроме того, он фильтрует записи, включая только те, которые произошли в указанном диапазоне дат (:start_date–:end_date). - Сортировка: Наконец, запрос сортирует результаты по убыванию временной метки
created_at, обеспечивая, чтобы самые последние подозрительные попытки входа были перечислены первыми.
Пример результатов
| user | username | client_ip | user_agent | login_time |
|---|---|---|---|---|
| user_id_example_1 | username_example | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 | Mozilla/5.0 (iPhone; CPU iPhone OS 17_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1 | 2024-01-09T08:18:57.535Z |
| … | … | … | … | … |