6. 数据库保护
6.1 数据库安全性
### 数据库安全性
- 保护数据库
- 防止不合法使用所造成的数据泄露, 更改或破坏
- 数据库安全性
- 数据库完整性
### 安全措施
- 用户身份鉴别
- 存取控制
- 视图
### 数据库的不安全因素
- 非授权用户恶意访问和破坏
- 重要或敏感数据泄露
- 脆弱的安全环境
### 非授权用户恶意访问和破坏
- 用户身份鉴别
- 存取控制
- 视图
### 重要或敏感数据泄露
- 强制存取控制
- 数据加密存储
- 加密存储
### 脆弱的安全环境
- 安全标准
- 安全性能指标
### 数据库安全性控制
- 用户: 用户标识和鉴别
- 数据库管理系统: 数据库安全保护
- 操作系统: 操作系统安全保护
- 数据库: 数据库密码存储
### 用户身份鉴别
- 静态口令鉴别
- 动态口令鉴别
- 生物特征鉴别
- 智能卡鉴别
### 存取控制
- 定义用户权限
- 登记到数据字典中
- 使用时合法权限检查
### 存取控制
- 自主存取控制 (DAC)
- 强制存取控制 (MAC)
### 自主存取控制
- GRANT 语句
- REVOKE 语句
### 存取控制的对象: 模式
- 模式: CREATE SCHEMA
- 基本表: CREATE TABLE, ALTER TABLE
- 视图: CREATE VIEW
- 索引: CREATE INDEX
### 存取控制的对象: 数据
- 基本表和视图: SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALL PRIVILEGES
- 属性列: SELECT, INSERT, UPDATE, REFERENCES, ALL PRIVILEGES
### 授权: GRANT
GRANT <权限> [, <权限> ...]
ON <对象类型> <对象名> [, <对象类型> <对象名> ...]
TO <用户> [, <用户> ...]
[WITH GRANT OPTION];
- 将指定操作对象的指定操作权限授予指定的用户
### GRANT 语句
- 可以由已经拥有该权限的用户发出
- 可以由 DBA 或属主发出
- WITH GRANT OPTION 子句可以将该权限再授予其他用户
- 不允许循环授权
### 例 1
GRANT SELECT
ON TABLE Student
TO U1;
- 将对表 Student 的查询权限授予用户 U1
### 例 2
GRANT ALL PRIVILEGES
ON TABLE Student, Course
TO U2, U3;
- 将对表 Student 和 Course 的全部操作权限授予用户 U2 和 U3
### 例 3
GRANT SELECT
ON TABLE SC
TO PUBLIC;
- 将对表 SC 的查询权限授予所有用户
### 例 4
GRANT UPDATE (Sno), SELECT
ON TABLE Student
TO U4;
- 将对表 Student 的查询权限和修改学生学号的权限授予用户 U4
### 例 5
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
- 将对表 SC 的插入权限授予用户 U5
- 并允许用户 U5 将此权限再授予其他用户
### GRANT 语句
- 可以一次向一个用户授权
- 可以一次向多个用户授权
- 可以一次传播多个同类对象的权限
- 可以一次完成对不同对象的授权
### 取消授权: REVOKE
REVOKE <权限> [, <权限> ...]
ON <对象类型> <对象名> [, <对象类型> <对象名> ...]
FROM <用户> [, <用户> ...]
[CASCADE|RESTRICT];
### 例 8
REVOKE UPDATE (Sno)
ON TABLE Student
FROM U4;
- 收回用户 U4 对修改学生学号的权限
### 例 9
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
- 收回所有用户对表 SC 的查询权限
### 例 10
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
- 收回用户 U5 对表 SC 的插入权限
- 并级联收回 U5, U6 和 U7 的权限
### 视图机制
- 限制不同用户对数据对象的访问范围
- 可以将需要保密的数据隐藏起来
### 例 14
CREATE VIEW CS_Student AS
SELECT *
FROM Student
WHERE Sdept='CS';
GRANT SELECT ON CS_Student TO 王平;
GRANT ALL PRIVILEGES ON CS_Student TO 张明;
- 创建视图 CS_Student
- 王平只能检索计算机系学生的信息
- 张明拥有检索和修改计算机系学生信息的所有权限
### 审计
- 将用户对数据库的所有操作自动记录到审计日志中
- 审计员可以利用审计日志监控数据库中的各种行为
- 通常比较耗费时间和空间
- 主要用于安全性要求较高的部门
### 审计事件
- 服务器事件
- 系统权限
- 语句事件
- 模式对象事件
- 用户鉴别
- 自主访问控制
- 强制访问控制
### 审计内容
- 普通用户和特权用户的行为
- 各种表操作
- 身份鉴别
- 自主和强制访问控制等操作
### 审计功能
- 基本功能
- 审计规则
- 审计分析
- 报表功能
- 审计日志管理功能
### 数据加密
- 利用特定的算法
- 将原始数据 (明文)
- 转换为不可直接识别的格式 (密文)
### 数据加密
- 存储加密
- 传输加密
### 存储加密
- 透明存储加密
- 非透明存储加密
### 透明存储加密
- 在内核级别加密
- 对用户完全透明
### 传输加密
- 链路加密
- 端到端加密
### 链路加密
- 对传输数据在链路层加密
- 同时加密报头和报文
### 端到端加密
- 在发送端加密
- 在接收端解密
- 只加密报文
- 不加密报头

### 6.1 数据库安全性
- 什么是数据库安全性?
- 列举三种用户身份鉴别的方式.
- GRANT 语句和 REVOKE 语句分别用于什么?
- 什么是 WITH GRANT OPTION, 它有什么用途?
- 视图如何帮助实现数据的安全?
- 审计日志中通常记录哪些类型的事件?
----
[ 5.6 数据库的实施和维护](dbds-5-2.html#/a44)
[| 练习 |](dbds-exec.html)
[ 6.2 数据库完整性](dbds-6-2.html#/overview)