3. RBAC高级特性

基础 RBAC(RBAC0)仅定义了用户-角色-权限的三元关系。在实际企业权限治理中,往往需要更精细的层级结构和约束规则。NIST 标准在 RBAC0 之上扩展了三个高级模型:RBAC1(角色继承)、RBAC2(约束模型) 和 RBAC3(统一模型),并引入了 动态职责分离(DSD) 机制。

3.1 RBAC1:角色继承模型

角色继承(Role Hierarchy)允许一个角色自动获得其父角色的所有权限,形成偏序关系。继承关系分为两类:

  • 通用继承:支持多继承,一个子角色可继承多个父角色的权限。
  • 受限继承:仅支持单继承(树形结构),避免权限来源混乱。
核心价值:消除权限冗余。例如“高级工程师”继承“工程师”的所有权限,只需定义增量权限即可。
RBAC1 角色继承示例(通用继承) 系统管理员 安全审计员 运维主管 应用管理员 初级审计员 值班运维 应用操作员 子角色自动继承父角色的所有权限,箭头方向表示“继承自”

3.2 RBAC2:约束模型

RBAC2 在 RBAC0 基础上增加了约束规则,防止权限滥用或冲突。核心约束包括:

约束类型 说明 典型场景
互斥角色(SSD) 同一用户不能同时拥有两个互斥角色 出纳员与会计员不能由同一人担任
基数约束 限制角色可被分配的最大用户数 “超级管理员”最多 3 人
先决条件角色 用户必须先拥有角色 A 才能申请角色 B 必须先有“工程师”才能有“高级工程师”
会话约束 限制单个会话中可激活的角色数量或组合 同一会话不能同时激活“开发”和“生产运维”
常见误区:互斥角色(SSD)是静态定义,在角色分配时即检查;而动态职责分离(DSD)是在会话激活时检查,两者不可混淆。

3.3 RBAC3:统一模型

RBAC3 将 RBAC1 的角色继承与 RBAC2 的约束模型合并,形成最完整的 RBAC 体系。在 RBAC3 中,约束规则不仅作用于角色分配,还作用于继承关系:

  • 继承约束:如果角色 A 与角色 B 互斥,则 A 的任何祖先角色也不能与 B 同时分配给同一用户。
  • 基数传递:父角色的基数限制会向下传递到子角色,防止通过继承绕过人数限制。
  • 先决条件继承:子角色继承父角色的先决条件,并可以附加额外条件。
RBAC3 统一模型:继承 + 约束融合 管理角色(父) 操作角色(子) 互斥约束(SSD) 基数约束 先决条件 约束规则同时作用于角色分配和继承链路 例如:父角色有基数限制,子角色继承后同样受该基数约束

3.4 动态职责分离(DSD)

动态职责分离(Dynamic Separation of Duty)与静态互斥角色(SSD)的核心区别在于检查时机:

特性 静态互斥(SSD) 动态职责分离(DSD)
检查时机 角色分配时 会话激活时
用户可拥有 不能同时拥有互斥角色 可以拥有互斥角色,但不能在同一会话中激活
灵活性 低,分配即锁定 高,支持不同场景切换角色
典型场景 财务制度强制要求 开发与测试角色切换
实践建议:对于合规要求严格的场景(如 SOX、PCI-DSS),优先使用 SSD;对于需要灵活切换职责的 DevOps 团队,DSD 是更优选择。

DSD 实现要点

  1. 会话角色集管理:在用户创建会话时,检查当前已激活角色与待激活角色是否存在 DSD 冲突。
  2. DSD 规则存储:通常以 (role_id, conflict_role_id) 或 (role_id, conflict_set_id) 形式存储在关系表中。
  3. 运行时拦截:在权限中间件中增加 DSD 校验逻辑,拒绝违反规则的会话激活请求。
-- DSD 规则表示例
CREATE TABLE dsd_rules (
    id          INT PRIMARY KEY,
    role_id     INT NOT NULL,
    conflict_role_id INT NOT NULL,
    description VARCHAR(255),
    FOREIGN KEY (role_id) REFERENCES roles(id),
    FOREIGN KEY (conflict_role_id) REFERENCES roles(id)
);

-- 查询某角色是否存在 DSD 冲突
SELECT conflict_role_id 
FROM dsd_rules 
WHERE role_id = ? 
   OR conflict_role_id = ?;

RBAC 模型演进对比

模型 核心特性 适用阶段
RBAC0 用户-角色-权限基础映射 小型系统、简单权限管理
RBAC1 角色继承,消除权限冗余 组织层级清晰的企业
RBAC2 静态约束(SSD、基数、先决条件) 合规要求严格的行业
RBAC3 继承 + 约束统一管理 大型企业、复杂组织架构

在实际工程中,RBAC3 是最推荐的实现基线。它既保留了角色继承带来的权限复用效率,又通过约束模型确保了合规边界。下一层级的 ABAC 将在 RBAC3 的基础上进一步引入属性维度的动态授权能力。