这是管理员登录的仪表板报告的 SQL 版本。
本报告提供了指定日期范围内管理员登录活动的概述,并有助于跟踪管理员何时以及从哪个 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格式的日期。 - 唯一登录:它使用带有
SELECT DISTINCT ON的子查询(t1)来确保client_ip和user_id的每个组合都是唯一的,从而有效地在指定日期范围内为每个 IP 地址的每个管理员提供最近的登录事件。 - 管理员筛选:该查询专门查找
admin标志设置为TRUE的用户,仅关注管理员帐户。 - 与 Users 表联接:子查询重新联接到
users表,以获取相应用户 ID 的用户名。 - 排序:结果按
login_at时间戳降序排序,首先显示最近的管理员登录事件。
输出列如下:
user_id:登录管理员的唯一 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 |
| … | … | … | … |