三级数据库第九章考试要点
第九章
一、事务概念和事务的特性
事务是构成单一逻辑工作单元的操作集合。不论有无故障,数据库系统必须保证事务的正确执行,即要么执行该事务的整个操作集合,要么属于该事务的操作一个也不执行。为了保证事务的正确执行,维护数据库的完整性,我们要求数据库系统维护以下事务特性:①原子性(atomicity)事务的所有操作在数据库中要么全部正确反映出来,要么全部不反映。②一致性(consistency)从事务的隔离执行(即没有并发执行的其他事务)来保持数据库的一致性。③隔离性(isolation)尽管多个事务可以并发执行,但系统必须保证,对任一事务Ti和Tj,在Ti看来Tj或者在Ti开始之前已经停止执行,或者在Ti完成之后开始执行。这样,每个事务都感觉不到系统中有其他事务在并发地执行。④持久性(durability)一个事务成功完成后,它对数据库的改变必须是永久的,即使系统可能出现故障。这些特性通常被称为ACID特性。解决事务并发执行问题的一种方法是串行地执行事务,即一个接一个地执行。但这样性能较低,事务并发执行能显著地改善性能。因此,数据库管理系统中有一个并发控制部件,它保证事务隔离性,即确保事务并发执行后的系统状态与这些事务以某种次序一个接一个地执行后的状态是等价的。成功完成执行的事务称为已提交事务。已提交事务使数据库进入一个新的一致状态,即使出现系统故障,这个状态也必须保持。未能成功完成的事务称为中止事务,中止事务必须对数据库的状态不造成影响,即中止事务对数据库所做的任何改变必须撤销。一旦中止事务造成的变更被撤销,则称事务已回滚。
二、故障恢复(一)故障的类型
(1)事务故障用两种错误可能造成事务执行失败:①逻辑错误。②系统错误。事务故障意味着事务没有达到预期的终点,因此,数据库可能处于不一致状态。恢复子系统需要强行回滚该事务,即撤销该事务对数据库已做的所有的修改,这称做事务的撤销或回滚。(2)系统故障硬件故障或者是数据库软件或操作系统的漏洞,导致系统停止运行。主存储器内容丢失,而外存储器仍完好无损。发生系统故障时,可能有些未完成事务所做的数据库修改已经写入到外存的数据库中,因此,数据库可能处于不一致状态。为保证一致性,在系统重新启动时必须强行回滚由于系统故障而非正常终止的事务(UNDO)。另一方面,发生系统故障时,可能有些已完成事务所做的数据库修改仍部分或全部留在系统缓冲区,尚未写入到外存的数据库中,这也会使数据库处于不一致状态。在系统重新启动时恢复子系统必须重做(REDO)所有已提交的事务,以保证事务的持久性和数据库的一致性。(3)磁盘故障在数据传送操作过程中由于磁头损坏或故障造成磁盘块上的内容丢失。这类故障比前两类故障发生的可能性小,但危害大。发生磁盘故障时,可以利用其他磁盘上的数据拷贝,或三级介质(如磁带)上的备份来进行恢复。
(二)基于日志的恢复
保证在故障发生后仍保持数据库一致性以及事务的原子性的算法称为恢复算法,它由两部分组成:
(1)在正常事务处理时采取措施,记录数据库中的更新活动,保证有足够的信息可用于故障恢复。
(2)故障发生后采取措施,将数据库内容恢复到某个保证数据库一致性、事务原子性及持久性的状态。使用最为广泛的记录数据库中更新活动的结构是日志。日志是日志记录的序列,它记录了数据库中的所有更新活动。1.日志的登记日志文件在数据库恢复中起着非常重要的作用,它能够很好地支持事务故障的恢复和系统故障的恢复。利用更新日志记录中的改前值可以进行UNDO,撤销已做的修改操作,将数据项恢复到修改以前的旧值;利用更新日志记录中的改后值可以进行REDO,重做已完成的操作,将数据项置为修改后的新值。登记日志记录时必须遵循以下原则:登记的顺序严格按照事务的并发执行中各操作发生的实际顺序;必须先把日志记录写到外存的日志文件中,再把相应的数据库修改写到外存的数据库中。这称做先写日志的原则,是为了发生故障后保持数据库的原子性和持久性所必须遵循的原则。发生故障后的恢复
(1)事务故障恢复的步骤①反向扫描日志文件,查找该事务的更新操作。②对该事务的每一个更新操作执行逆操作,即将日志记录中“改前值”写入数据库。于是,若日志记录对应的是插入操作,则这时做删除操作;若日志记录对应的是删除操作,则这时做插入操作;若日志记录对应的是修改操作,则这时用修改前的值代替修改后的值。③如此处理下去,直至读到该事务的开始日志,则事务故障恢复结束。
(2)系统故障恢复的步骤①正向扫描日志文件,找出在故障发生前已提交的事务,将其事务标识记入REDO队列;找出在故障发生时尚未完成的事务,将其事务标识记入UNDO队列。②对UNDO队列中的事务进行UNDO处理,即反向扫描日志文件,对每一个需要UNDO的事务的更新操作执行逆操作。③对RREDO队列中的事务进行REDO处理,即正向扫描日志文件,对每一个需要REDO的事务的更新重新执行日志记录登记的操作。磁盘的恢复需要有DBA介入,装入最新的数据库后备副本,和有关的日志文件副本,然后由系统进行恢复工作。
三、并发控制(一)事务的并发执行
①丢失更新②对未提交更新的依赖③不一致的分析
(二)并发事务的调度
这两个调度都是串行的。串行调度由来自各事务的指令序列组成,其中属于同一事务的指令在调度中紧挨在一起。当多个事务并发执行时,相应的调度不一定是串行的。若有两个并发执行的事务,操作系统可能先选其中的一个事务执行一小段时间,然后切换上下文,执行第二个事务一段时间,接着又切换到第一个事务执行一段时间,如此下去。执行顺序可能会有多种,因为来自两个事务的各条指令可以交*执行。如果并发执行的控制完全由操作系统负责,许多调度都是可能的,包括像上述调度那样使数据库处于不一致状态的调度。保证任何调度执行后数据库总处于一致状态是数据库系统的职责。数据库系统中完成此任务的部件是并发控制部件。
(三)可串行化
直观地说,如果多个事务在某个调度下的执行结果与这些事务在某个串行调度下的执行结果相同,则称这个调度为可串行化的调度。下面用等价的概念来定义可串行化的概念。如果某个调度等价于一个串行调度,则称这个调度是可串行化的。并发调度3等价于串行调度1,于是称调度3是一个可串行化的调度。可串行化是多个事务并发执行的正确性准则。多个事务在某个调度下的执行是正确的,是能保证数据库一致性,当且仅当该调度是可串行化的。
(四)可恢复性
因一个事务故障导致一系列事务回滚的现象称为级联回滚。由于级联回滚导致撤销大量工作,因此不希望发生级联回滚。我们希望对调度加以限制,避免级联回滚发生,这样的调度称为无级联调度。
(五)基于封锁的并发控制
数据库管理系统对事务的并发执行进行控制,以保证数据库一致性,最常用的方法是封锁的方法,即当一个事务访问某个数据项时,以一定的方式锁住该数据项,从而限制其他事务对该数据项的访问。给数据项加锁的方式有多种,我们只考虑最基本的两种:①共享锁:如果事务Ti获得了数据项Q上的共享型锁(记为S),则Ti可读Q但不能写Q。②排他锁:如果事务Ti获得了数据项Q上的排他型锁(记为X),则Ti既可读Q又可写Q。我们要求在系统中的每一个事务遵从称为封锁协议的一组规则,这些规则规定事务何时对各数据项进行加锁、解锁。封锁协议限制了可能的调度数目。保证可串行性的一个协议是两阶段封锁协议。该协议要求每个事务分两个阶段提出加锁和解锁申请:①增长阶段。事务可以获得锁,但不能释放锁。②缩减阶段。事务可以释放锁,但不能获得新锁。一开始,事务处于增长阶段。事务根据需要获得锁。一旦该事务释放了锁,它就进入了缩减阶段,不能再发生加锁请求。两阶段封锁协议保证可串行性。对于任何事务,在调度中该事务获得其最后加锁的刻(增长阶段结束点)称为事务的封锁点。将多个事务根据它们的封锁点进行排序,这个顺序就是事务的一个可串行性次序。可以通过将两阶段封锁修改为严格两阶段封锁协议来避免级联回滚。严格两阶段封锁协议除了要求封锁是两阶段之外,还要求事务持有的所有排他锁必须在事务提交后方可释放。这个要求保证未提交事务所写的任何数据在该事务提交之前均以排他方式加锁,防止了其他事务读这些数据。
四、数据库安全性(一)安全性措施的层次
为了保护数据库,必须在几个层次上采取安全性措施:①物理层。计算机系统所位于的节点(一个或多个)必须在物理上受到保护,以防止入侵者强行闯入或暗中潜入。②人员层。对用户的授权必须格外小心,以减少授权用户接受贿赂或其他好处而给入侵者提供访问机会的可能性。③操作系统层。不管数据库系统多安全,操作系统安全性方面的弱点总是可能成为对数据库进行未授权访问的一种手段。④网络层。由于几乎所有的数据库系统都允许通过终端或网络进行远程访问,网络软件的软件层安全性和物理安全性一样重要,不管在Internet上还是在企业私有的网络内。⑤数据库系统层。数据库系统的某些用户获得的授权可能只允许他访问数据库中有限的部分。而另外一些用户获得的授权可能允许他提出查询,但不允许他修改数据。保证这样的授权限制不被违犯是数据库系统的责任。为了保证数据库安全,必须在上述所有层次上进行安全性维护。如果较低层次上(物理层或人员层)安全性存在缺陷,高层安全性措施即使很严格也可能被绕过。
(二)权限和授权
用户对于数据库可以有几种不同形式的访问权限,其中包括:①read权限允许读取数据,但不允许修改数据。②insert权限允许插入新数据,但不允许修改已经存在的数据。③update权限允许修改数据,但不允许删除数据。④delete权限允许删除数据。用户可以获得上面的所有权限类型或其中一部分的组合,也可以根本不获得任何权限。除了以上几种对数据访问的权限外,用户还可以获得修改数据库模式的权限:①index权限允许创建和删除索引。②resource权限允许创建新的关系。③alteration权限允许增加或删除关系中的属性。④drop权限允许删除关系。最大的权限形式是给数据库管理员的。数据库管理员可以给新用户授权,可以重构数据库,等等。这一权限形式类似于操作系统中提供给超级用户的权限。
(三)在SQL中进行安全性说明
SQL数据定义语言中包含了权限授予和回收的命令。SQL标准包括delete、insert、select和update权限。select权限对应于read权限。SQL还包括了references权限,用来限制用户在创建关系时定义外码的能力。如果即将创建的关系中包含参照其他关系的属性的外码,那么用户必须在这些属性上具有references权限。grant语句用来授予权限,这一语句的基本形式如下:grant<权限列表>on<关系名或视图名>to<用户列表>权限列表使得一个命令可以授予多个权限。
(四)加密
好的加密技术具有如下性质:①对授权用户来说,加密数据和解密数据相对简单。②加密模式不应依赖于算法的保密,而是依赖于被称做密钥的算法参数。③对入侵者来说,确定密钥是极其困难的。
(五)可信计算机系统评估标准
1985年美国国防部(DoD)颁布的“可信计算机系统评估标准”,又称桔皮书。1991年美国计算机安全中心(NCSC)颁布了“可信计算机系统评估标准关于可信数据库系统的解释”又称紫皮书。
TDI和TCSEC一样,从以下4个方面来描述安全性级别划分的指标:安全策略、责任、保证、文档。每个方面又细分为若干项。根据计算机系统对各项指标的支持情况,TCSEC(TDI)将系统划分为4组7个安全级别,按系统可靠或可信程度逐渐增高依次为、C1、C2、B1、B2、B3、A1。安全级别之间具有一种偏序向下兼容的关系,即较高安全性级别提供的安全保护要包含较低级别的所有安全保护,并且提供更多或更完善的保护能力。D级是最低安全级别。C2级是实际安全产品的最低档次。B1级别的产品才被认为是真正意义上的安全产品,达到此级别的产品其名称中多冠以“安全”或“可信”字样,作为区别于普通产品的安全产品出售。B2级以上的系统标准很大程度上还处于研究阶段。