数据库技术与应用第6章-数据库保护机制.ppt

上传人:牧羊曲112 文档编号:5006443 上传时间:2023-05-29 格式:PPT 页数:114 大小:809.50KB
返回 下载 相关 举报
数据库技术与应用第6章-数据库保护机制.ppt_第1页
第1页 / 共114页
数据库技术与应用第6章-数据库保护机制.ppt_第2页
第2页 / 共114页
数据库技术与应用第6章-数据库保护机制.ppt_第3页
第3页 / 共114页
数据库技术与应用第6章-数据库保护机制.ppt_第4页
第4页 / 共114页
数据库技术与应用第6章-数据库保护机制.ppt_第5页
第5页 / 共114页
点击查看更多>>
资源描述

《数据库技术与应用第6章-数据库保护机制.ppt》由会员分享,可在线阅读,更多相关《数据库技术与应用第6章-数据库保护机制.ppt(114页珍藏版)》请在三一办公上搜索。

1、1,第6章 数据库保护机制,完整性控制安全性控制并发控制数据库恢复,本章主要内容:,2,第6章 数据库保护机制,数据库中存放着大量的有价值的信息,因此采用怎样行之有效的措施保护数据库是非常重要的。比如,保护数据库数据的正确性、有效性,保护数据库安全性,保护数据库既使是出现各种故障,也能对其进行有效地恢复等等。,3,6.1 数据库的完整性,数据库的完整性指数据的正确性和有效性。数据库的完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓“垃圾进垃圾出”所造成的无效操作和错误结果。数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库完整性是非常重要的

2、。,4,6.1 数据库的完整性,数据库的完整性是由DBMS的完整性控制子系统实现的。其主要功能为:1.完整性检查功能。检查用户发出的操作请求是否违背了完整性约束条件;2.应对操作。如果发现用户操作违背了完整性规则,为保证数据的完整性而采取的动作。(如撤销用户操作),5,6.1.1 完整性规则,完整性规则是指附加在数据库数据上的语义约束条件。每一条完整性规则包括3个部分:(1)触发条件:确定什么操作使用规则进行检查;(2)约束条件:确定要检查什么样的错误;(3)应对措施:确定如果查出错误该怎么处理。完整性规则作用的对象可以是关系、元组和列。,6,6.1.2 SQL Server的完整性,本节介绍

3、SQL Server的完整性控制策略。SQL Server数据完整性有四种类型:实体完整性、域完整性、参照完整性、用户定义完整性,7,1.实体完整性构成主键的主属性不能取空值。体现为:UNIQUE唯一性约束(不允许为null)PRIMARY KEY 约束(不允许为null)例:CREATE TABLE 选课(学号 CHAR(6),,PRIMARY KEY(学号,课号),)或 CREATE TABLE 学生(学号 CHAR(6)UNIQUE,),6.1.2 SQL Server的完整性,8,2.域完整性 属性列(字段)满足的约束条件。体现为:(1)对数据类型的约束:包括数据的类型、长度、单位、精

4、度等。(2)对数据格式的约束 例:规定学号的前两位表示入学年份,中间两位表示系的编号,后四位班级和序号,xxxxxxxx。出生日期:YY-MM-DD,6.1.2 SQL Server的完整性,9,(3)对取值范围或取值集合的约束.例如:规定成绩的取值范围为0100 域级check子句(4)对空值的约束:有的列允许取空值,有的列不允许取空值。(5)设置默认值default约束。,6.1.2 SQL Server的完整性,10,3.参照完整性(外键完整性)两个表之间满足的参照(引用)关系的约束。即:外键表中外键的取值参照主键表中主键的值。体现为:CREATE TABLE 选课(.,FOREIGN

5、KEY(学号)REFERENCES 学生(学号)ON DELETE CASCADE|NO ACTION ON UPDATE CASCADE|NO ACTION,),6.1.2 SQL Server的完整性,说明:CASCADE:级联,NO ACTION:受限(默认),11,4.用户定义完整性用户定义完整性是针对应用业务需要而定义的完整性约束条件。体现为:(1)表定义语句中的CHECK子句(2)触发器(3)规则(下节介绍),6.1.2 SQL Server的完整性,12,6.1.3 使用规则和触发器实现完整性,一般不是很复杂的完整性约束都是在create table语句中定义。更复杂的完整性实现

