HR 系统里 3 月 1 日就把工号 10237 标成离职,6 月还能用这个账号登录后台,操作日志里有 47 次访问记录。权限表里该用户的状态字段还是 1。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
SELECT user_id, status, left_at FROM hr_employee WHERE left_at < '2026-03-01'; SELECT id, status FROM sys_user WHERE id IN (10237); UPDATE sys_user SET status = 0 WHERE id = 10237;
离职流程只改了 HR 库,权限库没有同步任务,两边靠人工导出再导入。账号停用也没有放在登录链路上做二次校验,只要密码对就能进。这一点先确认清楚,后面就不用反复试。
「离职账号未停用」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,登录时查一次账号状态 停用直接返回 401 并写审计;用 HR 的离职事件驱动权限库更新 不靠定时全量比对;把长期未登录且已离职的账号拉一份清单 人工复核。
改完照着核一遍,用 10237 登录返回 401 账号已停用,权限表里 status 变成 0,审计表多一条拒绝记录。
