权限模型发展史:DAC、MAC、RBAC、ABAC概览

做接口安全这么多年,我发现有个问题几乎每个团队都会问:"到底该选哪种权限模型?"说实话,没有万能答案。但理解这些模型是怎么演变过来的,你就能做出更适合自己的选择。

你想想看,权限这件事从计算机诞生那天就存在了。最早的系统压根儿没什么权限概念,谁登录了就能干所有事。后来人们发现这样不行——太危险了。于是各种权限模型陆续登场。嗯,咱们今天就把这四种主流模型捋一遍。

1. DAC – 自主访问控制

DAC 是出场最早的模型。它的核心思想很简单:资源所有者说了算。谁创建了文件,谁就有权决定谁能访问它。典型的例子就是 Linux 的文件权限——chmod 755 这种,owner 可以随意给其他人开权限。

我在早期的一个项目中就吃过 DAC 的亏。当时团队用 DAC 管理 API 的访问权限,每个微服务各自维护自己的权限列表。结果呢?权限分散得一塌糊涂,根本理不清谁给了谁什么权限。最后我们不得不花两周时间重构整个权限体系。

DAC 的致命伤:权限太分散,没法做全局管控。一旦资源多起来,管理成本直线上升。
  • 优点:灵活、实现简单、适合小规模场景
  • 缺点:权限分散、难以审计、容易越权
  • 典型场景:个人文件管理、小型团队协作

2. MAC – 强制访问控制

MAC 走的是另一个极端——系统说了算。用户不能随便给别人授权,所有访问都由系统根据安全标签来强制决定。你想想看,军队里的文件分级就是典型的 MAC 模型:绝密、机密、秘密、普通,每个级别的人只能看对应级别的文件。

我在一个银行项目中见过 MAC 的实际应用。他们的数据按照敏感度打了标签,普通员工连数据库表都看不到,只有特定角色的审批通过后才能访问。安全是安全了,但灵活性确实差了点。

适用提醒:MAC 适合安全等级极高的场景,比如军工、金融核心系统。普通业务系统用 MAC,反而会把自己折腾死。
  • 优点:安全性高、管控严格、适合分级管理
  • 缺点:灵活性差、配置复杂、维护成本高
  • 典型场景:军事系统、政府机密系统、金融核心数据

3. RBAC – 基于角色的访问控制

RBAC 是我个人最喜欢的模型。它的思路很巧妙:不直接把权限给用户,而是通过"角色"来间接关联。说白了,你先定义好角色——比如"管理员"、"运营"、"客服"——然后把权限挂到角色上,最后把用户放进角色里就行了。

我做过一个电商后台项目,就是用的 RBAC。整个系统 200 多个接口,50 多名员工。我们用 RBAC 分了 8 个角色,权限管理一下子清晰了。新员工入职,只需要给他分配一个角色,完事。比起 DAC 那种每人一套权限的方式,简直舒服太多。

RBAC 为什么能成为工业标准? 因为它平衡了安全性和可维护性。角色作为中间层,让权限管理变得可预测、可审计。
  • 优点:管理简单、易于扩展、审计方便、适合中大型系统
  • 缺点:角色爆炸时也头疼、细粒度控制不够灵活
  • 典型场景:企业管理系统、SaaS 平台、API 权限管控

4. ABAC – 基于属性的访问控制

ABAC 是这几年火起来的新思路。它不看角色,也不看所有者,而是看属性——用户的属性、资源的属性、环境的属性。把这些属性组合起来,动态决定能不能访问。举个例子:"允许销售部门的员工在工作时间访问客户订单数据"——这就是 ABAC 的策略。

我曾见过一个团队把 ABAC 玩得特别溜。他们的 API 网关集成了 ABAC 引擎,每次请求来的时候,引擎会根据当前时间、用户部门、资源类型、IP 地址等多个维度做决策。灵活性确实强,但说实话,策略多了以后,维护起来也是真头疼。

// ABAC 策略示例(伪代码)
策略名: "允许销售访问客户订单"
条件:
  用户.部门 == "销售"
  且 资源.类型 == "订单"
  且 环境.时间 在 09:00 ~ 18:00
  且 请求.IP 属于 公司内网
动作: 允许
ABAC 的陷阱:策略太灵活,容易出现权限漏洞。我曾经见过一个 ABAC 策略写得过于复杂,结果运维同学都看不懂,出了问题只能靠猜。
  • 优点:高度灵活、细粒度控制、支持动态场景
  • 缺点:策略复杂、性能开销大、调试困难
  • 典型场景:云平台权限、物联网系统、大型分布式架构

5. 四种模型对比

我把它们放在一起做了个对比,方便你快速参考。

模型 核心思想 优点 缺点 适合场景
DAC 资源所有者控制 简单、灵活 权限分散、难审计 小团队、文件管理
MAC 系统强制标签管控 安全性极高 灵活性差、配置重 军事、金融核心
RBAC 角色间接关联权限 易管理、可扩展 角色爆炸、粒度不够 企业系统、SaaS
ABAC 多属性动态决策 高度灵活、细粒度 策略复杂、性能开销 云平台、IoT
一句话总结:DAC 太散,MAC 太死,RBAC 刚刚好,ABAC 够灵活但也够复杂。选哪个,看你的业务场景和安全要求。

6. 我的选择建议

做了这么多年权限设计,我个人有个习惯:从 RBAC 起步,按需演进。大多数业务系统用 RBAC 就够了,别一上来就上 ABAC,那玩意儿是真的不好驾驭。

如果你正在设计一个接口安全体系,我建议你这么做:

  1. 先画角色——把业务角色梳理清楚,别漏
  2. 再定权限——每个角色需要哪些接口权限
  3. 留好扩展点——未来要升级到 ABAC 也能平滑过渡
  4. 做好审计——不管用哪种模型,日志一定要全
一个小技巧:哪怕你最终选了 RBAC,也建议在架构上预留 ABAC 的扩展接口。等哪天业务复杂了,可以在不改动整体框架的前提下,给特定资源加上属性控制。
权限模型发展演进 DAC 自主访问控制 资源所有者说了算 MAC 强制访问控制 系统标签强制管控 RBAC 基于角色控制 角色关联权限 ABAC 基于属性控制 多维度动态决策 1970s 1980s 1990s 2000s ~ 选择建议 小型系统 / 个人项目 → DAC 够用 安全敏感 / 军工金融 → MAC 保底 企业应用 / API 管理 → RBAC 首选 复杂场景 / 云原生 → ABAC 加持

看到这张图你就能明白,这四种模型不是相互替代的关系,而是不同阶段、不同场景下的最优解。DAC 和 MAC 是早期探索,RBAC 是工业化的产物,ABAC 则是面向未来的灵活方案。