6、要用触发器和规则。定义表时没有定义的约束,可以在以后通过创建触发器和规则来实现。check约束优先于触发器约束和规则约束执行。,13,*1.使用规则实现完整性 规则是独立于表的单独定义、存储的数据库对象。,CREATE RULE 规则名 AS 约束表达式,规则中可以是能用于WHERE子句中的任何表达式。如:,创建规则,6.1.3 使用规则和触发器实现完整性,14,Birthday=1980-01-01 AND Birthday=GETDATE()grade IN(a,A,B,b,C,c,D,d)code LIKE a-z%0-9 例1 创建sno_rule规则,使得学号只能是6位数字字符。CR

7、EATE RULE sno_rule AS sno LIKE 0-90-90-90-90-90-9,6.1.3 使用规则和触发器实现完整性,15,规则的绑定 创建好规则后,规则只是存储在数据库中的对象并没有发生作用,只有将规则绑定到相应表的属性列,才能实现完整性约束。用存储过程sp_bindrule绑定规则。语法格式:sp_bindrule 规则名,对象名 例2 将规则sno_rule绑定到学生表的学号属性列上。sp_bindrule sno_rule 学生.学号,6.1.3 使用规则和触发器实现完整性,16,规则的松绑 规则绑定后,可以解除,即松绑。用存储过程sp_unbindrule为规则

8、松绑。语法格式:sp_unbindrule 对象名例3 解除规则sno_rule在学生表的学号属性列上的绑定。sp_unbindrule 学生.学号,6.1.3 使用规则和触发器实现完整性,17,删除规则 DROP RULE 规则名1,规则2,注意:在删除规则前,必须先将其从约束对象上解除。,6.1.3 使用规则和触发器实现完整性,18,2.使用触发器实现完整性前面介绍的一些约束机制,属于被动的约束机制。在检查出对数据库的操作违反约束后,只能做些比较简单的动作,比如拒绝操作。如果我们需要产生比规则更为复杂的限制,希望在某个操作后,系统能自动根据条件转去执行各种操作,甚至执行与原操作无关的操作,

9、那么可以用触发器机制来实现。第5章已经介绍过触发器建立和使用。这里我们再 进一步举例说明。,6.1.3 使用规则和触发器实现完整性,19,6.2 安全性控制,6.2.1 安全性概述1.数据库安全性的定义数据库安全性是指保护数据库以防止不合法的使用造成的数据泄露、更改或破坏。所有计算机系统都有安全性问题。由于数据库中存放大量有用信息,从而使安全性问题更为突出。系统安全性保护措施是否有效是数据库系统的主要性能指标之一。,20,图6.1 典型的多用户数据库应用系统环境,数据库系统的安全性依赖于其所在的计算机和网络环境的安全性。见下图。,21,6.2.2 数据库安全性控制的一般方法,1.用户标识与鉴定

10、用户标识与鉴别是DBMS提供的最外层安全性保护措施。用户只有通过鉴定后才被获得系统最外层的权限。用户标识与鉴定的方法很多,常用的有:(1)身份认证:是系统为用户定义的用户名,指用户标识用户ID用户账号。(2)口令:往往与身份认证一起使用。,22,(3)随机运算认证:指非固定口令认证,即用户每次的口令都不一样。鉴别时系统提供一个随机数,用户根据预先约定好的计算过程或函数进行计算,得到口令。2.存取控制用户通过身份鉴别并不意味着他可以任意使用数据库,用户究竟能否使用数据,使用哪些数据,如何使用数据等问题需要进一步由存取控制来确定。,6.2.2 数据库安全性控制的一般方法,23,存取控制又称授权控制

