← 返回学习笔记

Lecture 3:数据库安全性

408 学习笔记:Lecture 3:数据库安全性。保留原有知识内容、公式与图示;有对应原件时提供查看和下载入口。

本页目录

描述:本节说明强制存取控制中的主体、客体、许可证级别与密级,整理“不向上读、不向下写”的保密规则,并说明视图与授权的配合方式、审计日志的记录内容和追责作用。

3.1 数据库安全性目标

数据库安全性要防止未授权用户访问、修改、破坏或泄露数据。

主要目标可以用 CIA 三要素概括:

  • 机密性(Confidentiality):数据只向有权主体公开。
  • 完整性(Integrity):数据不能被未授权篡改。
  • 可用性(Availability):授权用户需要时能够使用数据和服务。

常见措施包括身份鉴别、权限授予、存取控制、视图、加密和审计。本课件重点讨论强制存取控制、视图与审计。

3.2 自主与强制存取控制

3.2.1 自主存取控制 DAC

自主存取控制(Discretionary Access Control,DAC)根据用户身份和对象权限表决定访问,权限通常可由对象所有者或管理员授予、收回和转授。

例如 SQL 的:

GRANT SELECT ON Student TO user_a;
REVOKE SELECT ON Student FROM user_a;

DAC 灵活,但若主体能够继续转授权,信息可能沿授权链扩散。

3.2.2 强制存取控制 MAC

强制存取控制(Mandatory Access Control,MAC)由系统根据主体许可证级别和客体密级强制判断,普通用户不能自行改变安全规则。

MAC 常用于具有分级保密要求的系统。

3.3 主体与客体

3.3.1 主体 Subject

主体是系统中的活动实体,能够主动发起访问。

课件列举:

  • DBMS 管理的实际用户。
  • 代表用户运行的进程或会话。

主体被赋予许可证级别/安全级别(clearance)。

3.3.2 客体 Object

客体是被主体访问和控制的被动实体。

课件列举:

  • 文件。
  • 基本表。
  • 索引。
  • 视图。

还可以包括记录、列、存储设备等。客体被赋予密级/敏感度标记(classification/label)。

3.3.3 敏感度标记

课件图按安全级别给主体和客体标记,并示意层次如:

高 ─ 绝密
    机密
    可信/秘密
低 ─ 公开

实际系统的级别名称可不同,关键是安全级别构成可比较的支配关系。

3.4 强制存取规则

设主体 $S$ 的许可证级别为:

$$ L(S), $$

客体 $O$ 的密级为:

$$ L(O). $$

3.4.1 简单安全性规则:不向上读

主体可读客体的条件是:

$$ L(S)\ge L(O). $$

即主体只能读取同级或更低密级的客体,不能读取高于自身许可证级别的数据。

口诀:

No Read Up:不向上读

3.4.2 星号规则:不向下写

主体可写客体的条件是:

$$ L(S)\le L(O). $$

即主体只能写入同级或更高密级的客体,不能把掌握的高密级信息写入低密级对象。

口诀:

No Write Down:不向下写

3.4.3 为什么限制方向相反

  • 禁止低级主体读取高级客体:防止直接窃取机密。
  • 禁止高级主体写入低级客体:防止把已知的机密泄露到低级区域。

两条规则共同保护机密性。

3.4.4 访问判断表

主体与客体级别关系 读 写 原因
$L(S)>L(O)$ 允许 禁止 可向下读,不可向下写
$L(S)=L(O)$ 允许 允许 同级读写
$L(S)<L(O)$ 禁止 允许 不可向上读,可向上写

WARNING · 课件符号纠错 课件写“仅当主体许可证级别 $>$ 客体密级才能读”,遗漏了同级可读。正确条件是 $L(S)\ge L(O)$;写入条件 $L(S)\le L(O)$。因此统一记为“不向上读、不向下写”。

3.5 强制存取控制的特点

  • 安全标签由系统策略强制执行,普通主体不能随意转授。
  • 判断同时依赖主体级别、客体密级和操作类型。
  • 对信息流方向进行限制,重点保护机密性。
  • 即使主体对某对象具有一般权限,若安全级别规则不满足,仍不能访问。

NOTE 实际 MAC 可能不仅比较级别,还比较安全类别集合。常见“支配”关系要求主体级别足够高,且包含客体的全部类别。

3.6 视图的安全作用

3.6.1 隐藏敏感数据

视图只暴露查询结果,不必向用户开放基础表全部行列。

例如隐藏工资列:

CREATE VIEW PublicEmployee AS
SELECT EmployeeID, Name, Department
FROM Employee;

