数据库安全性
4.1 数据库安全性概述
核心问题: 数据共享与安全保密之间的矛盾。数据库中的数据共享是在 DBMS 统一严格控制下的共享——只允许有合法使用权限的用户访问允许其存取的数据。安全保护措施的有效性是数据库系统的主要性能指标之一。
数据库安全性:保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据保密:用户合法访问到机密数据后能否对这些数据保密(通过法律、道德准则和政策法规保证)。
4.1.1 数据库的不安全因素
| 因素 | 说明 | 主要防范技术 |
|---|---|---|
| 1. 非授权用户的恶意存取和破坏 | 黑客猎取用户名和口令,假冒合法用户偷取、修改甚至破坏数据 | 用户身份鉴别、存取控制、视图 |
| 2. 重要或敏感数据被泄露 | 黑客盗窃机密数据 | 强制存取控制、数据加密存储/传输、审计日志分析 |
| 3. 安全环境的脆弱性 | 与计算机系统(硬件、操作系统、网络)安全性紧密联系 | 建立可信计算机系统标准 |
4.1.2 安全标准简介
TCSEC/TDI(橙皮书/紫皮书)
- 1985 年美国国防部颁布《DoD 可信计算机系统评估准则》(TCSEC)
- 1991 年 NCSC 颁布 TDI(紫皮书),将 TCSEC 扩展到数据库管理系统
- 从四个方面描述安全性级别:安全策略、责任、保证、文档
TCSEC/TDI 七级安全划分(从低到高):
| 等级 | 名称 | 说明 |
|---|---|---|
| D | 最低保护 | 不符合更高标准的系统(如 DOS) |
| C1 | 自主安全保护(初级的) | 能实现用户与数据分离,进行自主存取控制(DAC) |
| C2 | 受控存取保护(安全产品最低档次) | DAC 进一步细化,个人身份注册,实施审计和资源隔离(如 Windows 2000、Oracle 7) |
| B1 | 标记安全保护 | 对数据加标记,实施强制存取控制(MAC)和审计(如 Trusted Oracle 7、Secure SQL Server) |
| B2 | 结构化保护 | 建立形式化安全策略模型,对主体和客体实施 DAC 和 MAC |
| B3 | 安全域 | TCB 满足访问监控器要求,审计跟踪更强,提供系统恢复 |
| A1 | 验证设计 | 在 B3 基础上给出系统的形式化设计说明和验证 |
各安全级别具有偏序向下兼容关系:较高级别包含较低级别的所有保护要求。
CC 标准(通用准则)
- 1993 年 CTCPEC、FC、TCSEC、ITSEC 联合行动
- 1999 年 CC V2.1 被 ISO 采用为国际标准;2001 年被我国采用
- 现已基本取代 TCSEC,成为评估信息产品安全性的主要标准
- 安全要求分为:安全功能要求 和 安全保证要求
- 评估保证级 EAL1~EAL7 共七级
4.2 数据库安全性控制
非法使用数据库的几种情况
- 编写合法程序绕过 DBMS 及其授权机制,通过操作系统直接存取/修改/备份数据
- 直接或编写应用程序执行非授权操作
- 推理控制问题:通过多次合法查询推导出保密数据
例:某系统禁止查询个人工资,但允许查一组人平均工资。用户先查包括张三在内的平均工资,再用自己替换张三后查平均工资,从而推导出张三的工资。
计算机系统的安全模型
用户 → 用户标识和鉴别 → 数据库安全保护(存取控制/审计/视图)
→ 操作系统安全保护 → 数据密码存储安全措施是一级一级层层设置的。
存取控制流程
用户请求 → 身份鉴别 → SQL 处理层(DAC检查 → MAC检查 → 推理控制)
→ 审计/入侵检测 → 数据存取常用安全性控制方法
- 用户标识和鉴定
- 存取控制
- 视图
- 审计
- 数据加密
4.2.1 用户身份鉴别
系统提供的最外层安全保护措施。用户标识由用户名和用户标识号组成(标识号在系统生命周期内唯一)。
四种鉴别方法:
| 方法 | 说明 |
|---|---|
| 静态口令鉴别 | 用户自设口令,静态不变 |
| 动态口令鉴别 | 口令动态变化,每次用新口令(一次一密) |
| 生物特征鉴别 | 指纹、虹膜、掌纹等 |
| 智能卡鉴别 | 不可复制的硬件,具有硬件加密功能 |
4.2.2 存取控制
存取控制机制的两部分:
- 定义用户权限 → 登记到数据字典(安全规则/授权规则)
- 合法权限检查 → 用户发出操作请求时 DBMS 查找数据字典进行合法性检查
两种常用存取控制方法:
| 方法 | 安全级别 | 特点 |
|---|---|---|
| 自主存取控制 (DAC) | C2 级 | 灵活,用户可将权限转授他人 |
| 强制存取控制 (MAC) | B1 级 | 严格,数据标密级,用户有许可证 |
- DAC:同一用户对不同数据对象有不同权限;不同用户对同一对象也有不同权限;用户可以转授权限
- MAC:每个数据对象标密级,每个用户被授予许可证级别,只有合法许可证才可存取
4.2.3 自主存取控制方法
通过 SQL 的 GRANT 和 REVOKE 语句实现。
用户权限组成: 数据对象 + 操作类型。
定义用户存取权限 = 授权。
- 定义存取权限 (对象权限):用户
- 检查存取权限 :DBMS
授权粒度
- 数据对象粒度:数据库、表、属性列、行
- 授权粒度越细,授权子系统就越灵活,能够提供的安全性就越完善。但另一方面,因数据字典变大变复杂,系统定义与检查权限的开销也会相应地增大。
4.2.4 授权:授予与回收
一、GRANT 语句
GRANT <权限>[, <权限>]...
ON <对象类型> <对象名>[, <对象类型> <对象名>]...
TO <用户>[, <用户>]...
[WITH GRANT OPTION];发出 GRANT 的人: DBA、数据库对象创建者(属主 Owner)、拥有该权限的用户。
接受权限的人: 一个或多个具体用户,或 PUBLIC(全体用户)。
WITH GRANT OPTION: 指定后可再授予他人;未指定则不能传播;不允许循环授权。
【例题 1】 把查询 Student 表权限授给用户 U1
GRANT SELECT
ON TABLE Student
TO U1;【例题 2】 把对 Student 表和 Course 表的全部权限授予 U2 和 U3
GRANT ALL PRIVILEGES
ON TABLE Student, Course
TO U2, U3;【例题 3】 把对表 SC 的查询权限授予所有用户
GRANT SELECT
ON TABLE SC
TO PUBLIC;【例题 4】 把查询 Student 表和修改学生学号的权限授给 U4
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;对属性列授权时必须明确指出相应属性列名。
【例题 5】 把对表 SC 的 INSERT 权限授予 U5,并允许其再授予其他用户
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;【例题 6-7】 U5 传播权限给 U6,U6 再传播给 U7
GRANT INSERT ON TABLE SC TO U6 WITH GRANT OPTION;
GRANT INSERT ON TABLE SC TO U7;U7 不能再传播此权限(未被授予 WITH GRANT OPTION)。
二、REVOKE 语句
REVOKE <权限>[, <权限>]...
ON <对象类型> <对象名>[, <对象类型> <对象名>]...
FROM <用户>[, <用户>]...
[CASCADE|RESTRICT];【例题 8】 收回用户 U4 修改学生学号的权限
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;【例题 9】 收回所有用户对表 SC 的查询权限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;【例题 10】 收回用户 U5 对 SC 表的 INSERT 权限(需要级联收回)
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;使用
CASCADE级联收回,系统只收回直接或间接从 U5 处获得的权限。
灵活的授权机制小结
- DBA:拥有所有对象的所有权限
- 不同权限可授予不同用户
- 用户:拥有自己创建的对象的全部操作权限
- GRANT:授予其他用户
- 被授权用户有"继续授权"许可时可再授予
- 所有授予出去的权力可用 REVOKE 收回
三、创建数据库模式的权限
CREATE USER 语句:
CREATE USER <username>
[WITH] [DBA|RESOURCE|CONNECT];注:CREATE USER 不是 SQL 标准,各系统实现差异较大。
三种用户权限:
| 权限 | 可做操作 |
|---|---|
| CONNECT(默认) | 登录数据库,不能创建新用户、模式或基本表 |
| RESOURCE | 创建基本表和视图,不能创建模式和新用户 |
| DBA | 创建新用户、模式、基本表等;拥有对所有数据库对象的存取权限,可授权给一般用户 |
只有系统的超级用户才有权创建新的数据库用户。
4.2.5 数据库角色
数据库角色: 被命名的一组与数据库操作相关的权限(权限的集合)。
为一组具有相同权限的用户创建角色,可简化授权过程。
操作命令
一、创建角色
CREATE ROLE <角色名>;二、给角色授权
GRANT <权限>[, <权限>]...
ON <对象类型> <对象名>
TO <角色>[, <角色>]...;三、将角色授予其他角色或用户
GRANT <角色1>[, <角色2>]...
TO <角色3>[, <用户1>]...
[WITH ADMIN OPTION];指定 WITH ADMIN OPTION 后,获得权限的角色或用户可再将权限授予其他角色。
四、角色权限的收回
REVOKE <权限>[, <权限>]...
ON <对象类型> <对象名>
FROM <角色>[, <角色>]...;【例题 11】 通过角色将一组权限授予用户
-- 1. 创建角色 R1
CREATE ROLE R1;
-- 2. 给角色 R1 授权(Student 表的 SELECT、UPDATE、INSERT)
GRANT SELECT, UPDATE, INSERT
ON TABLE Student
TO R1;
-- 3. 将角色 R1 授予王平、张明、赵玲
GRANT R1 TO 王平, 张明, 赵玲;
-- 4. 通过 R1 回收王平的权限
REVOKE R1 FROM 王平;【例题 12-13】 修改角色的权限
-- 给角色 R1 增加 DELETE 权限
GRANT DELETE
ON TABLE Student
TO R1;
-- 收回角色 R1 的 SELECT 权限
REVOKE SELECT
ON TABLE Student
FROM R1;4.2.6 强制存取控制方法 (MAC)
强制存取控制:按照 TDI/TCSEC 标准中安全策略的要求,采取的强制存取检查手段。用户不能直接感知或控制,适用于对数据有严格固定密级分类的部门(如军事、政府部门)。
主体与客体
- 主体:活动实体(实际用户、代表用户的进程)
- 客体:被动实体(文件、基表、索引、视图)
敏感度标记(Label)
每个主体和客体被指派一个敏感度标记(级别):
| 级别 | 说明 |
|---|---|
| 绝密 (Top Secret) | 最高 |
| 机密 (Secret) | 高 |
| 可信 (Confidential) | 中 |
| 公开 (Public) | 低 |
- 主体的敏感度标记 → 许可证级别 (Clearance Level)
- 客体的敏感度标记 → 密级 (Classification Level)
MAC 规则(主体以 Label 注册时)
规则 1(读规则): 仅当主体的许可证级别 >= 客体的密级时,主体才能读取相应的客体。
规则 2(写规则): 仅当主体的许可证级别 <= 客体的密级时(修正规则),主体才能写入相应的客体。
用户可为写入的数据对象赋予高于自己许可证级别的密级。一旦写入,用户自己也不能再读取该数据对象。
共同点: 禁止高许可证级别的主体更新低密级的数据对象(防止高密级数据向下流动)。
MAC 特点
- 对数据本身进行密级标记
- 标记与数据是不可分的整体(无论数据如何复制)
- 只有符合密级要求的用户才能操纵数据
- 提供更高级别的安全性
DAC 与 MAC 的关系
两者共同构成 DBMS 的安全机制。
检查顺序: 先进行 DAC 检查 → 通过后进入 MAC 检查 → 两者均通过方可存取。
SQL语法分析 & 语义检查
↓
┌── DAC 检查 ──┐
└── MAC 检查 ──┘
↓
继续语义检查4.3 视图机制
视图机制将需要保密的数据对无权存取的用户隐藏起来,提供一定程度的安全保护。
- 视图主要功能是提供数据独立性,安全保护功能相对较粗
- 通常与授权机制配合使用
用法:
- 先用视图机制屏蔽保密数据
- 再在视图上进一步定义存取权限
- 间接实现了支持存取谓词的用户权限定义
【例题 14】 建立计算机系学生视图并授权
-- 1. 建立计算机系学生视图 CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM Student
WHERE Sdept = 'CS';
-- 2. 将视图的 SELECT 权限授予王平
GRANT SELECT
ON CS_Student
TO 王平;
-- 3. 将视图的所有操作权限授予张明
GRANT ALL PRIVILEGES
ON CS_Student
TO 张明;4.4 审计
审计:启用专用的审计日志 (Audit Log),将用户对数据库的所有操作记录在上面。DBA 利用审计日志追踪信息,监控数据库中的各种行为,找出非法存取数据的人、时间和内容。
C2 以上安全级别的 DBMS 必须具有审计功能。
审计功能的特点
- 可选性:审计很费时间和空间,DBA 可根据应用需求灵活打开/关闭
- 主要用于安全性要求较高的部门
1. 审计事件
| 事件类型 | 说明 |
|---|---|
| 服务器事件 | 数据库服务器发生的事件 |
| 系统权限 | 对系统结构/模式对象的操作(通过系统权限获得) |
| 语句事件 | SQL 语句(DDL、DML、DQL、DCL) |
| 模式对象事件 | 特定模式对象上的 SELECT 或 DML 操作 |
2. 审计功能
- 提供多种审计查阅方式
- 多套审计规则(一般在初始化设定)
- 提供审计分析和报表功能
- 审计日志管理(防止误删,日志必须先转储后删除)
- 对转储的审计记录文件提供完整性和保密性保护
- 只允许审计员查阅和转储审计记录,不允许新增和修改
- 提供查询审计设置和审计记录的专门视图
审计分类
| 类型 | 说明 |
|---|---|
| 用户级审计 | 针对用户自己创建的数据库表或视图,记录所有成功/不成功的访问及各种 SQL 操作 |
| 系统级审计 | DBA 设置,监测登录成败、GRANT/REVOKE 操作及其他数据库级权限操作 |
审计语句
AUDIT <...>; -- 设置审计功能
NOAUDIT <...>; -- 取消审计功能安全机制总结
- 预防/监测手段:审计技术
- 强制性机制:用户识别和鉴定、存取控制、视图
4.5 数据加密
数据加密是防止数据库中数据在存储和传输中失密的有效手段。
基本思想: 根据一定算法将明文 (Plain text) 变换为密文 (Cipher text),不知道解密算法的人无法获知数据内容。
存储加密
| 方式 | 说明 |
|---|---|
| 透明存储加密 | 内核级加密,对用户完全透明。数据写入磁盘时加密,授权用户读取时解密。应用程序无需修改,只需在建表时说明需加密的字段。性能较好,安全完备性较高。 |
| 非透明存储加密 | 通过多个加密函数实现 |
传输加密
| 方式 | 说明 |
|---|---|
| 链路加密 | 在链路层加密,报文和报头均加密 |
| 端到端加密 | 发送端加密,接收端解密。只加密报文不加密报头。所需密码设备较少,但容易被非法监听者发现并获取敏感信息。 |
基于 SSL 协议的传输加密方案
- 确认通信双方端点的可靠性:基于数字证书的服务器和客户端认证,使用 CA 信任列表和证书撤销列表验证
- 协商加密算法和密钥:通信双方协商本次会话的加密算法与密钥
- 可信数据传输:数据发送前用密钥加密和消息摘要计算,以密文传输;接收时用相同密钥解密和摘要计算
4.6 其他安全性保护
推理控制
- 处理强制存取控制未解决的问题
- 避免用户利用能够访问的数据推知更高密级的数据
- 常用方法:
- 基于函数依赖的推理控制
- 基于敏感关联的推理控制
隐蔽信道
- 处理强制存取控制未解决的问题
数据隐私保护
- 描述个人控制其不愿他人知道或他人不便知道的个人数据的能力
- 范围涵盖:数据收集、数据存储、数据处理和数据发布等各个阶段
本章小结
本章围绕数据库安全性展开,重点说明 DBMS 如何通过身份鉴别、存取控制、审计和加密等机制保护数据。
关键内容
- 安全性概念:数据库安全性用于防止非法使用数据库造成数据泄露、更改或破坏,安全保护需与数据共享相协调。
- 安全标准:TCSEC/TDI 和 CC 标准用于评价可信计算机系统和数据库系统的安全级别。
- 身份鉴别:通过静态口令、动态口令、生物特征、智能卡等方式确认用户身份。
- 存取控制:自主存取控制(DAC)通过
GRANT/REVOKE灵活授权,强制存取控制(MAC)通过主体和客体密级实现严格保护。 - 视图、审计与加密:视图隐藏敏感数据,审计记录用户行为,数据加密保护存储和传输过程中的机密性。
- 角色管理:通过角色统一管理一组权限,降低授权维护复杂度。
核心要点
- 数据库安全控制通常按身份鉴别、存取控制、操作审计和数据加密等层次协同工作。
- DAC 灵活但依赖授权传播控制,MAC 更严格,适用于多级安全需求。
- 视图机制与授权机制结合,可以实现更细粒度的数据访问控制。
关键术语
数据库安全性, TCSEC, TDI, CC, 用户身份鉴别, DAC, MAC, GRANT, REVOKE, 角色, 视图机制, 审计, 数据加密, 推理控制, 隐蔽信道。
关键 SQL 语句
-- 授权
GRANT <权限> ON <对象类型> <对象名> TO <用户> [WITH GRANT OPTION];
-- 收回权限
REVOKE <权限> ON <对象类型> <对象名> FROM <用户> [CASCADE|RESTRICT];
-- 创建用户
CREATE USER <username> [WITH DBA|RESOURCE|CONNECT];
-- 角色管理
CREATE ROLE <角色名>;
GRANT <权限> ON <对象类型> <对象名> TO <角色>;
GRANT <角色> TO <用户> [WITH ADMIN OPTION];
REVOKE <角色> FROM <用户>;
-- 审计
AUDIT <...>;
NOAUDIT <...>;