11、,其作用是保证有数据访问资格的用户在授权范围内使用数据,并让未被授权的用户无法接近数据。存取控制机制主要包括两部分:1)定义用户权限,并将用户权限登记到数据字典中。用户权限是指不同用户对于不同数据对象允许执行的操作权限。系统必须提供适当语言定义用户权限,这些定义经过编译后存放在数据字典中,被称为授权规则。,6.2.2 数据库安全性控制的一般方法,24,2)合法权限检查。每个用户发出存取数据库的操作请求后,DBMS查找数据字典,根据授权规则进行合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。用户权限定义和合法性检查机制一起组成了DBMS的安全性子系统。,6.2.2 数据库安

12、全性控制的一般方法,25,3.视图机制视图把用户可以使用的数据定义在视图中,这样用户就不能使用视图定义外的其他数据,从而保证了数据库安全性。,6.2.2 数据库安全性控制的一般方法,26,4.审计(Audit)审记功能就是把用户对数据库的所有操作自动记录下来放入审记日志中。DBA可以利用审记跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。审记通常是很费时间和空间的,所有DBMS往往都将其作为可选功能,允许DBA根据应用对安全性的要求,灵活地打开或关闭审记功能。审记功能一般主要用于安全性要求较高的部门。,6.2.2 数据库安全性控制的一般方法,27,5.数据加

13、密对于高度机密数据,例如金融财务数据、军事数据等等,除以上安全措施外,还可以采用数据加密技术。数据加密是防止数据库中数据在存储和传输中泄露的有效手段。加密的基本思想是:根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文),从而使不知道加密方法的人无法获知数据的内容。,6.2.2 数据库安全性控制的一般方法,28,加密方法分为两类:,6.2.2 数据库安全性控制的一般方法,加密方法涉及要素:加密密钥(好比密码)、解密密钥和算法。加密时,用加密算法根据明文和加密密钥生成密文;解密时,用解密算法对密文和解密密钥进行运算得到明文。,29,6.2.3 SQL Seerver的安全性控制,SQ

14、L Server2000有3个等级的安全验证:,30,6.2.3.1 SQL Server 安全验证,SQL Server安全验证是根据用户登录 SQL Server时提供的登录名和密码验证用户是否可以连接SQL Server。SQL Server安全身份验证机制提供两种模式:Windows验证模式和混合验证模式。,31,1.Windows身份验证模式Windows 验证利用Windows 操作系统本身验证用户合法性的能力,允许用户通过 Windows 用户帐户连接到SQL Server。使用这种模式,用户只能使用Windows验证登录,不能使用SQL Server 验证登录。,6.2.3.1

15、 SQL Server 安全验证,32,2.混合验证模式使用这种验证模式,用户可以使用Windows 验证或者SQL Server验证连接到SQL Server。登录时两者中选择一种。,6.2.3.1 SQL Server 安全验证,33,SQL Server 把设定的用户名身份信息(比如登录名和密码)存在Master数据库的表sysxlogins中。SQL Server有一个特殊的内置登录名:sa(System Administrator,系统管理员),拥有在SQL Server上的一切权限;BUILTIN Administrator是另一个内置登录名,这是SQL Server为Window

16、s NT(基于NT的)系统管理员设置的默认登录名,也拥有SQL Server上一切权限。,6.2.3.1 SQL Server 安全验证,34,在SQL Server上管理用户身份信息主要有两种方法:一是在企业管理器中利用图形界面来管理;另一种是利用SQL Server提供的管理用户身份的存储过程,来管理用户。这些存储过程必须在系统数据库Master中使用(当然要有足够的权限)。,6.2.3.1 SQL Server 安全验证,35,6.2.3.1 SQL Server 安全验证,可视化定义新登录用户,36,(1)sp_addlogin:创建用户身份信息 Exec sp_addlogin s1

17、,111111,教学数据库 创建一条用户身份信息,登录名s1,密码111111,默认数据库教学数据库。(2)sp_droplogin:删除用户身份信息 Exec sp_droplogin s1 删除s1用户身份信息。,6.2.3.1 SQL Server 安全验证,37,(3)sp_grantlogin:将Windows的用户或用户组添加成SQL Server的登录名。Exec sp_grantlogin zhujing-pcu1将Windows用户u1添加成SQL Server的登录名。(zhujing-pc为计算机域名)(4)sp_denylogin:拒绝某Windows用户(或用户组)连

