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 权限审计:别等出事了才查
权限审计,说白了就是定期检查「谁有什么权限」「这些权限合理吗」。很多公司只在出事之后才翻日志,那时候已经晚了。
权限审计的三个关键点:
- 定期审查:至少每季度做一次全量审计,重点看离职人员、转岗人员的权限是否清理干净。
- 最小权限原则:每个用户只给完成工作所需的最小权限。我曾经在审计中发现,一个普通运维居然有数据库的DROP权限——这要是手滑一下,后果不堪设想。
- 权限变更记录:每次权限变更都要留痕,包括谁申请的、谁审批的、什么时候生效的。
审计报告的核心字段:
| 字段 | 说明 |
|---|---|
| 用户ID | 被审计的用户 |
| 当前角色/权限 | 用户拥有的所有权限 |
| 最近一次变更 | 变更时间、操作人、变更内容 |
| 风险评估 | 是否存在权限过大、权限滥用风险 |
| 建议操作 | 是否需要回收权限、调整角色 |
嗯,这里要注意:审计不是查完就完了。发现问题后要形成闭环——谁负责整改?什么时候完成?整改后怎么验证?我见过太多审计报告写得很漂亮,但问题一个都没解决。
避坑指南:我曾经帮一家电商公司做审计,发现他们的超级管理员账号有20多个人在用。一问才知道,因为权限申请流程太麻烦,大家干脆共用管理员账号。这其实不是技术问题,是流程问题。后来我帮他们优化了权限申请流程,从「填表等三天」变成「自助申请、主管审批、自动生效」,共用账号的问题就自然解决了。
4.4 三种模型的选型建议
最后聊聊怎么选。我个人的习惯是:
- 业务稳定、角色清晰 → 用RBAC,简单高效
- 需要细粒度控制、属性多变 → 用ABAC,灵活但复杂
- 两者结合 → 大部分场景用RBAC,关键模块用ABAC做补充
记住一点:没有完美的模型,只有适合的模型。别为了炫技而引入ABAC,也别因为怕麻烦而一直用RBAC。权限管理的核心目标就一个——让该访问的人能访问,不该访问的人进不来。
好了,这一章就到这儿。下一章咱们聊聊身份认证的那些事儿,包括多因素认证、单点登录这些实战内容。