3. 自主访问控制模型:DAC模型原理、ACL与Capability实现、优缺点分析

3.1 DAC模型核心原理

自主访问控制(Discretionary Access Control, DAC)是访问控制领域最基础的模型之一。其核心思想是:资源的拥有者(Owner)有权自主决定其他主体(用户/进程)对该资源的访问权限。在工程分析平台中,DAC 通常表现为“谁创建的数据,谁就拥有完全控制权,并可自行授权给他人”。

关键特征: 权限的传递性——用户 A 可以将其对文件 X 的读权限授予用户 B,用户 B 获得权限后,在支持传递的系统中甚至可以进一步授予用户 C。

DAC 模型在工程分析平台中的典型应用场景包括:

  • 个人工作区: 工程师对自己创建的仿真模型、分析脚本、结果报告拥有完全控制权。
  • 项目协作: 项目负责人可以自主将特定分析任务的查看或编辑权限授予团队成员。
  • 临时共享: 需要将某个分析结果截图或数据快照分享给跨部门同事时,由数据所有者直接授权。
DAC 模型核心原理:资源所有者自主授权 资源所有者 (Owner) 受控资源 (Object) 拥有/创建 主体 A (用户) 主体 B (用户) 主体 C (用户) 授予读/写 授予读 拒绝访问 权限由所有者自主决定,可授予、撤销或拒绝其他主体对资源的访问

3.2 ACL 实现机制

访问控制列表(Access Control List, ACL) 是 DAC 模型最主流的实现方式。ACL 将权限信息附着在资源(Object)上,为每个资源维护一个列表,记录哪些主体(Subject)可以对该资源执行哪些操作。

3.2.1 ACL 数据结构

在工程分析平台中,一个典型的 ACL 条目包含以下字段:

字段 说明 示例值
主体标识 用户 ID、用户组 ID 或角色 ID user_10086 / group_analyst
权限掩码 位掩码表示的操作权限集合 0x7 (读|写|执行)
继承标志 该 ACL 是否可被子资源继承 true / false
审计标志 是否记录该条目的访问日志 true / false

3.2.2 ACL 权限判定流程

  1. 请求到达: 主体 S 请求对资源 O 执行操作 op。
  2. 查找 ACL: 系统定位资源 O 关联的 ACL 列表。
  3. 顺序匹配: 按 ACL 条目顺序查找匹配主体 S 的条目(先精确匹配用户,再匹配用户组)。
  4. 权限裁决:
    • 若找到匹配条目且权限掩码包含 op → 允许。
    • 若找到匹配条目但权限掩码不包含 op → 拒绝。
    • 若遍历完 ACL 无匹配 → 默认拒绝。
工程实践注意: ACL 条目顺序至关重要!在多数实现中,一旦找到匹配项就停止查找。因此,拒绝(Deny)条目应放在允许(Allow)条目之前,否则可能被允许条目覆盖导致权限绕过。

3.3 Capability 实现机制

能力(Capability)机制 是 DAC 模型的另一种实现方式,与 ACL 相反,它将权限信息附着在主体(Subject)上。每个主体持有一组“能力令牌”,每个令牌代表对某个资源的特定操作权限。

3.3.1 Capability 数据结构

// 工程分析平台中的 Capability 令牌结构示例
{
  "cap_id": "cap_a1b2c3d4",
  "type": "object_capability",
  "object_id": "simulation_model_789",
  "object_type": "SimulationModel",
  "permissions": ["read", "execute"],
  "issuer": "user_10086",
  "issued_at": 1712345678,
  "expires_at": 1712432078,
  "signature": "0x7a8b9c..."  // 防篡改签名
}

3.3.2 Capability 权限判定流程

  1. 请求到达: 主体 S 请求对资源 O 执行操作 op,并附带其持有的 Capability 令牌。
  2. 令牌验证: 系统验证令牌的签名、有效期、颁发者合法性。
  3. 权限检查: 检查令牌中 object_id 是否匹配资源 O,permissions 是否包含 op。
  4. 裁决: 验证通过且权限匹配 → 允许;否则 → 拒绝。
ACL 与 Capability 实现机制对比 ACL 实现(权限附着于资源) 资源:仿真模型 #2c3e50 ACL 列表 主体 A → 读+写 主体 B → 读 主体 C → 拒绝 默认 → 拒绝 主体访问时查询资源 ACL Capability 实现(权限附着于主体) 主体 A(持有令牌) Capability 令牌列表 令牌1: 模型#2c3e50 → 读+写 令牌2: 报告#2c3e50 → 读 令牌3: 数据集#2c3e50 → 执行 (令牌可传递、可撤销) 资源验证令牌有效性

3.4 ACL 与 Capability 对比分析

对比维度 ACL Capability
权限存储位置 资源端(Object) 主体端(Subject)
权限查询效率 O(n),n 为 ACL 条目数 O(1),直接验证令牌
权限撤销 容易,直接修改资源 ACL 困难,需追踪所有令牌副本
权限传递 需显式修改 ACL 令牌可直接传递
分布式适用性 较差,依赖中心化资源服务器 较好,令牌可离线验证
防篡改能力 强,ACL 由系统保护 依赖签名机制
工程分析平台典型场景 文件系统、项目仓库 微服务间调用、API 授权

3.5 DAC 模型优缺点分析

3.5.1 优点

  • 灵活性高: 资源所有者可根据实际协作需求自主授权,无需管理员介入。
  • 实现简单: ACL 和 Capability 机制都有成熟的工程实现,开发成本低。
  • 用户友好: 符合“谁创建谁拥有”的直觉认知,学习曲线平缓。
  • 细粒度控制: 可精确到单个用户对单个资源的特定操作权限。

3.5.2 缺点

  • 权限管理分散: 权限分散在大量资源所有者手中,难以形成统一的全局安全策略。
  • 信息泄露风险: 用户可能无意中将敏感数据授权给不适当的对象。
  • 权限蔓延: 随着时间推移,权限授予关系变得复杂且难以审计。
  • 无法强制全局策略: 例如“所有分析报告必须经过合规审查才能共享”这类全局规则难以在 DAC 中强制实施。
工程分析平台选型建议: DAC 模型适用于个人工作区、小团队协作、临时共享等场景。对于需要严格合规管控、全局统一策略的企业级平台,建议将 DAC 作为基础层,在其上叠加 MAC(强制访问控制)或 RBAC(基于角色的访问控制)模型。

3.6 工程分析平台中的 DAC 实践案例

某工程分析平台采用混合 DAC 架构:

资源类型 实现机制 默认权限 特殊策略
个人仿真模型 ACL 仅创建者读写 可授予团队读权限
项目分析报告 ACL + 继承 项目成员读,负责人读写 子报告继承父目录 ACL
微服务 API Capability 无默认权限 服务间通过 JWT 令牌调用
共享数据集 ACL + 组 数据组读,创建者写 支持临时授权链接

该实践表明,在工程分析平台中,ACL 更适合管理静态资源(文件、模型、报告)的访问权限,而 Capability 更适合动态服务调用和分布式场景。合理组合两种机制可以发挥 DAC 模型的最大价值。