18、接到SQL Server。Exec sp_denylogin u1 拒绝Windows用户u1连接到SQL Server。,6.2.3.1 SQL Server 安全验证,38,(5)sp_revokelogin:删除某Windows用户在SQL Server上的用户身份信息。Exec sp_revokelogin zhujing-pcu1删除Windows用户u1在SQL Server上的身份信息。,6.2.3.1 SQL Server 安全验证,39,6.2.3.2 数据库安全验证,用户成功连接到SQL Server后,如果想访问某个数据库,他们还必须在数据库中有账号,否则对该数据库的访问

19、就会遭到拒绝。,40,6.2.3.2 数据库安全验证,数据库账号与登录名区别:登录名作用范围是整个SQL Server,使用一个登录名可以跟服务器上所有数据库进行交互。数据库账号的作用范围只是一个数据库,它是一个或多个登录名在某个数据库上的映射,数据库账号相关信息存储在各个数据库的sysusers表中。,41,数据库账号与登录名关系:同一个登录名可以映射到不同数据库上的不同数据库账号;但在一个数据库上,一个登录名只能有一个映射,多个登录名可以映射到同一个数据库账号。默认情况下,新创建的每个数据库只有一个账号dbo,系统管理员登录名sa默认映射到每个数据库的dbo账号。,6.2.3.2 数据库安

20、全验证,42,guest账号:一般情况下,数据库账号总跟某个(或某些)登录名之间有映射关系,但是guest账号除外,他不跟特定登录名建立映射关系,那些在数据库中没有对应账号的登录名都映射到guest。master和tempdb数据库中必须存在guest账号,其他数据库中可以任意添加或删除guest账号。,6.2.3.2 数据库安全验证,43,当一个登录名请求访问一个数据库时,SQL Server在该数据库的sysusers表中查找该登录名对应的数据库账号,如果查到,则可以访问该数据库,如果没找到,SQL Server则试图将该登录账号映射成guest数据库账号,如果还失败,那么这个登录名就不能

21、访问该数据库。,6.2.3.2 数据库安全验证,44,管理数据库账号的核心是管理登录名跟数据库账号之间的映射关系。管理数据库账号可用企业管理器的图形界面。也可以通过系统存储过程进行。(1)sp_grantdbaccess 创建数据库账号,并建立登录名到账号的映射。该存储过程只能对当前数据库使用。例:use 教学数据库 Exec sp_grantdbaccess s1,u1,6.2.3.2 数据库安全验证,45,说明:如果数据库账号u1不存在,则创建该账号,在数据库中把登录名s1映射到账号u1。第二个参数(数据库账号)可省略,省略时表示它跟第一个参数(登录名)相同。,6.2.3.2 数据库安全验

22、证,46,(2)sp_revokedbaccess 删除数据库账号,该存储过程只能对当前数据库使用。例:Exec sp_revokedbaccess s1,u1 删除数据库中的账号u1。在删除任何登录名之前,必须先删除各个数据库中该账号映射的账号,以免留下“孤立”账号,没有任何登录名映射到它。每个数据库的dbo账号都不能删除。,6.2.3.2 数据库安全验证,47,6.2.3.2 数据库对象的安全验证,一个用户通过登录名的映射在一个数据库中拥有账号后就可以访问这个数据库了,但是用户在这个数据库上究竟可以做些什么操作,这要由这个数据库上的权限设置来决定。数据库的权限设置在数据库账号之上(只有CR

23、EATE DATABASE语句权限例外,它由sa授权登录名),有效作用范围是单个数据库,权限不能跨越数据库。,48,数据库的权限分为两类:语句权限和对象权限。,1.语句权限 语句权限是指创建数据库和数据库对象以及备份数据库的权限。语句权限针对的是SQL语句的执行,而不是数据库中已经存在的某些对象。表6-1列出了SQL Server中语句权限适用的语句。,6.2.3.2 数据库对象的安全验证,49,表6.1 语句权限适用的语句,6.2.3.2 数据库对象的安全验证,50,2.对象权限是指操作数据和执行存储过程的权限。,表6.2 对象权限适用的对象和操作,51,3.权限管理 权限管理可以通过企业管

