一、权限模型概述:定义、目标与重要性

说实话,做了这么多年权限相关的项目,我每次跟新同事聊起权限模型,大家第一反应都是“不就是角色、资源、动作嘛”。但真正踩过坑的人都知道,权限模型是整个系统的地基——地基没打好,后面的审计、合规、安全全得返工。

今天这一章,咱们先把权限模型这件事掰开揉碎了讲清楚。我不喜欢一上来就念定义,咱们先从一个我亲身经历的真实案例说起。

1.1 一个让我记忆犹新的线上事故

几年前我在一家电商公司做架构升级。当时有个运维同学不小心把"超级管理员"角色赋给了一个新入职的实习生。你也知道,实习生手一抖,把生产库里的用户表 drop 了一半…嗯,还好有快照。事后复盘,问题根源在哪?不是人犯错,是权限模型本身没有做完整性校验——角色定义里没有限制“最小权限原则”,也没有任何审批流。

从那以后,我养成了一个习惯:每做一个系统,先把权限模型画清楚,再用自动化工具跑一遍完整性检查。 权限模型的定义,说白了就一句话:“谁能在什么条件下对什么资源做什么事,以及这些规则之间不能有冲突、不能有缺口、不能有多余。”

1.2 权限模型的核心定义

权限模型由四个基本要素组成,我习惯用 4W1H 来记忆:

要素英文说明
主体 (Who)Subject用户、角色、组、服务账号等
资源 (What)Resource数据、功能、API、菜单、文件等
动作 (How)Action增、删、改、查、执行、审批等
条件 (Where/When)ConditionIP 范围、时间窗口、设备信任等级等

举个例子:仓库管理员 这个角色,可以在 工作日 09:00-18:00 对 入库单 执行 新建/修改/提交 操作。你看,四个要素全齐了。

1.3 权限模型的目标:不只是“能访问就行”

我见过很多团队把权限模型做成一张简单的“用户-权限”关联表,权限模型的目标被严重窄化了。其实,一个合格的权限模型应该满足以下五大目标:

  1. 最小权限 — 每个主体只拥有完成本职工作所需的最少权限。多了就是风险。
  2. 职责分离 — 敏感操作不能由同一个人完成整个流程。比如一个人既做采购审批又做付款执行,那就容易出问题。
  3. 可审计性 — 任何权限的授予、变更、撤销都要有完整的日志,能追溯到底。
  4. 完整性 — 规则之间没有矛盾,没有遗漏,没有死循环(比如角色A继承角色B,角色B又继承角色A)。
  5. 可扩展性 — 业务变化时,模型能在不改动核心架构的前提下支持新的角色、资源、条件。

关键点:完整性是审计的核心关注点。一个权限模型如果存在“幽灵权限”(没有主体引用的权限规则)或者“冲突权限”(同一主体对同一资源既有允许又有拒绝),那完整性审计就直接判定为失败。

1.4 权限模型的常见分类

我在项目中用过好几种权限模型,每种都有自己的适用范围和坑。下面这张表总结了最常见的三种:

模型核心思想适合场景我踩过的坑
DAC (自主访问控制)资源所有者自己决定谁可以访问个人文件共享、小型协作系统权限容易扩散,审计困难,离职员工可能遗留“自己加的”权限
MAC (强制访问控制)系统强制按安全标签分级,用户不能改变军事、政府、金融高安全系统灵活性极差,改一次策略要全局审批
RBAC (基于角色的访问控制)用户通过角色获得权限,角色与权限解耦企业中后台、SaaS、OA 系统角色膨胀后成为“角色沼泽”,需要定期做角色完整性审计

目前业界最主流的是 RBAC,但很多团队对它的理解只停留在“用户-角色-权限”三层结构上。其实 RBAC 还分 RBAC0、RBAC1、RBAC2、RBAC3 四个级别,差别在于是否支持角色继承、角色互斥、会话控制等。咱们后面的课程会详细拆解。

1.5 为什么权限模型完整性审计如此重要?

讲个我自己的教训。以前有个项目上线前走得急,权限模型没做审计,直接复制了另一个系统的角色配置。结果上线第三天就出了安全事故——一个普通客服竟然能查看到全站用户的手机号脱敏前数据。排查下来发现,系统里有个“客服主管”角色继承了一个废弃的“管理员”角色,而那行继承关系当年写死了,没人清理。

你看,权限模型如果没人审计,就像一座大楼没做结构验收就住进去。完整性审计就是要发现这些隐患:

  • 冗余权限:某个角色有权限但从未使用过,或者权限覆盖了其他角色已有权限。
  • 遗漏权限:某个角色缺少完成本职工作必需的某项权限(比如可以新建订单但不能修改,业务上根本讲不通)。
  • 冲突权限:同一条规则既允许又拒绝,执行器不知道听谁的。
  • 孤儿权限:权限规则定义了,但没有任何主体或角色引用它,白白占用存储和计算。
  • 越权继承:低安全级别角色通过继承链获得了高安全级别的权限。

⚠️ 注意:完整性审计不是一次性的事。我建议每个版本发布前都要做一次自动化完整性扫描。尤其是当你修改了角色继承关系、新增资源或批量导入用户时,一定要跑一遍。

1.6 权限模型完整性审计的知识体系全景

到这儿,咱们把权限模型的定义、目标和重要性都过了一遍。为了让你脑子里有个全局地图,我专门画了一张知识体系结构图。它把整个课程涉及的核心模块串了起来:

权限模型完整性审计知识体系结构图 权限模型完整性审计 — 知识体系全景 权限模型完整性审计 1. 定义与基础 2. 模型类型对比 3. 完整性审计方法 4. 落地与工具 主体/资源/动作/条件 五大目标 DAC / MAC / RBAC RBAC0~RBAC3 冗余/遗漏/冲突/孤儿 继承链/互斥检查 自动化扫描策略 开源工具/自建平台 CI/CD 流程嵌入 本课程30章将依次覆盖以上所有模块,每个模块都配有实战案例、代码审计和自动化检查脚本。

💡 学习建议:我建议你把这张图存在本地,每学完一章就回顾一下它在全景中的位置。这样不会迷路。

1.7 一个小测试:你的权限模型健康吗?

在我开始讲后面的审计细节前,你可以在自己负责的系统里跑一个小检查。不复杂,三步:

  1. 导出当前所有的角色定义和权限规则(最好用 JSON 或 YAML 格式)。
  2. 写一个简单的脚本,统计一下角色总数、权限规则总数、没有绑定用户的角色数量。
  3. 看看有没有权限规则里提到了一个已经不存在的资源?或者有没有两个角色拥有完全相同的权限(重复定义)?

如果你发现其中任意一个指标超过 10%,那你的权限模型很可能已经有些“亚健康”了。别担心,这很正常——我见过的生产系统,90% 都有这类问题。后面几章我会教你如何系统性地做一次完整的完整性审计,并且用自动化工具来维护健康状态。

1.8 本章小结

咱们这一章把权限模型的概念框架打好了。现在你应该能回答这几个问题:

  • 权限模型的四要素是什么?
  • 权限模型要满足哪五大目标?
  • 为什么完整性审计不是可有可无的“锦上添花”?
  • 常见的模型类型(DAC、MAC、RBAC)各自的特点是什么?

从下章开始,我们会深入到每种模型的具体结构,先拿 RBAC 开刀——把它每个版本的定义、区别、以及审计要点讲清楚。到时候我会带着一段真实的 RBAC 配置代码,咱们一句一句分析完整性坑在哪里。