《访问控制模型与权限管理》
第3章 访问控制矩阵模型

3、访问控制矩阵模型

📌 访问控制矩阵(ACM)的定义

访问控制矩阵(Access Control Matrix, ACM) 是描述系统中所有主体(Subject)对客体(Object)所拥有的访问权限的二维表格模型。 矩阵的行代表主体(用户、进程等),列代表客体(文件、设备、数据库等),每个单元格记录该主体对该客体拥有的权限集合(如读、写、执行、删除等)。

📊 行(主体)与列(客体)的表示方法

下面是一个典型的访问控制矩阵示例,包含 3 个主体和 4 个客体:

主体 \ 客体 📄 文件A 📁 目录B 🖨️ 打印机C 🗄️ 数据库D
👤 用户Alice 读, 写 读, 执行 打印 查询, 更新
👤 用户Bob 读 读 — 查询
🤖 进程P1 读, 写, 删除 读, 写 打印, 管理 查询, 插入

🔍 每个单元格可以包含多个权限,用逗号分隔;“—” 表示无权限。

🧩 访问控制矩阵结构示意(SVG)

主体 客体1 客体2 客体3 … Alice Bob 进程P1 读,写 读,执行 打印 读 — — 读,写,删 读,写 打印 🔐

⬆️ 矩阵中每个单元格存储主体对客体的权限集合

⚡ 矩阵的存储优化 —— 能力表 & 访问控制列表

由于访问控制矩阵通常非常稀疏(大部分单元格为空),直接存储会浪费大量空间。因此引入两种优化分解方式:

🎫 能力表(Capability Table)

按主体(行)分解:每个主体关联一个“能力列表”,列出该主体可访问的客体及对应权限。

  • 结构:主体 → [(客体, 权限集), …]
  • 优点:快速查询主体拥有的所有权限。
  • 典型场景:操作系统进程权限、分布式系统令牌。
Alice → { (文件A, 读|写), (目录B, 读|执行), (打印机C, 打印) }

📋 访问控制列表(ACL)

按客体(列)分解:每个客体关联一个“访问控制列表”,记录哪些主体对该客体拥有何种权限。

  • 结构:客体 → [(主体, 权限集), …]
  • 优点:方便查看某个客体被哪些主体访问。
  • 典型场景:文件系统权限(如Linux文件ACL)、网络设备。
文件A → { (Alice, 读|写), (Bob, 读), (进程P1, 读|写|删) }

🔁 能力表与ACL 存储优化对比(SVG架构图)

🎫 能力表 (按主体) 主体 Alice 客体A: 读,写 客体B: 读,执行 主体 Bob 客体A: 读 客体C: 打印 进程 P1 客体A: 读,写,删 客体D: 查询 📋 ACL (按客体) 客体 文件A Alice: 读,写 Bob: 读 客体 打印机C Alice: 打印 P1: 打印,管理 客体 数据库D Alice: 查询,更新 Bob: 查询 ⇄

⬆️ 能力表按主体组织,ACL按客体组织,两者都是ACM的稀疏存储优化

💻 存储结构伪代码示例

// 能力表 (Capability Table)
capability_table = {
  "Alice": [
    ("文件A", {"读", "写"}),
    ("目录B", {"读", "执行"}),
    ("打印机C", {"打印"})
  ],
  "Bob": [
    ("文件A", {"读"}),
    ("数据库D", {"查询"})
  ],
  "进程P1": [
    ("文件A", {"读", "写", "删除"}),
    ("目录B", {"读", "写"}),
    ("打印机C", {"打印", "管理"})
  ]
}
// 访问控制列表 (ACL)
acl_table = {
  "文件A": [
    ("Alice", {"读", "写"}),
    ("Bob", {"读"}),
    ("进程P1", {"读", "写", "删除"})
  ],
  "打印机C": [
    ("Alice", {"打印"}),
    ("进程P1", {"打印", "管理"})
  ],
  "数据库D": [
    ("Alice", {"查询", "更新"}),
    ("Bob", {"查询"})
  ]
}

✅ 本节要点

  • 访问控制矩阵(ACM):行=主体,列=客体,单元格=权限集。
  • 能力表:按主体分解,每个主体携带自己的权限“票据”。
  • 访问控制列表(ACL):按客体分解,每个客体记录授权主体列表。
  • 两种优化方式避免了稀疏矩阵的存储浪费,广泛应用于操作系统、数据库和网络设备。
🎓 专注课程资料整理