24、理器进行,也可以用T-SQL完成。下面我们简单介绍一下如何用T-SQL管理权限。权限管理主要有授权、收回权限和拒绝三类。授权是规定某数据库账号可以执行某个操作,用GRANT语句进行授权操作。,6.2.3.2 数据库对象的安全验证,52,授权语句:GRANT ALL PRIVILEGES|权限1,权限2,ON 对象名 TO 用户账号1,账号2,6.2.3.2 数据库对象的安全验证,例1:授予u1账号创建视图的权限。GRANT CREATE VIEW TO u1,53,例2:授予u1账号对学生表具有insert权限。GRANT INSERT ON 学生 TO u1,例3:把查学生表和修改学生学号的

25、权限授予用户u4。GRANT SELECT,UPDATE(学号)ON 学生 TO u4,6.2.3.2 数据库对象的安全验证,54,回收权限语句:REVOKE 权限1,ON 对象名 FROM 用户名,例4:回收u1账号创建视图的权限。REVOKE CREATE VIEW FROM u1,6.2.3.2 数据库对象的安全验证,回收权限:是撤销某数据库账户在某数据对象上的操作权限。,55,拒绝语句:DENY 权限1,ON 对象名 TO 用户名,例4:规定u1账号不能创建视图。DENY CREATE VIEW TO u1,6.2.3.2 数据库对象的安全验证,拒绝:是显式地规定某数据库账户不能执行某

26、个操作。,56,4.角色 用户在SQL Server系统内进行任何操作,必须要有相应的权限,因此为不同用户分配合适的权限是数据库管理员例行公事。然后,如果一个数据库用户太多,如有5000人,要为他们一一分配权限工作量就显得太大。而现实中许多用户权限是相同的,或者大部分的权限只是少数几种情形的组合,为此,SQL Server提供了“角色”,以方便权限管理。,6.2.3.2 数据库对象的安全验证,57,实际工作时,权限管理大多通过角色进行,很少直接对用户(数据库账号)分配权限。角色有三种类型:用户定义的角色固定的数据库角色(SQL Server系统定义)固定的服务器角色(SQL Server系统定

27、义),6.2.3.2 数据库对象的安全验证,58,表6.3 固定的数据库角色,6.2.3.2 数据库对象的安全验证,59,表6.3 固定的数据库角色(续),固定的服务器角色,如下表6.4,6.2.3.2 数据库对象的安全验证,60,表6.4 固定的服务器角色,6.2.3.2 数据库对象的安全验证,61,一般情况下用户从多个角色获得的权限是叠加的,如果其中一个角色没有被授予某个权限(或者授予后又回收了),而另一个角色被授予了该权限,则该用户仍然拥有该权限。实际工作中,有时也需要排除某角色的某个操作权限,凡成为该角色的用户,都不能拥有该权限。对此可以用“拒绝”权限管理方法。“拒绝”具有最高优先权。

28、,用户定义的角色:,6.2.3.2 数据库对象的安全验证,62,如果某个用户同时是几个角色的成员,如果其中一个角色拒绝了某个权限A,则不管其他角色是否授权了A,该用户都没有A权限。,例:用户u是角色A、B和C的成员。三个角色权限如表6.5所示。则用户u的权限如表6.6。,6.2.3.2 数据库对象的安全验证,63,表6.5 角色A、B和C的权限,6.2.3.2 数据库对象的安全验证,64,表6.6 用户u 的权限,6.2.3.2 数据库对象的安全验证,65,过了一段时间后,需要对权限调整,调整后三个角色的权限如表6.7所示。则调整后用户U的权限如表6.8。,表6.7 角色A、B和C的权限,6.

