想象你走进一栋戒备森严的“数据大厦”。大厅里,每位员工胸前都挂着一张门禁卡;电梯口、机房门口、甚至每一层楼的每一间办公室,都装着读卡器。你的卡能刷开哪扇门,取决于HR部门在发卡时给你配置了什么权限。楼里还有一套监控系统,实时记录着“谁在几点几分刷开了哪扇门,进去待了多久”。数据访问控制与权限模型,就是这样一套决定“谁能进哪扇门、进去后能搬走什么、事后是否可追溯”的门禁管理体系。这篇内容将带你从门禁保安的角度,把主体、客体、ACL、RBAC、ABAC这些术语全部变成看得见摸得着的日常物件。
对AI从业者而言,权限模型决定了数据能否被合法合规地用于训练与推理,掌握它才能守住AI产品的数据安全底线,也是架构师与数据工程师的必备技能。
目录
可视化演示
动态演示数据访问控制与权限模型的核心机制,通过概览/流程/对比/趋势四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
数据访问控制与权限模型:访问控制 访问控制的基本模型与核心三要素 自主访问控制DAC与强制访问控 核心机制可视化 数据访问控制与权限模型整体架构与关键组件
基本概念:门、钥匙与访客
想象你站在数据大厦的门口,手里攥着一张刚刚发下来的门禁卡。这张卡能刷开哪些门,取决于卡片背后记录的权限信息。在这栋大厦里,所有被保护的东西——数据库表、文件、API 接口——都是一间间上了锁的房间。而访问控制要做的事,就是回答三个朴素的问题:你是谁?你想进哪个房间?你被允许吗?
在数据访问控制的术语里,这三个问题对应三个基础角色:主体(Subject) 是发起访问的个体,可以是人、程序或服务,好比刷卡的你;客体(Object) 是被访问的数据资源,好比上锁的房间;动作(Action) 是你想对资源做的事——读取、写入、删除、执行,好比打开房门、搬动家具、扔掉旧物。把这三个要素交给门禁系统,它需要依据一套策略给出明确答复:放行,还是拒绝。
这套答复过程可以抽象成一个权限判定函数。策略引擎接收主体、客体、动作三元组,输出一个二值决策:
除了判定函数,安全目标也是基本概念的基石,即经典的 CIA 三元组:机密性(Confidentiality)确保数据不被未授权者看到,完整性(Integrity)确保数据不被未授权者篡改,可用性(Availability)确保授权者随时能访问到数据。这三者像大厦的三根承重柱,任何一根受损,门禁体系都会摇摇欲坠。
回到门禁比喻:你手里的门禁卡是主体身份的证明,房间是客体,刷开哪扇门由策略函数决定。而 CIA 三元组则是整栋大厦的设计底线:不泄漏(机密)、不被乱改(完整)、随时能进(可用)。明白了这层地基,后续所有权限模型都是在这块地基上砌墙。
- 主客体输入$S$ 是发起访问的主体,$O$ 是被访问的客体,$A$ 是请求执行的动作,三者打包成一个请求。
- 策略判定$\mathit{Policy}$ 是访问控制策略函数,它查规则库、比对配置,对请求进行裁决。
- 输出决策$\rightarrow$ 表示函数输出方向,结果只能在 $\{ \mathit{allow}, \mathit{deny} \}$ 中二选一,对应门禁的“开锁”或“拒绝”。
核心要素:认证、授权与审计三兄弟
数据大厦的安保部每天要处理三件事:在门口核实你的工牌(你是谁)、在房间门口检查你的门禁权限(你能进去吗)、记录你进出的所有行为(你做了什么)。这三件事,正是访问控制的核心三要素——身份认证(Authentication)、授权决策(Authorization)与审计追踪(Audit),合称 AAA。
这三者看似一体,职责却严格分开。身份认证解决“你是不是你”的问题:刷卡时验证密码、指纹或人脸,好比前台核对工牌照片与本人是否一致。授权决策解决“你能做什么”的问题:门禁读卡器查你的卡有没有这扇门的权限,好比系统比对房间权限表。审计追踪解决“事后怎么办”的问题:每天零点,安保部导出开锁记录,发现异常就追溯,好比监控录像为安全事故提供证据。
三兄弟之外,还有一个常被忽视的搭档——职责分离(SoD)。它要求一个敏感操作必须由多个角色协同完成,不能由一个人从头到尾包办。就像财务报销流程:经手人填单、部门主管审批、财务复核,三人各管一段,任何单个人都无法独自把公账转到自己口袋。
在门禁系统里,认证是“你是谁”,授权是“你能走到哪”,审计是“你干过的都被记着”。三兄弟缺一不可:只认证不授权,人人都是超级管理员;只授权不审计,出了安全事件无从查起。职责分离则是给高权限岗位加的一把“双人锁”,让权力不再是单点炸弹。
- 角色权力交集$r_1$ 和 $r_2$ 是两个不同的角色,$\mathit{Perms}(r_1) \cap \mathit{Perms}(r_2)$ 求出这两个角色都拥有的权限集合。
- 冲突约束$\subseteq \mathit{Conflict}$ 表示这个交集必须被限制在系统标记的“冲突权限”范围内,一旦超出即视为违规配置。
- 制衡目标整个公式表明,没有任何一个角色能同时拥有完整的关键操作链,必须协作完成。
自主访问控制:房间主人说了算
回到数据大厦,有一类房间很特别——房间的主人可以自己决定把钥匙复制给谁。上级不会干涉,安保部也不管,只要主人点头,访客就能进。这就是自主访问控制(DAC,Discretionary Access Control)的精髓:资源所有者拥有自主裁量权,可以按自己的意愿授予或撤销他人的访问权限。
DAC 最典型的实现是访问控制列表(ACL,Access Control List)。每份资源都挂着一张名单,名单上写着“允许哪个用户执行什么操作”。Linux 文件系统中的 -rw-r--r-- 权限位,就是一张简化版的 ACL:文件主人能读能写,同组人能读,其他人只能读。Windows 文件属性里的“安全”选项卡,同样是一张图形化的 ACL。
ACL 的数学表达非常直观:对于每个客体 $O$,系统维护一张“主体—动作”的映射表:
DAC 的优点是灵活便捷,资源所有人自行决策,无需层层审批。但缺点也很明显:权限管理分散,难以集中管控。如果某个员工因为调岗被撤了权限,而离职同事的账号还挂着一堆共享资源的 ACL,就会留下巨大的安全隐患。就像主人把自家钥匙复制给了朋友,朋友又把钥匙转给了陌生人——主人管得过来吗?
- 客体索引$\mathit{ACL}(O)$ 表示这个资源自己的访问控制名单,每个资源独立维护一张表。
- 规则集合$\left\{ (S_i, A_i) \right\}$ 是一组“主体-动作”二元组,比如(小王,读)、(小李,写),体现“谁被允许做什么”。
- 条件限定$\mid$ 是“满足条件”的数学符号,$\mathit{granted}(S_i, O, A_i)$ 为真表示所有者确实授予过这条权限,否则二元组不会出现在列表里。
强制访问控制:规则高于一切
不是所有人都能拥有 DAC 那样的自由。在一些高保密场景,比如军事指挥系统、政府机要部门,房间里存放的数据按密级划分,门禁规则由中央统一制定,任何人都不能私自授权。这就是强制访问控制(MAC,Mandatory Access Control),规则面前,资源主人说了也不算。
MAC 的核心是安全标签。系统中每个主体和客体都被打上一个密级标签,例如“公开”“机密”“绝密”。当主体请求读取客体时,系统会比较两者的标签等级,决定是否放行。这种强制比较规则通常来自一个经典模型——BLP 模型(Bell-LaPadula)。BLP 的两条铁律是“不上读、不下写”:低密级主体不能读高密级客体,高密级主体不能写低密级客体。第一条防泄密,第二条防高密级机密被“降级”写进低密级文件。
单看读操作,MAC 的判定规则可以浓缩为一个逻辑蕴含式:
MAC 就像大厦里的“涉密楼层”:电梯按钮必须插特定等级的工卡才能按亮,楼层门禁由中央机房统一控制,任何员工都无权把门禁权限转给别人。规则的刚性换来了高安全性,但也牺牲了灵活性:审批流程长、维护成本高,不适合开放协作的互联网场景。因此 MAC 通常只用于涉密、金融等对安全要求极高的领域。
- 安全标签$\mathit{Label}(S)$ 是主体的密级标签,$\mathit{Label}(O)$ 是客体的密级标签,例如“机密”或“绝密”。
- 支配比较$\succeq$ 表示“支配”,即主体等级高于或等于客体等级,这是读操作成立的前提条件。
- 逻辑结论$\Rightarrow$ 是逻辑蕴含符号,前件成立则后件必然成立,即读操作返回 $\mathit{allow}$。
基于角色访问控制:按岗位发卡
前面两种模型一个太自由、一个太死板。现实世界的数据大厦需要一个更聪明的办法:按岗位发卡。新员工入职时,HR 不看他是谁,只看他的岗位——运营专员、数据分析师、系统管理员——然后给一套对应权限的工卡。这就是基于角色的访问控制(RBAC,Role-Based Access Control)。
RBAC 的核心思想是引入“角色”这个中间层。用户不再直接关联权限,而是关联角色;角色承载一组权限集合。好比服务器机房的门禁权限绑定给“运维主管”角色,而不是绑定给张三李四。张三离职了,只要把运维主管角色从张三身上摘下来,挂到新同事身上,权限就无缝转移了。
那么,一个用户同时拥有多个角色时,他最终的权限集有多大?答案是把每个角色的权限做并集。如果 Alice 既是“数据分析师”(可读数据集)又是“项目主管”(可审批模型发布),那她的权限就是两套权限之和。
RBAC 还特别强调最小权限原则:每个角色只应包含完成本职工作所需的最少权限。普通员工的工卡只能刷开自己工位所在楼层,绝不应顺手开通数据库 DROP 权限。这样即使账号被劫持,攻击者能造成的破坏也极其有限。RBAC 因为贴近组织结构、管理成本低,已成为企业级系统最主流的权限模型。
- 用户求权限$\mathit{Perms}(u)$ 是用户 $u$ 实际拥有的全部权限集合,系统每次判定都要先算出这个集合。
- 角色提取$\mathit{Roles}(u)$ 返回用户被分配的角色集合,$r \in \mathit{Roles}(u)$ 遍历其中的每一个角色。
- 并集运算$\bigcup$ 把所有角色的权限集合合并,取并集,得到用户的累计权限。注意是并集而不是交集,体现了“权力叠加”。
基于属性访问控制:多维度的智能门禁
如果说 RBAC 是一张按岗位做好的静态工卡,那么基于属性的访问控制(ABAC,Attribute-Based Access Control)就是一套智能门禁系统:它不关心你拿什么卡,而关心你当下的所有属性特征——你是谁、属于哪个部门、现在几点、从哪个 IP 过来、要访问的数据是什么密级、当前网络是否安全……所有属性汇聚到策略引擎,实时算出一个决定。
ABAC 中属性分为三大类:主体属性(用户 ID、部门、职级、安全级别)、客体属性(数据的密级、所属业务线、所有者)、环境属性(当前时间、访问地点、网络状态)。比如一条典型的 ABAC 策略可以这样写:“只有财务部员工、在工作日 9:00—18:00、从公司内网 IP 发起、且目标数据密级为'内部'时,才允许读取。”四个条件缺一不可。
策略引擎把每个属性条件做逻辑与运算,所有条件同时满足才放行:
ABAC 是最灵活的权限模型,特别适合云平台、微服务、大数据等动态多变的环境。但它也有代价:策略语言复杂、属性治理困难、运行时开销大。如果 RBAC 是“按岗发卡”,ABAC 就是“AI 保安”——既能识别员工,又能看天气、查访客名单、感知周围异常,做出随环境变化而调整的决策。
- 属性条件组每个 $a_i$ 是一个属性取值(如部门=“财务部”),$v_i$ 是策略要求的参考值,$\bowtie$ 是比较算子(等于、包含、大于等)。
- 合取运算$\bigwedge$ 是逻辑“与”的连乘记号,表示所有 $n$ 个条件必须同时成立。
- 最终结论当且仅当每个 $(a_i \bowtie v_i)$ 均为真时,$\mathit{Permit}$ 才为真,即允许访问。任何一个条件断掉,整个链条就断掉。
实现机制:把规则落进系统
概念讲得再好,最终都要落到代码和存储里。数据大厦的门禁系统不是空中楼阁,而是由一张张具体的表、一行行日志搭起来的。这一节我们看看访问控制的常见实现载体:ACL 与权限表、能力列表、审计日志、云 IAM。
ACL 与权限表是最直接的落地方式。关系型数据库里通常建一张 permissions 表,字段包括 user_id、resource_id、action、granted,每次访问都查一次表。能力列表(Capability List) 则反其道而行:它不是把名单挂在资源上,而是给每个用户发一张“我拥有什么权限”的通关文牒。主体持有能力,凭此访问资源,相当于钥匙在用户手里而非锁上贴着名单。
审计日志是访问控制闭环的最后一块拼图。每次访问请求都可以抽象成一个五元组,写入不可篡改的日志系统:
在云时代,这些机制被封装成 IAM(Identity and Access Management) 服务。云平台用“用户—用户组—角色—策略”四层结构统一管理权限:策略是 JSON 格式的权限声明,角色挂在用户组上,用户组再关联具体用户。底层依旧靠权限表和审计日志驱动,但对外变成了可视化的控制台和 API。无论架构多复杂,数据大厦的每一扇门,最终都离不开这几件落地的“实体建材”。
- 事件对象$e$ 是一次完整的访问请求事件,$\mathit{Log}(e)$ 是审计模块为它生成的日志记录。
- 五元信息$t_e$ 是时间戳,$S_e$ 是主体,$O_e$ 是客体,$A_e$ 是动作,$R_e$ 是决策结果(允许/拒绝)。
- 审计价值五元组形成证据链,安全团队可以按时间倒序回放,定位异常访问的源头。
AI 应用场景
场景 1:数据湖的多角色权限隔离
阶段:数据治理与合规
解决的问题:现代数据湖中存放着用户特征、模型特征、标注数据等敏感资产,几十个团队共数百人同时访问。过去靠人工维护 Excel 授权表,权限授予混乱、回收不及时,超范围读数据的事件时有发生。采用 RBAC+ABAC 混合模型后,用户先按角色获得基础权限,再叠加数据密级、访问时间、来源 IP 等属性条件实现动态收紧,确保数据分析师只能在工作时间从办公网读取脱敏数据。
具体案例:某互联网公司数据平台有 500 名员工访问统一数据湖。管理员按“算法工程师”“数据分析师”“运维管理员”三类角色分配权限;对涉及用户隐私的宽表,额外要求数据密级标签为“机密”且访问 IP 属于办公网段,两条属性同时满足才放行,违规访问量下降 90%。
场景 2:大模型训练语料的合规分级
阶段:数据准备与预处理
解决的问题:大模型训练语料中包含大量用户生成内容,直接全部投喂给模型可能导致隐私泄漏、甚至训练出会“背诵”个人信息的不良模型。出于《个人信息保护法》与伦理审查要求,训练数据必须分级分权限管理。给每份语料打上“公开/内部/机密”的 MAC 式安全标签,只有持相应安全级别的标注团队才能读取对应语料,有效阻断低权限人员接触敏感语料。
具体案例:某 AI 公司在预训练阶段对语料库做三级密级标注,训练脚本执行前先校验进程主体标签是否支配语料标签,全部数据装载操作都写入审计日志。当监管问询“这批语料谁读过去训练”时,团队可在一分钟内从审计中心导出完整记录,顺利通过合规审查。
Python 演示
class Role: """角色容器:存储一组权限""" def __init__(self, name, permissions): self.name = name self.permissions = set(permissions) def grant(self, action, resource): self.permissions.add((action, resource)) class User: """用户:关联多个角色,权限取并集""" def __init__(self, name, roles): self.name = name self.roles = roles def has_permission(self, action, resource): perms = set() for role in self.roles: perms |= role.permissions return (action, resource) in perms class AccessController: """访问控制器:承载用户与角色,记录审计日志""" def __init__(self): self.roles = {} self.users = {} self.audit_log = [] def add_role(self, role): self.roles[role.name] = role def add_user(self, user): self.users[user.name] = user def check_access(self, user_name, action, resource): user = self.users[user_name] allowed = user.has_permission(action, resource) self.audit_log.append({ "time": "2024-01-01 10:00:00", "user": user_name, "action": action, "resource": resource, "result": "allow" if allowed else "deny" }) return allowed def main(): admin = Role("admin", {("read", "*"), ("write", "*"), ("delete", "*")}) analyst = Role("analyst", {("read", "dataset"), ("write", "dataset")}) viewer = Role("viewer", {("read", "dataset")}) ac = AccessController() ac.add_role(admin) ac.add_role(analyst) ac.add_role(viewer) alice = User("alice", [admin]) bob = User("bob", [analyst]) carol = User("carol", [viewer]) ac.add_user(alice) ac.add_user(bob) ac.add_user(carol) print(ac.check_access("bob", "read", "dataset")) print(ac.check_access("carol", "write", "dataset")) print(ac.check_access("bob", "delete", "dataset")) print(ac.check_access("alice", "delete", "dataset")) for log in ac.audit_log: print(log) if __name__ == "__main__": main()
class Role:角色就是权限的容器,一个角色保存一组(动作, 资源)元组,对应工卡上的“可进房间清单”。perms |= role.permissions多角色权限取并集,对应正文中 $\mathit{Perms}(u) = \bigcup \mathit{Perms}(r)$ 的运算。self.audit_log.append(...)每次访问都记录一条五元组日志,对应审计追踪机制。ac.check_access("carol", "write", "dataset")检查 viewer 角色是否有写权限,返回 False,验证最小权限原则。
常见误区
误区很多人以为“用户登录成功 = 可以访问所有功能”。既然系统已经验证了我是合法用户,为什么还要限制我看哪些数据?只要登录了,整个系统就应该对我敞开。
正解登录只是“认证”,确认你是大厦员工;而“授权”决定你能进哪些房间。两者是截然不同的关卡。看门保安确认了你的工牌,但如果你没有 3 楼机房的权限,照样进不去。系统设计必须把认证与授权拆开,先验身份,再查权限,缺一不可。
为何常见:因为很多中小系统最初只有登录校验,没有细粒度授权。用户习惯了“登进去什么都能干”,一旦系统补上权限反而觉得“变卡了”,误以为权限控制是多余的。
误区“权限管理直接用 RBAC 不就行了?搞什么 MAC、ABAC,都是学术噱头。”不少工程师在做权限方案时只认 RBAC,遇到弹性很大的场景也硬套角色。
正解RBAC 适合组织结构稳定、权限规则清晰的系统,但面对跨部门协作、动态属性判定、海量细粒度策略时,RBAC 的角色数量会爆炸式增长。ABAC 用属性替代角色,MAC 用密级保证刚性,不同模型适用于不同场景,实际生产常采用 RBAC+ABAC 混合方案。
为何常见:企业后台管理系统大多是 RBAC 的标准舞台,从业者接触最多、资料最全,思维容易固化,忽略了其他模型的存在价值。
误区“DAC 自由散漫,MAC 如铁板一块,二者互不相容。我的系统用了 DAC 就不能用 MAC。”这种二元对立的想法在很多架构讨论中屡见不鲜。
正解现实中 DAC 和 MAC 常常叠加使用。Linux 系统既有文件所有者自主授权的 DAC 权限位,也有 SELinux 用安全标签实现的 MAC 强制规则。两层门禁互相补充:DAC 管日常协作,MAC 管核心资产,被 DAC 放行后还得再过 MAC 的关卡。
为何常见:教科书为了讲清概念习惯做对比,读者只记住了“区别”而忽略了“组合”,加上实际项目很少需要同时实现两种模型,导致经验缺失。
误区“权限模型上线时配置好,之后就不用管了。反正都是管理员在维护,谁能出问题?”很多团队把权限当成一次性工程,从不复盘和审计。
正解权限配置是“活”的。员工离职、转岗、项目结束,角色的权限都要同步回收;业务快速迭代时,新功能可能带来未授权的访问路径。定期审计日志、复盘权限矩阵、执行最小权限复查,是权限治理的常态动作。一次配置不等于永续安全。
为何常见:权限生效时对业务没有任何可见收益,运维优先级自然排后面;而审计需要日志系统支持,团队没有这个基建,也就养成了“装完就跑”的习惯。
面试题
Q1. 在访问控制模型中,“客体”指的是什么?
- A.发起访问请求的用户
- B.被访问保护的数据资源← 正确答案
- C.执行权限判定的服务器
- D.系统中定义的用户角色
答案:B。客体是被保护的数据资源,如文件、数据库表、API 接口。A 是主体,C 是门禁系统本身,D 是 RBAC 里的角色概念。把客体记作“上锁的房间”就不会混淆了。
Q2. 身份认证(Authentication)解决的核心问题是?
- A.确认“你是谁”← 正确答案
- B.确认“你能做什么”
- C.记录“你做了什么”
- D.防止“你不该看”
答案:A。认证回答“你是谁”,如同门口前台核对工牌照片;授权回答“你能做什么”;审计记录“你做了什么”。把三个 AAA 要素在脑中排一队,选项就清晰了。
Q3. 在强制访问控制(MAC)中,主体对客体执行读操作的必要条件是?
- A.主客体密级完全相等
- B.主体密级支配客体密级← 正确答案
- C.客体所有者批准即可
- D.任意条件下都可读
答案:B。MAC 遵循 BLP 模型“不上读”规则,主体标签必须支配客体标签,即主体密级不低于客体密级才可读。C 是 DAC 的逻辑,A 范围过窄(允许高于),D 完全错误。
Q4. RBAC 中“最小权限”原则的核心含义是?
- A.用户权限越小越好用
- B.角色数量必须精简到最少
- C.用户只拥有完成任务必需的权限← 正确答案
- D.管理员永远拥有最大权限
答案:C。最小权限指用户权限恰好够用,不多一分。比如普通员工只需读数据集,就不应开放 DROP 权限。A 容易极端化,B 讲的是角色数量而非权限范围,D 与最小权限矛盾。
Q5. 下列哪些属于 ABAC 中可纳入决策的属性维度?
- A.用户所属部门的属性← 正确答案
- B.当前访问的时间点← 正确答案
- C.目标数据密级标签← 正确答案
- D.发起访问的设备类型← 正确答案
答案:ABCD。ABAC 的优势就是多维属性融合。部门属主体属性,时间是环境属性,密级是客体属性,设备类型是环境/主体附加属性。所有属性都汇聚到策略引擎参与求值,这正是 ABAC 被称为“智能门禁”的原因。
Q6. 自主访问控制(DAC)区别于其他模型的核心特征是?
- A.中央管理员统一配置权限
- B.资源所有者自主授予权限← 正确答案
- C.系统按密级标签强制决定
- D.权限由属性条件实时计算
答案:B。DAC 中资源所有者拥有自主裁量权,可把权限转授他人,Linux 文件权限是典型。A 是集中式管理而非 DAC 本质,C 指向 MAC,D 指向 ABAC。
Q7. 访问控制列表(ACL)的正确描述是?
- A.挂在客体上的“谁-做什么”名单← 正确答案
- B.发给用户的权限能力清单
- C.密码学中的密钥交换协议
- D.用户所属角色的名称表
答案:A。ACL 是每个资源自己维护的授权名单,写着“谁被允许对该资源做什么”,相当于门边贴的准入名单。B 是能力列表而非 ACL,C 是加密概念,D 是角色表。
Q8. 审计追踪在访问控制中的主要作用包括?
- A.为安全事件提供事后溯源证据← 正确答案
- B.满足法律法规和合规审计要求← 正确答案
- C.实时阻断每一起恶意攻击
- D.帮助评估现有权限配置合理性← 正确答案
答案:ABD。审计提供证据链、支撑合规、辅助权限优化。C 是 IPS/防火墙等实时防护的职责,审计默认是事后分析,除非与实时检测联动,否则传统定位并非“实时阻断”。
Q9. 用户同时拥有“算法工程师”与“项目主管”两个角色,其实际权限集是?
- A.两个角色权限的交集
- B.两个角色权限的并集← 正确答案
- C.系统管理员逐个指定的单独权限
- D.权限较大的那个角色
答案:B。RBAC 中多角色权限取并集,对应公式 $\mathit{Perms}(u)=\bigcup \mathit{Perms}(r)$。就像同时持有多张工卡,能进房间是各卡权限总和。A 交集、D 二选一都不符合 RBAC 语义。
Q10. 在 BLP 模型的“简单安全属性”规则下,下列哪种行为被禁止?
- A.高密级主体读取高密级客体
- B.低密级主体读取高密级客体← 正确答案
- C.高密级主体读取低密级客体
- D.低密级主体读取低密级客体
答案:B。BLP 的简单安全属性即“不上读”:低密级主体不得读取高密级客体,防止越权获取机密。C 是允许的“向下读”,A 和 D 密级匹配也合法。记法口诀:“上读打死,下写打死”。