《访问控制模型与权限管理》
第3章 访问控制矩阵模型
3、访问控制矩阵模型
📌 访问控制矩阵(ACM)的定义
访问控制矩阵(Access Control Matrix, ACM) 是描述系统中所有主体(Subject)对客体(Object)所拥有的访问权限的二维表格模型。 矩阵的行代表主体(用户、进程等),列代表客体(文件、设备、数据库等),每个单元格记录该主体对该客体拥有的权限集合(如读、写、执行、删除等)。
📊 行(主体)与列(客体)的表示方法
下面是一个典型的访问控制矩阵示例,包含 3 个主体和 4 个客体:
🔍 每个单元格可以包含多个权限,用逗号分隔;“—” 表示无权限。
🧩 访问控制矩阵结构示意(SVG)
⬆️ 矩阵中每个单元格存储主体对客体的权限集合
⚡ 矩阵的存储优化 —— 能力表 & 访问控制列表
由于访问控制矩阵通常非常稀疏(大部分单元格为空),直接存储会浪费大量空间。因此引入两种优化分解方式:
🎫 能力表(Capability Table)
按主体(行)分解:每个主体关联一个“能力列表”,列出该主体可访问的客体及对应权限。
- 结构:主体 → [(客体, 权限集), …]
- 优点:快速查询主体拥有的所有权限。
- 典型场景:操作系统进程权限、分布式系统令牌。
Alice → { (文件A, 读|写), (目录B, 读|执行), (打印机C, 打印) }
📋 访问控制列表(ACL)
按客体(列)分解:每个客体关联一个“访问控制列表”,记录哪些主体对该客体拥有何种权限。
- 结构:客体 → [(主体, 权限集), …]
- 优点:方便查看某个客体被哪些主体访问。
- 典型场景:文件系统权限(如Linux文件ACL)、网络设备。
文件A → { (Alice, 读|写), (Bob, 读), (进程P1, 读|写|删) }
🔁 能力表与ACL 存储优化对比(SVG架构图)
⬆️ 能力表按主体组织,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):按客体分解,每个客体记录授权主体列表。
- 两种优化方式避免了稀疏矩阵的存储浪费,广泛应用于操作系统、数据库和网络设备。
🎓 专注课程资料整理