29、2.3.2 数据库对象的安全验证,66,表6.8 调整后用户u 的权限,O表示权限被撤销,X表示权限被拒绝。,6.2.3.2 数据库对象的安全验证,67,6.3 并发控制,数据库是一个共享资源,从理论上讲,对数据库中数据进行存取的用户数目可以是任意多。让多个用户程序并行地存取数据库,可以提高数据库系统的利用率。但这样可能出现多个用户程序并发地访问同一数据资源的情况,对此并发不加控制,就会破坏数据的一致性。所以,必须对并发操作加以控制,以正确顺序方式调度并发操作。,68,6.3.1 事务,1事务(Transaction)事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分

30、割的整体。在RDB中,一个事务可以是一个SQL语句,或一组SQL语句或整个程序。但事务与程序是不同的概念,一个程序中可以包含多个事务。为什么要引入事务的概念呢?让我们来看个例子。,69,例如:假设你来到ATM机前进行转帐工作,让机器“把100元从你的活期存款帐户转到定期帐户”。你插入信用卡,进行了必要的操作,机器将对银行数据库做两次更新:(1)首先从你的活期存款余额取出100元;(2)接着将100元转到你的定期存款帐户中。你确信你转帐的钱已经在你的定期存款帐户。若100元从你的活期存款帐户刚刚转出后,突然停电,你的定期帐户中又没得到这笔钱,怎么办,你的钱丢失了?,6.3.1 事务,70,事务定

31、义:事务可由用户使用事务开始和结束语句显式定义。BEGIN TRANSACTION(事务开始)COMMIT(ROLLBACK)(事务结束)End TRANSACTION 事务结束如果用户没有显式定义事务,则由DBMS按缺省规定自动划分事务。,6.3.1 事务,71,解释:,COMMIT:提交,提交事务的所有操作。即,将事务对数据库所做的所有更新写回到物理数据库中去,事务正常结束。ROLLBACK:回滚。在事务运行过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作撤消,使数据库恢复到该事务执行前的状态。,6.3.1 事务,72,2事务的特性,(1)原子性(Atomic

32、ity):一个事务中对数据库的所有操作,是一个不可分割的整体,要么都做,要么都不做。(由DBMS的事务管理子系统来实现原子性。)(2)一致性(Consistency):一个事务独立执行的结果,将保持数据库的一致性。即事务的执行结果必须是使数据库从一个一致状态变到另一个一致状态。(完整性控制子系统保证),6.3.1 事务,73,(3)隔离性(Isolation):在多个事务并发执行时,一个事务的执行不受其他事务干扰。系统应保证这些事务的并发执行与这些事务先后单独执行时的结果一样。(隔离性由DBMS的并发控制子系统保证。),6.3.1 事务,74,(4)持续性(Durability):也称持久性。

33、指一个事务一旦提交,它对数据库中数据的改变就应该是永久的。即使以后发生故障,也应保留这个事务的执行结果。(持续性由DBMS的恢复子系统保证。)上述四个性质简称事务的ACID性质。保证事务的ACID性质是事务处理的重要任务。,6.3.1 事务,75,事务的ACID性质可能遭到破坏的因素:(1)多个事务并发运行时,不同事务的操作交叉执行相互干扰;(2)事务在运行过程中被强行中止。(由于故障),6.3.1 事务,76,并发事务中各操作执行次序称为“调度”。串行调度:如果多个事务依次执行(一个事务执行完后再执行另一个事务),则称为事务的串行调度。并发调度:如果并发事务中各操作交叉执行,则称为并发调度。

34、下面通过例子来说明并发操作带来的数据不一致性问题。,6.3.2 事务的并发执行,77,例如:分析飞机订票系统。假设有这样一系列操作序列:1)甲售票点(甲事务)读出某航班的机票余额A,设A=16;2)乙售票点(乙事务)读出某航班的机票余额A,也为A=16;3)甲售票点卖出一张机票,修改余额A=A-1,所以A为15,把A写回数据库;4)乙售票点卖出一张机票,修改余额A=A-1,所以A为15,把A写回数据库;,6.3.2 事务的并发执行,78,结果,卖出两张票而余额只减少1。出现了数据不一致。这种不一致就是由并发操作造成的。因为在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的,若按上面的调

