4. 职责分离:概念、关键场景与冲突矩阵设计

职责分离,圈内人常说的 SoD(Segregation of Duties)。

说白了就是一句话:不能让同一个人从头到尾包办一件敏感事。你想想看,如果一个人既能申请采购、又能审批付款、还能自己核账,那公司离倒闭也就不远了。

我做了这么多年权限审计,见过太多因为职责不分导致的内部舞弊案例。有个客户,财务主管一个人管着网银 U 盾和复核密码,三年挪走了 800 万。老板直到对账才发现。嗯,这就是典型的 SoD 缺失。

4.1 职责分离的核心逻辑

职责分离不是搞不信任,而是用制度保护员工、保护公司。它的底层逻辑就四个字:互相制衡。

一个完整的业务流,应该拆成几个独立环节,交给不同的人去执行。这样,任何一个人想干坏事,都得先串通其他人。串通的成本高了,风险自然就降了。

SoD 的三大目标:

  • 防舞弊:单人无法完成资产盗用或数据篡改
  • 减差错:多人复核,降低无意识操作失误
  • 保合规:满足 SOX、等保、GDPR 等监管要求

我个人习惯把 SoD 分成两类:

  • 职能性 SoD:业务操作层面的分离,比如申请和审批不能是同一个人
  • 技术性 SoD:系统权限层面的分离,比如开发和运维不能共用同一个生产账号

4.2 关键场景:财务、IT、研发

不同业务场景下,SoD 的侧重点完全不同。我挑三个最常出问题的领域来讲。

4.2.1 财务场景

财务是 SoD 的重灾区,也是监管审计盯得最紧的地方。我在项目中遇到过一家上市公司,出纳兼着会计的活,结果把客户回款截留到自己账户,用假银行对账单糊弄了两年。

财务场景的核心冲突对:

角色 A 角色 B 冲突原因
采购申请 采购审批 自己申请自己批,虚报价格无人制约
应付账款录入 付款审批 录入虚假发票并自行批准付款
银行对账 现金管理 对账人可篡改对账单掩盖挪用
总账记账 财务报表编制 记账人可调整科目影响报表结果

我的经验:财务系统里,AP 录入 和 AP 审批 这两个角色必须互斥。如果公司人少,至少要有主管级的事后抽查机制。

4.2.2 IT 场景

IT 部门的 SoD 经常被忽视。很多公司觉得 IT 是技术部门,不会出大问题。其实恰恰相反,IT 掌握着所有系统的超级权限,一旦出事就是系统性风险。

我曾经审计过一家互联网公司,DBA 同时拥有数据库的读写权限和操作系统 root 权限。他直接导出了全量用户数据卖给黑产,公司被罚了 2000 万。

IT 场景的核心冲突对:

角色 A 角色 B 冲突原因
系统管理员 安全审计员 管理员可删除自己的操作日志
数据库管理员 应用管理员 DBA 可直接修改应用数据绕过业务逻辑
网络管理员 安全策略制定 自己定规则自己执行,无制衡
备份管理员 数据恢复审批 可私自恢复数据并泄露

避坑指南:我曾经见过一家公司,把 root 密码写在共享文档里,全部门都能看。这已经不是 SoD 的问题了,这是基本安全意识的缺失。记住:特权账号必须专人专用,密码定期轮换。

4.2.3 研发场景

研发场景的 SoD 比较特殊,因为研发追求效率,权限管得太死会影响开发速度。但该有的制衡不能少。

研发场景的核心冲突对:

角色 A 角色 B 冲突原因
开发人员 代码审核人员 自己写代码自己审核,漏洞无法被发现
开发人员 生产环境部署 可直接将未测试代码推上线
测试人员 版本发布审批 测试人员可绕过缺陷修复流程直接发布
代码提交者 合并到主分支 可绕过 PR 审查直接合入

我的建议:研发环境一定要用 Git 分支权限控制。开发人员只能往 feature 分支提交,合并到 master 必须经过至少一个人 Code Review。这个规则在工具层面就能强制落地。

4.3 冲突矩阵设计

冲突矩阵是 SoD 落地的核心工具。说白了,就是一张表,告诉你哪些角色不能同时赋予同一个人。

设计冲突矩阵,我一般分三步走:

  1. 梳理业务流:把公司所有关键业务流程画出来,找到每个环节的参与角色
  2. 识别冲突对:分析哪些角色组合在一起会产生风险
  3. 定义冲突等级:有些冲突是致命的(红色),有些是警告级别的(黄色)

下面是一个简化的财务冲突矩阵示例:

角色 采购申请 采购审批 收货确认 发票录入 付款审批
采购申请 - ✗ 冲突 ⚠ 警告 ✓ 允许 ✓ 允许
采购审批 ✗ 冲突 - ✗ 冲突 ⚠ 警告 ✓ 允许
收货确认 ⚠ 警告 ✗ 冲突 - ✗ 冲突 ⚠ 警告
发票录入 ✓ 允许 ⚠ 警告 ✗ 冲突 - ✗ 冲突
付款审批 ✓ 允许 ✓ 允许 ⚠ 警告 ✗ 冲突 -

矩阵使用说明:

  • ✗ 冲突(红色):禁止同时赋予,必须由不同人担任
  • ⚠ 警告(黄色):建议分离,如果无法分离需有补偿性控制(如主管抽查)
  • ✓ 允许(绿色):可以赋予同一个人,风险可控

设计冲突矩阵时,有几点要注意:

  • 矩阵要动态更新:业务变了,角色变了,矩阵就得跟着变。我见过有的公司三年前的矩阵还在用,那跟没有一样。
  • 不要过度设计:把所有角色都做成互斥,业务就没法跑了。抓大放小,先管住资金、数据、核心系统。
  • 工具化落地:矩阵设计好了,要在 IAM 系统或应用系统里配置成规则。用户申请权限时自动检测冲突,有冲突直接拦截。

我曾经踩过的坑:给一家金融客户设计矩阵时,我把「交易录入」和「交易复核」设成了互斥。结果发现他们的交易量太大,复核人手不够,导致大量交易积压。后来我们加了一个「紧急复核」角色,由主管临时授权,才解决了问题。所以,矩阵设计一定要考虑实际业务容量。

4.4 职责分离的落地检查清单

最后,我整理了一份 SoD 落地检查清单,你可以在审计时直接拿来用:

检查项 检查要点 检查方法
冲突矩阵是否完整 覆盖财务、IT、研发三大场景 查阅矩阵文档,核对业务流
矩阵是否已工具化 在 IAM 或应用系统中配置了冲突规则 登录系统查看权限申请流程
是否存在一人多角色 抽查高权限用户,看是否同时拥有冲突角色 导出用户权限清单,交叉比对
补偿控制是否有效 对于无法分离的场景,是否有日志审计或主管复核 查看审计日志和复核记录
矩阵是否定期更新 至少每半年 review 一次 查看更新记录和版本历史

嗯,职责分离这部分内容比较多,但核心就一句话:关键业务不能一个人说了算。你回去可以先拿财务流程练练手,画一张冲突矩阵出来,看看你们公司有没有「一人通吃」的情况。

职责分离(SoD)核心逻辑框架 业务流 环节 A:申请 环节 B:审批 环节 C:执行 角色 1:张三 角色 2:李四 角色 3:王五 冲突矩阵检测:角色 1 vs 角色 2 vs 角色 3 结果:通过 / 拦截 / 补偿控制 核心原则:同一业务流的不同环节,必须由不同角色执行 冲突矩阵是 SoD 落地的核心工具,用于检测角色组合是否合规