有人把一个普通账号加进了财务审核角色,三个月后对账发现异常。查审计表最新一条是 7 天前的,角色变更接口根本没有写日志,只有登录和删除有记录。日志里能对上时间点,这种反而好排。

审计只覆盖了少数几个高危接口,角色和授权相关的写操作没有埋点。日志表按天分区,保留策略配的是 7 天,历史分区到点直接被删掉。这一点先确认清楚,后面就不用反复试。

SHOW CREATE TABLE audit_log\G
SELECT * FROM audit_log WHERE action = 'ROLE_GRANT' ORDER BY id DESC LIMIT 5;
-- 期望有记录 实际返回空

「权限变更审计缺失」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

处理上按这个顺序:授权类写操作统一走一个切面 记录操作人 目标 变更前后值;审计表保留 180 天 单独放一个库 和应用日志分开;变更记录提供按用户和角色两个维度的查询。

结果对不对很好判断,给账号加一次角色后审计表立刻多一条 ROLE_GRANT,能查到操作人、时间、变更前后的角色列表。

作者 9823189