35、度序列执行,甲事务的修改就丢失了。仔细分析并发操作,可能会产生以下几种不一致。,6.3.2 事务的并发执行,79,6.3.2 事务的并发执行,80,1)丢失更新(Lost Update):两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。2)不一致分析(Non-Repeatable Read)不一致分析(不可重复读)是指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。具体地讲,不一致分析包括三种情况:,6.3.2 事务的并发执行,81,事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的

36、值。如上例。事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据记录时,发现某些记录神秘消失了。事务T1按一定条件从数据库中读取了某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据记录时,发现多了一些记录。即所谓的“幽灵行”。,6.3.2 事务的并发执行,82,3)读“脏”数据(Dirty Read)读“脏”数据是指事务T1修改某一记录,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改的数据恢复原值,T2读取到的数据就与数据库中的数据不一致,则T2读到的数据就为“脏”数据。产生上面三种数据不一

37、致的主要原因是并发操作破坏了事务的隔离性。,6.3.2 事务的并发执行,83,并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性。并发控制的主要技术就是封锁。,6.3.2 事务的并发执行,84,1.封锁(locking)封锁:就是事务T对某个数据对象操作之前,先向系统申请对其加锁。加锁后事务T就对该数据有了一定的控制权,在事务T释放它的锁之前,其他事务不能更新此数据对象。一、基本封锁有两种:,6.3.3 数据库的并发控制,85,1)排它锁(EXclusive lock 简称X锁):又称写锁。若事务T对数据对象A加上X锁,则只允许T读取和修

38、改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务不能再读取和修改A直到事务T释放其上的X锁。,6.3.3 数据库的并发控制,86,2)共享锁(Shared lock,简称S锁):又称读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。排它锁和共享锁的控制方式可以用相容矩阵来表示。,6.3.3 数据库的并发控制,87,表8-1 相容矩阵,一般对并发操作来说,要对某一数据进行操作时,必先对其进行加锁。,N不相容,Y相

39、容,“-”表示没有加锁或对同一数据无存取要求。,6.3.3 数据库的并发控制,88,封锁粒度:加锁的数据对象大到关系、数据库,也可以小到记录和属性列。我们称封锁数据对象的大小为封锁粒度。封锁粒度大系统开销小,但降低了系统并发度;封锁粒度小,系统并发度高,但开销也高。所以选择合适的封锁粒度是十分重要的,它影响到系统性能。,6.3.3 数据库的并发控制,89,2.死锁封锁方法可能引起活锁和死锁。1)活锁 如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放R上的封锁之后系统

40、又批准了T4的请求T2有可能永远等待,这就是活锁的情形,如下图所示。,6.3.3 数据库的并发控制,90,6.3.3 数据库的并发控制,91,避免活锁的方法:采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一的事务获得锁。,6.3.3 数据库的并发控制,92,2)死锁 如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁数据R2,T1等待T2释放R2上的锁,T2又请求封锁R1,T2不得不等待T1释放R1上的锁,这样就出现了相互等待对方释放锁才能继续执行下去的情形,这种现象就叫死锁。如下图所示

41、。,6.3.3 数据库的并发控制,93,6.3.3 数据库的并发控制,94,解决死锁问题主要有两类方法:1)死锁预防:采用一定措施来预防死锁发生。通常有两种方法。(1)一次封锁法。要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能执行。一次封锁可以有效地防止死锁的发生。但扩大了封锁范围,降低了系统的并发度。,6.3.3 数据库的并发控制,95,(2)顺序封锁法:是预先对数据对象规定一个顺序,所有事务都按照这个顺序实行封锁。顺序封锁法可以有效地防止死锁,但维持数据对象的封锁顺序非常困难,系统消耗大,实现复杂。数据库系统中一般采用死锁诊断与解除的方法。,6.3.3 数据库的并发控制,96,

42、2)死锁诊断与解除:允许死锁发生,采用一定的手段定期诊断系统中有无死锁,若有就解除它。死锁的诊断一般用超时法和等待图法。(1)超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。,6.3.3 数据库的并发控制,97,(2)等待图法等待图是一个有向图G=(T,U)。T为结点的集合,每个结点表示正在运行的事务。U为边的集合,每条边表示事务等待情况。若T1等待T2,则T1和T2之间划一条有向边,从T1指向T2。事务等待图动态地反映了所有事务的等待情况。,6.3.3 数据库的并发控制,98,并发控制子系统周期性地检测事务等待图,如果发现图中有回路,则表示系统中出现死锁。一旦检测到系统存在

