Отчет по панели управления — входы администратора

Это 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
4 лайка