Это SQL-версия отчёта «Dashboard» для входов администраторов.
Данный отчёт предоставляет обзор активности входов администраторов в заданный диапазон дат и помогает отслеживать, когда и с каких IP-адресов администраторы входили в систему Discourse.
--[params]
--date :start_date
--date :end_date
SELECT
u.id user_id,
u.username username,
t1.client_ip as location,
t1.created_at as login_at
FROM (
SELECT DISTINCT ON (t.client_ip, t.user_id) t.client_ip, t.user_id, t.created_at
FROM user_auth_token_logs t
INNER JOIN users u ON u.id = t.user_id
WHERE u.admin = TRUE
AND t.created_at >= :start_date
AND t.created_at <= :end_date
ORDER BY t.client_ip, t.user_id, t.created_at DESC
) t1
JOIN users u ON u.id = t1.user_id
ORDER BY login_at DESC
Объяснение SQL-запроса
SQL-запрос предназначен для получения списка уникальных событий входа администраторов. Он фильтрует и отображает данные на основе следующих критериев:
- Параметры: Запрос принимает два параметра,
:start_dateи:end_date, для указания периода, за который необходимы данные о входах. Оба параметра даты принимают форматYYYY-MM-DD. - Уникальные входы: Используется подзапрос (
t1) сSELECT DISTINCT ON, чтобы гарантировать уникальность каждой комбинацииclient_ipиuser_id, что фактически даёт нам последнее событие входа для каждого администратора с каждого IP-адреса в указанном диапазоне дат. - Фильтр администраторов: Запрос ищет исключительно пользователей, у которых флаг
adminустановлен вTRUE, фокусируясь только на учётных записях администраторов. - Соединение с таблицей users: Подзапрос соединяется обратно с таблицей
usersдля получения соответствующих имён пользователей по идентификаторам. - Сортировка: Результаты сортируются по временной метке
login_atв порядке убывания, показывая сначала самые последние события входа администраторов.
Выводимые столбцы следующие:
user_id: Уникальный идентификатор администратора, выполнившего вход.username: Имя пользователя администратора, выполнившего вход.location: IP-адрес, с которого администратор выполнил вход.login_at: Временная метка входа администратора.
Этот отчёт ценен для целей безопасности и аудита, обеспечивая мониторинг и регистрацию всех входов администраторов.
Пример результатов
| user | username | location | login_at |
|---|---|---|---|
| 1 | admin_user_1 | 123.45.67.89 | 2023-12-13T23:59:55.733Z |
| 2 | admin_user_2 | 123.45.67.89 | 2023-12-14T23:59:45.685Z |
| 3 | admin_user_3 | 123.45.67.89 | 2023-12-15T23:59:43.033Z |
| … | … | … | … |