43、死锁,就要设法解除。解除死锁方法:选择一个处理死锁代价最小的事务,将其撤消,释放其所持有的所有锁,使其他事务得以继续运行下去。对撤消的事务所执行的数据修改操作必须加以恢复。,6.3.3 数据库的并发控制,99,6.3.3 数据库的并发控制,3.并发调度的可串行化,计算机系统对并发事务中的并发操作的调度是随机的,人们发现,不同的调度会产生不同的结果。哪个结果正确,哪个结果不正确呢?,100,如果一个事务运行过程中没有其他事务同时运行,即没有受到其他事务的干扰,则就可以认为该事务的运行结果是正常的或预想的。因此将所有事务串行起来的调度策略一定是正确的调度策略。虽然以不同的顺序串行执行可能会产生不同

44、的结果,但由于不会将数据库置于一个不一致的状态,所以都是正确的。,6.3.3 数据库的并发控制,101,可串行化调度准则:多个事务的并发执行是正确的,当且仅当其结果与按照某一次序串行地执行它们时的结果相同,称这种调度策略为可串行化调度。可串行性是并发事务正确性的准则。按照这个准则规定,一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度。,6.3.3 数据库的并发控制,102,4.两段锁协议两段锁协议是保证并发调度可串行性的封锁协议。要求所有事务必须分两个阶段对数据项加锁和解锁。即(1)在对任何数据进行读写操作之前,首先要申请并获得对该数据的封锁。(2)在释放一个封锁后,事务不再申请和

45、获得任何其他封锁。,6.3.3 数据库的并发控制,103,所谓“两段”锁含义是:事务分为两个阶段,第一阶段获得封锁,也称为扩展阶段。在此阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。第二阶段,是释放封锁,也称为收缩阶段。在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。,利用两段锁解决数据不一致问题.见下页.,6.3.3 数据库的并发控制,104,6.3.3 数据库的并发控制,105,*6.3.4 SQL Serve中的并发控制机制,一.SQL Server中封锁对象种类,106,*6.3.4 SQL Serve中的并发控制机制,二.SQL Se

46、rver锁的种类,107,6.4 数据库备份和恢复,数据库备份就是对SQL Server数据库或事务日志进行备份,数据库备份记录了在进行备份这一操作时数据库中所有数据的状态,以便在数据库遭到破坏时能够及时地将其恢复。执行备份操作必须拥有对数据库备份的权限许可,SQL Server只允许系统管理员、数据库所有者和数据库备份执行者备份数据库。,108,常见的数据库故障种类1.事务故障 某个事务的执行被非正常中止,事务没有到达预期的终点(Commit或显示的Rollback)。为此,数据库可能处于不一致状态,对此系统要强行回滚该事务。,6.4.1 故障的种类,109,2.系统故障 指造成系统停止运转

47、的任何事件,使得系统要重新启动。如CPU故障、DBMS代码错误、突然停电等。这种故障影响正在运行的所有事务,使它们都非正常中止,从而使数据库处于不一致状态。当重新启动数据库系统时,系统会根据日志文件来强行回滚这些事务。,6.4.1 故障的种类,110,3.介质故障 数据库存储介质发生故障。如磁盘损坏、磁头碰撞、瞬间强磁场干扰等。这种故障将破坏数据库或部分数据库,并影响正在存取它们的事务。这种故障发生的概率小,但破坏性大。恢复方法是:重装数据库备份,然后重做已经完成的事务。,6.4.1 故障的种类,111,4.计算机病毒 计算机病毒是一种人为的破坏,可能造成计算机系统包括数据库本身的破坏。根据破坏情况,可采取2、3之一的复方法。,6.4.1 故障的种类,112,略参考第4章内容。,6.4.2 SQL Server的数据库备份和恢复,113,作业,本章习题,114,联系我们:同济大学计算机系计算机基础教研室,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号