资金安全:账户防篡改与操作留痕体系 — editorial cover photo

账目被改就是事故:防篡改与全留痕

资金系统最怕"账目被改"——防篡改、全留痕、可审计是底线。

2025年9月23日·返回文章列表
文章大纲

普通业务数据错了,直接 UPDATE 修掉就行。资金数据不一样,改了就有篡改嫌疑,不改就是错账挂着。资金系统面对的是一个悖论式的约束,既要让错误能被纠正,又绝不允许账目被悄无声息地改动。化解这个悖论的思路是让每一笔账改不了、藏不住、查得到。

资金安全的核心命题可以浓缩成一句话,让篡改变得不可能,或者必然被发现。这两条只要满足一条,资金系统的可信度就有了底。下面这套体系,就是围绕怎么让篡改必然被发现来搭建的。

流水只增不改,错误用红冲纠正

资金流水表设计成只增不改的,应用层只有 INSERT 权限,没有 UPDATE 和 DELETE。一笔流水一旦落库,就成了历史的一部分,谁都不能动。

那记错了怎么办。答案是红冲,会计准则里的标准做法。记错的那笔流水原样保留,另记一笔等额的反向流水把它冲销,再记一笔正确的。三条流水摆在一起,错误、冲销、更正的全过程清清楚楚。这比直接改掉错误记录要笨拙,但它的价值在于历史的完整性。任何事后审计都能还原出当时到底发生了什么,而不是只看到一个被粉饰过的最终结果。

流水绝不删除

资金流水一旦写入,即便记错也不能删。删掉就是篡改,审计断了链。更正只能红冲,记一笔等额反向流水冲销错误,再记正确流水。三条流水都在,完整还原记错到发现到更正的全过程。这是会计准则,也是资金系统的铁律,没有例外。

权限上要进一步收紧。应用连 DELETE 都不应该有,只有专门的审计归档岗在合规授权下才能清理过期数据。把删数据的权力从开发手里拿走,是从制度上断掉篡改的途径。

PlantUML
正在加载图表…
PlantUML diagram

图:流水只增不改与红冲纠正——错误用反向流水冲销而非删除

操作留痕,把每一次改动都记下来

流水只增不改管的是账户余额这种核心数据。但资金系统里还有大量需要变动的数据,配置、规则、状态,这些同样不能改了就改了。任何资金相关的写操作,都要同步落一条审计日志,记录五样东西,谁操作的、什么时候、改了哪个字段的什么值、来源 IP 和设备、为什么改附审批单号。

审计日志的存储必须独立于业务库。这是为了防止同一个有应用写权限的人既改了业务数据又顺手抹掉日志。业务库应用可读写,审计库应用只写不改不删。金融场景再进一步用 WORM 存储,写一次读多次,日志落盘后任何人无法修改,满足监管要求日志留存五到七年的硬约束。

审计日志和业务变更的关系有个设计取舍。最安全的是同事务一起写,保证要么都成功要么都失败,但代价是业务事务变重。退一步异步写,性能好但存在日志丢失的窗口,业务成功了日志没记上。多数系统折中,核心资金操作同事务写日志,非核心的异步补。

PlantUML
正在加载图表…
PlantUML diagram

图:操作留痕架构——审计库独立存储,应用只写不改不删,金融场景上 WORM

双人复核,给高风险操作加一道人审

有些操作的风险高到不能一个人说了算,手动调账、大额退款、对外出款都属于这一类。这类操作走双人复核流程,发起人提交后进入待复核状态,由另一个有权限的人审核通过才真正执行。

双人复核防的是单人误操作和恶意操作两个方向。误操作好理解,多了一个人把关。防恶意更关键,一个人如果有权限既发起又执行调账,理论上可以悄悄把别人账户的钱挪走。两个人的留痕让这种操作留下双份证据,权责清晰。

双人复核有成本,它让操作变慢,大促或紧急情况下可能成为瓶颈。所以不能一刀切所有操作都双人,只卡高风险的那一小撮。判断标准是看这个操作能不能被对账发现、损失能不能追回,不能发现的、追不回的,必须双人。

重算校验,篡改必然露馅的关键一招

前面这些手段都在事前和事中。但万一有人绕过了所有权限控制直接改了库呢。重算校验就是兜底的那一招。

定时任务把每个账户的所有流水求和,算出一个理论余额,再和表里记录的当前余额比对。对得上说明数据没被动过,对不上就是有人篡改或有 bug,立刻冻结核查。

这一招的厉害之处在于,它瞄准的是篡改者的内在矛盾。篡改者可能改得动余额表,但改不动所有流水表,因为流水是只增不改的,量大且分散。只要他没把所有相关流水都同步改掉,重算就对不上。而要同步改掉所有流水,工作量极大且必然留下更明显的痕迹。这就是让篡改必然被发现的机制,它放弃堵住每一条篡改路径的徒劳做法,转而让任何篡改行为都通不过重算这道独立校验。

PlantUML
正在加载图表…
PlantUML diagram

图:重算校验兜底机制——余额可改、流水难改,求和比对让篡改必然暴露

外部锚点,让本方数据可被交叉验证

重算校验验的是本方内部的自洽。但内部自洽不等于真实正确,如果篡改者把流水和余额一起改得严丝合缝,内部重算看不出来。这时需要外部锚点。

把本方账和银行账、第三方通道账交叉比对。银行是权威外部源,本方和银行对不上,以银行为准核查。这种外部锚点让本方的篡改变得几乎不可能,因为篡改者得同时改掉本方数据和银行那边的记录,而银行系统他根本碰不到。

多方对账的成本是每方都要对,复杂度高,但它是资金系统可信度的最后一道证明。我接触过的风控平台,发票这种 TB 级数据虽然存在 HBase 大宽表里查询,但资金层面的核验照样要走多方对账,因为单方数据的自洽永远不够,必须有一个自己改不了的外部参照系。

权限最小化与职责分离

技术上防篡改之外,权限制度是另一条腿。核心原则是职责分离,开发不能碰生产数据,运维不能改业务逻辑,审计独立于前两者。最小权限要求只授业务必需的权限,定期回收过期的。高危权限如 DB 写权限、资金操作权限,单独审批且双人授权。再定期审查谁握着什么权限,异常授权自动告警。

这套权限设计听起来繁琐,但它和前面的技术手段是配套的。技术手段假设坏人拿不到超级权限,权限制度就是确保这个假设成立。两者缺一不可,资金安全宁可过度防御,因为一次篡改或资损事件对信任的打击是毁灭性的,重建信任的成本远高于建防线的成本。

Continue Reading

关联文档推荐

查看全部
资金对账自动化:差错发现与处理闭环 — editorial cover photo跨境支付合规:KYC、AML 与外汇监管落地 — editorial cover photo支付资损防控:从事前到事后全链路防线 — editorial cover photo
作者:archy.shawn
声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。