文档介绍:第8章数据库保护
为了保证数据库中数据的安全可靠和正确有效,DBMS必须提供一套有效的数据保护功能。数据保护包括数据的安全性、完整性、并发控制和故障恢复。
数据库的一个显著特点是数据的共享,各个事务程序都可以访问数据库中的数据。如果各个事务串行工作,即一个事务执行结束后才开始另一个事务,情况就简单多了。但如果多个事务并行工作,即同时有几个事务在执行,情况就比较复杂,因为并行工作的各个事务可能会造成数据库中数据的不一致。也会引起其它一些意外情况的发生。
保证数据库的安全性与完整性的各种措施,并不能避免因各种意外情况,如硬件故障、操作失误甚至人为的恶意破坏,所造成的事务的非正常中断而导致数据库中数据的丢失。所以必须有安全措施能恢复数据库到一个已知的正确状态。
数据库中数据的完整性保护,由DBMS提供的完整性检查机制来实现。该机制会自动检查数据库中数据,看其是否符合完整性约束条件。完整性约束条件作为数据库模式的一部分存储在数据库中。有关这方面的内容,前已述及。本章将学习数据库保护中有关并发控制、故障恢复和安全性等方面的内容。
本章内容:
并发控制
并发可能出现的问题
封锁(Locking)
三级封锁协议
加锁请求的选择策略和活锁
死锁
并发调度的可串行性
两段封锁协议
多粒度封锁
意向锁
数据库恢复技术
故障的种类
故障恢复的手段
恢复方法
数据库安全
用户标识和监别
访问控制
强制存取控制方法
视图和查询修改
跟踪审计
数据加密
并发控制
串行访问(serial access):事务都是顺序执行的,即一个事务结束后才能运行另一事务。
并行访问(concurrent access):多个事务同时执行。
交叉并发(interleaved concurrency)
单CPU系统中,多个事务交叉使用CPU
同时并发(simaltaneous concurrency)
多CPU系统中,多个事务同时占用CPU
并发操作的两个好处:
提高系统的资源利用率。一个事务在不同的执行阶段需要的系统资源是不同的,CPU、通信、输入设备、…。串行工作会造成资源空闲。并发执行可以交叉使用各种资源,提高资源利用率。
改善短事务的响应时间。两个事务T1和T2,T1执行时间较长,T2所需时间很短。串行执行时若T1比T2稍早执行,则T2要等很长时间才能得到响应。而在并发情况下,T2可与T1并发执行,响应时间明显缩短。
并发可能出现的问题
不加控制的并发操作,可能引起数据的不一致性有:丢失更新、读脏数据和不可重复读。
读A=10
读A=10
A=A+100
写回A=110
A=A+100
写回A=110
T1
T2
(更新)
Lost Update
读B=20
B=B+100
写回B=120
读 B=120
ROLLBACK
B=20
T1
T2
Dirty Read
读C=30
读C=30
C=C+100
写回C=130
读C=130
T1
T2
Non-Repeatable
Read
以上三种数据不一致性产生的原因在于:一个事务未执行完时,就开始执行另一事务了。如果一个事务在修改数据时,其他事务不得修改同一数据,就不会产生丢失更新的情况;如果一个事务在更新数据时,其他事务不得读取该数据,则不会产生读脏数据的情况,也不会产生不可重复读的情况。这就是封锁(Locking)的目的。
封锁(Locking)
封锁是实现并发控制的一个非常重要的技术。封锁可避免并发操作可能出现的问题。
某事务在对某数据对象(如:表、记录等)执行操作前,首先必须对此对象加上自己的锁。加锁成功后,才能执行相应的操作,而此时其他事务对该对象的操作就受到了规定的限制。该事务完成自己的操作之后,必须把先前加上的锁撤销,以便使其他事务可以执行各自的操作。
锁的基本类型有两种:
排它锁(Exclusive Lock,简称X锁、写锁)
共享锁(Share Lock,简称S锁、读锁)
Y
Y
N
S
Y
N
N
X
None
S
X
T1
T2
N:不相容的请求,Y:相容的请求
封锁相容矩阵
None
Y
Y
三级封锁协议
对数据对象加锁时