授权用户只能查询视图:

GRANT SELECT ON PublicEmployee TO analyst;

这样可以:

  • 隐藏敏感列。
  • 只暴露满足条件的行。
  • 简化用户看到的数据结构。
  • 减少直接访问基础表的范围。

3.6.2 与授权机制配合

课件给出的典型步骤:

  1. 用视图屏蔽一部分保密数据。
  2. 在视图上只授予所需权限,例如只读 SELECT。
  3. 不向用户授予基础表的直接权限。

视图负责限定“能看到什么”,授权负责限定“能做什么”。

3.6.3 局限

视图的主要作用之一是提供逻辑数据独立性和简化接口,安全保护通常还不够精细。

局限包括:

  • 不能替代身份认证和权限管理。
  • 错误的视图定义可能暴露敏感信息。
  • 多个查询结果组合后可能推断出被隐藏数据。
  • 更新视图可能受可更新性和 CHECK OPTION 规则影响。

因此视图应与授权、行列级策略、审计等机制共同使用。

3.7 审计

3.7.1 定义

数据库审计把用户对数据库的重要操作自动记录到审计日志(Audit Log)中。

典型记录内容:

  • 谁:用户、角色、会话或客户端。
  • 何时:时间戳。
  • 从哪里:主机、IP、应用来源。
  • 做什么:登录、查询、插入、删除、更新、授权、结构变更等。
  • 对什么:数据库、表、视图、对象或记录范围。
  • 结果:成功、失败、影响行数、错误信息。

3.7.2 作用

DBA 或安全人员可利用审计跟踪:

  • 重现导致数据库当前状态的一系列事件。
  • 发现非法或异常访问。
  • 查明访问者、时间、对象和操作内容。
  • 支持安全取证、责任追踪与合规检查。
  • 分析失败登录、权限滥用和高风险操作。

3.7.3 审计不是直接阻止

访问控制和视图主要在操作发生前进行预防;审计主要记录已经发生或尝试发生的行为,用于检测、告警和追责。

访问控制:事前阻止
视图/授权:限制可见范围和操作
审计:事中/事后记录、发现、追踪

3.7.4 审计日志自身保护

审计日志必须防篡改、限制访问并可靠保存,否则攻击者删除日志后就无法追踪。

常见要求:

  • 普通业务用户不能修改审计记录。
  • 审计管理员与业务管理员适当分权。
  • 日志集中保存、备份或写入只追加介质。
  • 设置保存期限、告警规则与定期复核。

3.8 三种机制对比

机制 决策依据 主要作用 局限
强制存取控制 主体许可证级别、客体密级、操作类型 强制控制分级信息流 策略严格、管理复杂
视图 + 授权 视图定义、用户/角色权限 隐藏行列、限制读写范围 不能单独覆盖全部安全需求
审计 实际操作事件 记录、检测、追责、取证 通常不能单独阻止操作

3.9 易错点

  • 主体是主动发起访问的用户/进程,客体是被访问的表、视图、文件等。
  • 主体具有许可证级别,客体具有密级或敏感度标记。
  • 读规则是 $L(S)\ge L(O)$,同级可以读;课件中的严格大于号不正确。
  • 写规则是 $L(S)\le L(O)$,高级主体不能向低级客体写入。
  • “不向上读”防低级主体读取机密,“不向下写”防高级主体泄密。
  • MAC 的安全级别检查不能被普通授权直接绕过。
  • 视图可以隐藏数据,但不能替代授权、认证和审计。
  • 只给视图 SELECT 权限时,不应同时给用户基础表的广泛访问权限。
  • 审计负责记录和追责,不等于访问控制,也不保证自动阻止攻击。
  • 审计日志本身必须受到严格保护。

相关知识

3.10 本节复盘

  • 数据库安全关注机密性、完整性和可用性,课件重点是 MAC、视图和审计。
  • MAC 中主体是用户或进程,客体是表、视图、文件、索引等数据对象。
  • 主体用许可证级别标记,客体用密级标记,系统按级别支配关系强制判断。
  • 简单安全性规则是“不向上读”:$L(S)\ge L(O)$ 才能读。
  • 星号规则是“不向下写”:$L(S)\le L(O)$ 才能写。
  • 视图隐藏敏感行列,授权机制再限定用户能在视图上执行的操作。
  • 审计日志记录用户、时间、来源、对象、操作和结果,用于检测、重现与追责。
  • 强制控制负责信息流约束,视图/授权负责最小暴露,审计负责留痕,三者相互补充。