# RBAC 基础概念与原理

RBAC密钥边界定义审计实操 - 第1节

1.1 我为什么要从 RBAC 开始讲?

说实话,我刚入行做权限管理那会儿,踩的坑可不少。

几年前我在一家金融科技公司做安全审计,客户系统里用户权限直接写在代码里,改一次权限就要改代码、重新部署。嗯,你想想看,这得多痛苦。每个用户想访问什么资源,全凭开发人员拍脑袋。

后来我接触到了 RBAC(Role-Based Access Control)。说实话,一开始觉得这不就是把用户分组嘛,有什么特别的?

但当我真正在几个大型项目里落地之后,我才明白了——**RBAC 权限管理的基石,也是审计的起点**。权限边界定义不清楚,后面的密钥管控、访问审计全是空的。

核心观点:RBAC 将权限从用户解耦到角色,让授权变得可管理、可审计、可扩展。

1.2 RBAC 的起源与核心思想

1.2.1 它从哪来的?

RBAC 不是凭空想出来的。它有明确的起源。

上世纪 90 年代,美国国家标准与技术研究院(NIST)开始研究一种通用的访问控制模型。当时的系统权限管理基本是两种极端:

  • 自主访问控制(DAC):资源所有者说了算,太随意
  • 强制访问控制(MAC):系统管理员统一管,太死板

我当年做政府项目时就碰到过这种困境——MAC 太严格,一个临时权限申请要走三天流程;DAC 又太松,业务部门自己随意授权,审计时根本查不清。说白了,两个都不适合企业级场景。

1992 年,David Ferraiolo 和 Richard Kuhn 发表了第一篇关于 RBAC 的。后来 NIST 把它标准化了,也就是今天大家熟知的 NIST RBAC 模型。

模型 授权方式 适用场景 我遇到的典型问题
DAC 所有者决定 小团队、临时共享 权限扩散失控
MAC 集中管控 军事、政务高安全域 灵活性太差
RBAC 角色代理 企业通用 审计最友好

1.2.2 核心思想:三句话讲清楚

RBAC 的核心思想其实特别简单。我习惯用三句话来概括:

  1. 不直接把权限给用户——而是把权限打包成角色
  2. 用户只关联角色——用户通过角色拿到权限
  3. 权限变更只改角色——不改用户,不改代码

你想想看,一个运维人员要管理服务器,又要看日志,还得备份数据。如果按旧做法,你得给他配三个独立的权限。但用了 RBAC,你只需要创建一个“运维工程师”角色,把所有权限捆进去,然后把用户丢进这个角色就行。

我的实操经验:在落地 RBAC 时,我建议先定义角色,再绑定权限,最后再分配给用户。这个顺序不能乱,否则容易造成权限冗余。

1.3 核心三元组:用户、角色、权限

1.3.1 它们的关系

用户、角色、权限,这三个东西组成了 RBAC 的铁三角。说白了,权限管理就靠它们三个转。

核心公式:用户 → 角色 → 权限
审计要点:追踪用户→角色→权限的映射关系,每个环节必须可查。

1.3.2 详细拆解

元素 定义 审计关注点 我踩过的坑
用户 系统使用者,自然人 实名、唯一、不可共用 用共享账号,审计查不出谁操作的
角色 权限的集合体 最小权限、职责分离 角色职责不清,权限边界模糊
权限 对资源的操作许可 细粒度、可枚举 权限粒度太粗,一给就给管理员

举个我实际遇到的例子。有个项目,他们给“财务查看”这个角色绑定了“导出所有数据”的权限。你想想看,一个普通会计,按理说只能看自己的账目,结果因为这个角色权限范围太大,他点什么都能看到。后来审计时发现了,好在没出大事。这就是角色定义边界不清的问题。

1.3.3 三者的交互流程

下面这张图,是我认为最清晰的理解 RBAC 的方式。我每次给新团队培训都会先画这个。

RBAC 核心三元组交互图 RBAC 核心三元组交互关系 用户 权限的使用者 角色 权限的集合体 权限 对资源的操作 会话 临时授权上下文 审计关键追踪路径 用户→角色→权限:每一条路径都必须有日志可查

这张图我压箱底用了好多年。每次做 RBAC 审计,我就盯着这三个节点之间的连线看:用户有没有被正确分配到角色?角色有没有被绑定多余的权限?权限本身是否合理?

注意:我曾经在一个客户的系统里发现,有的用户直连了十几个角色,每个角色又重复绑定了相同的权限。这导致权限膨胀,审计日志里全是冗余记录。后来我建议他们做了权限去重,日志量直接少了一半。

1.4 RBAC 的两种模式

在实际项目中,RBAC 不是只有一种玩法。我把它分成两派:

  • 平面 RBAC(Core RBAC):用户直接关联角色,角色绑定权限。没有层级。适合小团队或简单系统。
  • 层级 RBAC(Hierarchical RBAC):角色可以继承其他角色的权限。比如“运维主管”自动继承“运维工程师”的所有权限,再额外加一些管理权限。

我个人习惯在中小项目里用平面 RBAC,结构清晰、审计简单。但一旦系统大了,权限关系复杂了,层级 RBAC 就更有优势,不然你光建角色列表就能把人搞疯。

1.4.1 一个对比

对比项 平面 RBAC 层级 RBAC
角色数量 较多 较少,可复用
权限关系 扁平、独立 可继承、可聚合
维护成本 随角色增长而增长 相对稳定
审计难度 低,直接查角色即可 中等,需要查继承链

1.5 密钥边界定义的起点

说到 RBAC,很多人以为它只跟用户登录和按钮权限有关。但在我这个做密钥边界审计的人看来,RBAC 是密钥管控的基础。

为什么?

因为密钥本身也是一种“资源”。谁可以访问某个密钥?谁可以用这个密钥去解密数据?这些权限边界,如果不通过 RBAC 来定义,你根本没法审计。

关键点:密钥的访问控制,本质上就是 RBAC 的一个子场景。把密钥当成资源,把角色绑定到密钥的解密/加密权限上,用户通过角色拿密钥。这样审计时,你能清晰追踪谁在什么时候、用了什么密钥、做了什么操作。

我记得有个金融机构的案例。他们的密钥管理系统没用 RBAC,工程师人手一个密钥管理员的账号。后来一次内部审计发现,有人用管理员密钥解密了不该看的交易记录。查了半天,根本锁定不了是谁操作的,因为所有人都用同一个角色。如果当时用了 RBAC 做角色隔离,这种问题根本不会发生。

1.6 小结:你需要记住的三件事

说了这么多,我帮你提炼一下最重要三个点:

  1. 用户、角色、权限是铁三角——记住它们的顺序别乱:用户 → 角色 → 权限
  2. 角色是核心——不要把权限直接绑用户,永远通过角色转一手
  3. 审计靠关系链——查用户→角色→权限的映射,一步都不能少

我的个人习惯:每次新项目落地 RBAC,我会先建一个简单的 Excel 表,把用户、角色、权限三个字段列出来,手动走一遍流程。确保没有死逻辑后才进代码。这一步虽然土,但有效,能避免很多后期返工。