4、授权与权限管理:RBAC模型、ABAC模型、权限审计

权限管理这事儿,我做了十几年安全,见过太多因为权限没管好而出事的案例。说白了,授权就是决定「谁能干什么」——听起来简单,但落地时坑特别多。今天咱们就聊聊三种主流模型:RBAC、ABAC,以及怎么把权限审计做扎实。

4.1 RBAC模型:角色就是你的「工作牌」

RBAC(基于角色的访问控制)是目前最普及的模型。它的核心思想很简单:把权限打包成角色,再把角色分配给用户。你想想看,公司里不会直接说「张三能访问财务系统」,而是说「财务经理能访问财务系统」——这就是RBAC的思维。

核心三要素:

  • 用户(User):实际操作的人或系统
  • 角色(Role):权限的集合,比如「管理员」「审计员」「普通用户」
  • 权限(Permission):对资源的操作许可,比如「读取订单」「删除用户」

我在项目中遇到过一家创业公司,初期只有20个人,权限直接写死在代码里。后来团队扩张到200人,每次有人离职入职,开发都得改代码——这哪受得了?后来我帮他们切到RBAC,角色定义清楚后,权限管理就变成了「给新人选个角色」这么简单。

RBAC的三种实现层级:

层级 说明 适用场景
RBAC0 基础模型:用户 ↔ 角色 ↔ 权限 小型系统,角色固定
RBAC1 引入角色继承:上级角色自动拥有下级权限 层级分明的组织架构
RBAC2 增加约束:互斥角色、基数限制等 金融、医疗等合规要求高的场景

我的经验:RBAC最怕「角色爆炸」。我曾经见过一个系统有300多个角色,比用户还多。这其实说明角色设计出了问题。我建议角色数量控制在用户数的10%以内,超过这个数就该考虑是不是需要合并角色了。

4.2 ABAC模型:更灵活的「属性驱动」

RBAC有个硬伤:它只能按「你是谁」来授权。但现实中,权限往往还跟「你在哪」「什么时间」「用什么设备」有关。这时候ABAC(基于属性的访问控制)就派上用场了。

ABAC的核心是「属性」——任何能描述用户、资源、环境的信息都可以作为属性。比如:

  • 用户属性:部门、职级、安全等级
  • 资源属性:机密级别、所属项目、创建时间
  • 环境属性:IP地址、访问时间、设备类型

一个典型的ABAC策略示例:

策略:允许访问财务文档
条件:
  - 用户.部门 == "财务部"
  - 用户.职级 >= "高级"
  - 资源.机密级别 <= "机密"
  - 环境.时间 between "09:00" and "18:00"
  - 环境.IP范围 in "公司内网"

你看,这个策略比RBAC精细多了。高级财务人员只能在上班时间、从公司内网访问机密级财务文档——这才叫「精准授权」。

注意:ABAC虽然灵活,但性能开销大。每次访问都要计算策略,如果策略复杂、用户量大,很容易拖垮系统。我建议只在需要细粒度控制的场景用ABAC,其他场景用RBAC就够了。

实际项目中,我经常把RBAC和ABAC混着用。比如:先用RBAC确定「这个角色能访问哪些模块」,再用ABAC在模块内部做细粒度控制。这样既保证了效率,又兼顾了灵活性。

4.3 权限审计:别等出事了才查

权限审计,说白了就是定期检查「谁有什么权限」「这些权限合理吗」。很多公司只在出事之后才翻日志,那时候已经晚了。

权限审计的三个关键点:

  1. 定期审查:至少每季度做一次全量审计,重点看离职人员、转岗人员的权限是否清理干净。
  2. 最小权限原则:每个用户只给完成工作所需的最小权限。我曾经在审计中发现,一个普通运维居然有数据库的DROP权限——这要是手滑一下,后果不堪设想。
  3. 权限变更记录:每次权限变更都要留痕,包括谁申请的、谁审批的、什么时候生效的。

审计报告的核心字段:

字段 说明
用户ID 被审计的用户
当前角色/权限 用户拥有的所有权限
最近一次变更 变更时间、操作人、变更内容
风险评估 是否存在权限过大、权限滥用风险
建议操作 是否需要回收权限、调整角色

嗯,这里要注意:审计不是查完就完了。发现问题后要形成闭环——谁负责整改?什么时候完成?整改后怎么验证?我见过太多审计报告写得很漂亮,但问题一个都没解决。

避坑指南:我曾经帮一家电商公司做审计,发现他们的超级管理员账号有20多个人在用。一问才知道,因为权限申请流程太麻烦,大家干脆共用管理员账号。这其实不是技术问题,是流程问题。后来我帮他们优化了权限申请流程,从「填表等三天」变成「自助申请、主管审批、自动生效」,共用账号的问题就自然解决了。

4.4 三种模型的选型建议

最后聊聊怎么选。我个人的习惯是:

  • 业务稳定、角色清晰 → 用RBAC,简单高效
  • 需要细粒度控制、属性多变 → 用ABAC,灵活但复杂
  • 两者结合 → 大部分场景用RBAC,关键模块用ABAC做补充

记住一点:没有完美的模型,只有适合的模型。别为了炫技而引入ABAC,也别因为怕麻烦而一直用RBAC。权限管理的核心目标就一个——让该访问的人能访问,不该访问的人进不来。

好了,这一章就到这儿。下一章咱们聊聊身份认证的那些事儿,包括多因素认证、单点登录这些实战内容。