一笔已发货订单被改成已关闭,三天后财务问起来,订单表只有 update_time,操作日志里没有任何记录,谁也说不清是谁改的。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
INSERT INTO order_audit(order_no, op_user, field, old_val, new_val, reason)
VALUES ('20260301012', 'ops_zhang', 'status', 'SHIPPED', 'CLOSED', '客户取消');
后台修改入口直接 update 订单表,既没走状态机也没落审计表。数据库账号是共用的,binlog 里能看到语句,看不到具体操作人。这一点先确认清楚,后面就不用反复试。
「数据修正审计」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。
改完隔一天再看一次,当场正常不代表能稳住。
具体做法是,后台改单走统一入口 记录操作人 工号 时间 原值 新值;审计表和业务更新放在同一个事务里;改单接口加二次确认 要求填原因;共用账号的 update 权限收回 后台只走应用账号。
改完照着核一遍,再改一笔订单 审计表里能按单号查到操作人和前后值 共用账号的直连 update 已被收回。
