详解四种经典访问控制模型:DAC、MAC、RBAC与ABAC对比

访问控制模型是信息安全的基础。DAC、MAC、RBAC和ABAC各有优劣:DAC灵活但易泄露,MAC严格但维护成本高,RBAC角色驱动适合企业管理,ABAC细粒度但规则复杂。本文从实操角度解析每种模型的工作原理、典型应用及选型建议。

详解四种经典访问控制模型:DAC、MAC、RBAC与ABAC对比
封面图:ZuCDN · ZuCDN 原创

一、什么是访问控制模型?

访问控制模型是定义主体(用户、进程)对客体(文件、数据库、API)如何授予或拒绝访问权限的规则框架。在实际系统设计中,选择哪种模型直接影响安全性、可维护性和灵活性。下面我们逐一拆解四种经典模型,并结合典型场景说明如何应用。

二、自主访问控制(DAC)

核心逻辑

DAC(Discretionary Access Control)允许客体所有者自主决定谁可以访问其资源。例如在Linux文件系统中,文件所有者可通过chmod命令设置读、写、执行权限给其他用户或组。

操作步骤

  1. 创建文件或资源后,所有者使用chmodchown命令设定权限。
  2. 指定特定用户或组(如chmod u+rwx,g+rx,o-rwx file.txt)。
  3. 其他用户根据权限访问,所有者可随时修改。

典型场景

  • 个人电脑上的文件共享。
  • 小团队协作中临时开放某个文档的编辑权。

限制条件与误区

  • 权限扩散风险:用户可能无意中将资源开放给所有人,造成数据泄露。
  • 无法集中管理:管理员缺乏全局视图,审计困难。
  • 常见误区:认为DAC等同于“任意授予”,实际还需依赖操作系统权限位。

三、强制访问控制(MAC)

核心逻辑

MAC(Mandatory Access Control)由系统强制实施安全标签(如绝密、机密、公开),主体和客体都有标签,只有标签满足预定义规则(如“向下读、向上写”)才允许访问。典型代表是SELinux和Biba模型。

判断依据

系统检查安全等级:主体敏感级≥客体敏感级时允许读;主体敏感级≤客体敏感级时允许写(Bell-LaPadula模型用于保密性)。

典型场景

  • 军事或政府部门处理分级文档。
  • 需要防止数据泄露的高安全环境。

限制条件与误区

  • 配置复杂:需要为每个资源定义标签,维护成本高。
  • 灵活性差:不适合快速变化的业务需求。
  • 常见误区:MAC可以完全阻止非法信息流,但实际仍可能通过隐蔽信道绕过。

四、基于角色的访问控制(RBAC)

核心逻辑

RBAC(Role-Based Access Control)将权限授予角色,用户通过分配角色获得权限。角色之间支持继承和层级,简化管理。例如在OA系统中,“经理”角色可审批报销,“员工”角色只能提交。

实施步骤

  1. 梳理业务角色(如管理员、操作员、审计员)。
  2. 定义每个角色所需的权限集合。
  3. 将用户关联到对应角色(可多角色)。
  4. 通过角色-权限映射实现访问控制。

典型场景

  • 企业ERP、CRM系统。
  • 云平台多租户权限管理(如AWS IAM)。

限制条件与误区

  • 角色爆炸:当权限粒度细且组合多时,角色数量激增。
  • 动态权限不足:无法根据上下文(如时间、地点)动态调整。
  • 常见误区:RBAC只能用于中大型组织,实际上小型系统也可使用简化版(如仅“管理员”和“普通用户”)。

五、基于属性的访问控制(ABAC)

核心逻辑

ABAC(Attribute-Based Access Control)通过评估主体属性、客体属性、环境条件和操作属性的组合来决策。策略通常用规则引擎(如XACML)实现。

判断依据

例如规则:“允许员工在上班时间(9:00-18:00)通过公司内网访问项目文档,但禁止下载敏感文件”。决策引擎检查属性:主体部门=开发、位置=公司IP段、时间=10:00、操作=读取、客体密级=内部。

典型场景

  • 云服务中的细粒度授权(如AWS S3桶策略)。
  • 物联网设备中根据传感器状态控制访问。

限制条件与误区

  • 策略管理复杂:属性维度和规则数量增长可能导致性能下降。
  • 需统一属性目录:属性来源不一致(如HR系统、AD)时整合困难。
  • 常见误区:ABAC可完全取代RBAC,实际上两者可结合使用(如先RBAC定角色,再ABAC做细粒度过滤)。

六、对比总结与选型建议

模型安全性管理成本灵活性适用场景DAC低低高个人、小团队MAC高高低军事、核心数据RBAC中中中企业信息系统ABAC高高高大型、分布式、动态环境

实际项目中,许多系统会混合使用多种模型。例如,前端业务用RBAC控制菜单权限,后端API用ABAC根据请求属性做二次校验。关键是根据业务对安全粒度和运维成本的权衡,避免过度设计。

参考资料

延伸阅读