给外包同事开的临时账号配了 expire_at = 2026-03-08,6 月 12 日这个账号仍能登录并下载了 3 份报表。权限表里 expire_at 字段有值,登录日志里没有任何拒绝记录。乍看像缓存或者权限的锅,追下去往往不是。
SELECT id, user_id, expire_at FROM temp_grant WHERE expire_at < NOW(); UPDATE temp_grant SET status = 0 WHERE expire_at < NOW(); SELECT COUNT(*) FROM temp_grant WHERE status = 1 AND expire_at < NOW();
追下去是这么回事:到期时间只是页面上展示的一个字段,登录和鉴权链路都没有读它。定时清理任务写在文档里,实际没有部署,也没有监控它的执行结果。
「临时授权未回收」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
具体做法是,登录时判断 expire_at 过期直接拒绝 提示联系管理员续期;加一个每日任务 把过期授权置为失效并通知负责人;权限列表按到期时间排序 把已过期的标红。
验收就看一点,过期账号登录返回 401 授权已到期,权限列表里已过期记录从 7 条变成 0 条。
