《《数据库保护机制》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据库保护机制》PPT课件.ppt(86页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第九章 数据库保护机制数据库数据库原理与应用原理与应用 讲讲 授授:陈秀琼陈秀琼 电电 话话:8602686:8602686 第九章 数据库保护机制第一章第一章数据库系统概述数据库系统概述 第二章第二章 关系数据库关系数据库 第三章第三章数据库标准语言数据库标准语言 第四章使用第四章使用ADO访问访问数据库数据库第五章第五章T-SQLSQL编程编程 第六章数据库设计第六章数据库设计第七章第七章规范化理论规范化理论 第八章第八章数据库保护机制数据库保护机制 第九章第九章数据库技术新进展数据库技术新进展第九章 数据库保护机制第第8章数据库保护机制章数据库保护机制 数据库中存放着大量的有价值的信息,
2、数据库中存放着大量的有价值的信息,因此采用怎样行之有效的措施保护数据库因此采用怎样行之有效的措施保护数据库是非常重要的。是非常重要的。比如比如,保护数据库数据的,保护数据库数据的正确正确性、有性、有效性,保护数据库效性,保护数据库安全安全性,保护数据库既性,保护数据库既使是出现各种使是出现各种故障故障,也能对其进行有效地,也能对其进行有效地恢复恢复等。等。第九章 数据库保护机制第第8章数据库保护机制章数据库保护机制8.1 完整性控制完整性控制8.2 安全性控制安全性控制8.3 并发控制并发控制8.4 数据库备份与恢复数据库备份与恢复主要内容主要内容第九章 数据库保护机制8.1 数据库的完整性数
3、据库的完整性数据库的完整性指数据的正确性和有效性。指数据的正确性和有效性。数据库的完整性是为了防止数据库中存在数据库的完整性是为了防止数据库中存在不符合实际语义的数据,防止错误信息的不符合实际语义的数据,防止错误信息的输入和输出。输入和输出。数据库是否具备完整性关系到数据库系统数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据能否真实地反映现实世界,因此维护数据库完整性是非常重要的。库完整性是非常重要的。第九章 数据库保护机制8.1.1 完整性规则完整性规则完整性规则完整性规则是指附加在数据库数据上的语义约束条是指附加在数据库数据上的语义约束条件。件。DBMS的完整性控制
4、机制应具有三个方面的功能的完整性控制机制应具有三个方面的功能:1.完整性定义功能完整性定义功能。提供定义完整性规则的机制。提供定义完整性规则的机制;如:性别如:性别IN 男男,女女2.完整性检查功能完整性检查功能。检查用户发出的操作请求是否。检查用户发出的操作请求是否违背了完整性约束条件违背了完整性约束条件;3.如果发现用户操作违背了完整性规则,如果发现用户操作违背了完整性规则,触发的过触发的过程程(如撤销用户操作如撤销用户操作)。第九章 数据库保护机制8.1.1 完整性规则完整性规则完整性规则作用的对象可以是关系、元组完整性规则作用的对象可以是关系、元组和列。因此和列。因此完整性规则可分为完
5、整性规则可分为:1.列上的约束列上的约束:列的类型、取值范围、精度、:列的类型、取值范围、精度、排序等约束。排序等约束。2.元组的约束元组的约束:元组中各个字段间的联系的:元组中各个字段间的联系的约束。约束。3.关系的约束关系的约束:若干元组之间、关系集合上:若干元组之间、关系集合上以及关系之间的联系的约束。以及关系之间的联系的约束。第九章 数据库保护机制8.1.1 完整性规则完整性规则完整性约束又可分为完整性约束又可分为:静态约束、动态约:静态约束、动态约束。束。1.静态约束静态约束:是指数据库在每一确切状态时,:是指数据库在每一确切状态时,数据对象所满足的约束条件,它反映数据数据对象所满足
6、的约束条件,它反映数据库状态合理性的约束。这是最重要的一类库状态合理性的约束。这是最重要的一类约束。约束。2.动态约束动态约束:是指数据库从一种状态转变到:是指数据库从一种状态转变到另一状态时,新、旧值之间所满足的约束另一状态时,新、旧值之间所满足的约束条件,它是反映数据库状态变迁的约束。条件,它是反映数据库状态变迁的约束。第九章 数据库保护机制8.1.1 完整性规则完整性规则上述两种分类结合起来,形成了上述两种分类结合起来,形成了6种完整种完整性约束。性约束。静态列级约束静态列级约束静态元组约束静态元组约束静态关系约束静态关系约束动态列级约束动态列级约束动态元组约束动态元组约束动态关系约束动
7、态关系约束第九章 数据库保护机制8.1.2 SQL Server的完整性的完整性本节介绍本节介绍SQL Server的完整性控制策略。的完整性控制策略。SQL Server数据完整性有四种类型数据完整性有四种类型:实体完整性、域完整性、实体完整性、域完整性、参照完整性、用户定义完整性参照完整性、用户定义完整性第九章 数据库保护机制8.1.2 SQL Seerver的完整性的完整性1.实体完整性实体完整性构成主键的主属性不能取空值构成主键的主属性不能取空值。体现为:。体现为:UNIQUE唯一性约束(不允许为唯一性约束(不允许为null)PRIMARY KEY 约束(不允许为约束(不允许为null
8、)例:例:CREATE TABLE 选课选课(学号学号CHAR(8)NOT NULL,,PRIMARY KEY(学号学号,课号课号),)第九章 数据库保护机制8.1.2 SQL Server的完整性的完整性2.域完整性域完整性属性列属性列(字段字段)满足的约束条件满足的约束条件。体现为:。体现为:(1)数据类型的约束数据类型的约束:包括数据的类型、长度、包括数据的类型、长度、单位、精度等。单位、精度等。(2)数据格式的约束数据格式的约束例例:规定学号的前两位表示入学年份,中:规定学号的前两位表示入学年份,中间两位表示系的编号,后四位为班级号和序间两位表示系的编号,后四位为班级号和序号,号,xx
9、xxxxxx。出生日期:出生日期:YY-MM-DD第九章 数据库保护机制8.1.2 SQL Server的完整性的完整性(3)取值范围或取值集合的约束取值范围或取值集合的约束.例如例如:规定成绩的取值范围为:规定成绩的取值范围为0100域级域级check子句子句(4)对空值的约束对空值的约束:有的列允许取空值,有的有的列允许取空值,有的列不允许取空值。列不允许取空值。(5)设置默认值设置默认值default约束。约束。第九章 数据库保护机制 建立关系模式建立关系模式teacher(tno,tname,sex,age,sfID,join_date),要求主键为工号要求主键为工号tno,不能为空且
10、必须,不能为空且必须是数字字符;姓名非空;年龄必须介于是数字字符;姓名非空;年龄必须介于18-65之间;身份证号,必须唯一;性别只能之间;身份证号,必须唯一;性别只能是是男男或或女女;进入单位日期默认状;进入单位日期默认状态取系统时间。态取系统时间。第九章 数据库保护机制CREATE TABLE teacher(Tno VARCHAR(6)NOT NULL CHECK(isnumeric(tno)=1),Tname VARCHAR(10)NOT NULL,Sfid CHAR(18)UNIQUE,Sex CHAR(2)CHECK(sex IN(男男,女女),Age INT CHECK(age B
11、ETWEEN 18 AND 65),Join_date DATETIME DEFAULT GETDATE(),PRIMARY KEY(tno)第九章 数据库保护机制8.1.2 SQL Server的完整性的完整性3.参照完整性参照完整性两个表之间满足的引用关系的约束两个表之间满足的引用关系的约束。即:外键表。即:外键表中外键的取值参照主键表中主键的值。体现为:中外键的取值参照主键表中主键的值。体现为:CREATE TABLE 选课选课(.,FOREIGN KEY(学号学号)REFERENCES 学生学生(学号学号)ON UPDATE CASCADE|NO ACTIONON DELETE CAS
12、CADE|NO ACTION,)默认受限删除或更新,但可设置为默认受限删除或更新,但可设置为CASCADE|NO ACTION(将参照表中所有外键值与基本表中主键将参照表中所有外键值与基本表中主键值相对应的元组一同删除值相对应的元组一同删除/对参照表没有任何影响对参照表没有任何影响)第九章 数据库保护机制8.1.2 SQL Server的完整性的完整性4.用户定义完整性用户定义完整性用户定义完整性是用户定义完整性是针对应用业务需要针对应用业务需要而定而定义的完整性约束条件。体现为:义的完整性约束条件。体现为:CHECK子句子句3.3.规则(下节介绍)规则(下节介绍)第九章 数据库保护机制8.1
13、.3 使用规则和触发器实现完整性使用规则和触发器实现完整性一般一般不是很复杂的完整性约束都是在不是很复杂的完整性约束都是在create table语句语句中定义。中定义。复杂的复杂的完整性完整性实现要用实现要用触发器触发器和和规则规则。1.使用规则实现完整性使用规则实现完整性 规则规则是独立于表的单独定义、存储的数据是独立于表的单独定义、存储的数据库对象。库对象。第九章 数据库保护机制创建规则创建规则 CREATE RULE 规则名规则名AS 约束表达式约束表达式规则中规则中可以是能用于可以是能用于WHERE子句中的任何表达式。子句中的任何表达式。如如:Birthday=1980-01-01
14、ANDBirthday=GETDATE()grade IN(a,A,B,b,C,c,D,d)code LIKE a-z%0-9 8.1.3 使用规则和触发器实现完整性使用规则和触发器实现完整性第九章 数据库保护机制例例8.2 创建创建sno_rule规则,使得学号首字母为规则,使得学号首字母为SS、后接、后接5 5位数字字符。位数字字符。CREATE RULE sno_rule ASsno LIKE S0-90-90-90-90-98.1.3 使用规则和触发器实现完整性使用规则和触发器实现完整性第九章 数据库保护机制规则的绑定规则的绑定创建好规则后,规则只是存储在数据库中创建好规则后,规则只是
15、存储在数据库中的对象并没有发生作用,只有将规则绑定的对象并没有发生作用,只有将规则绑定到相应表的属性列,才能实现完整性约束。到相应表的属性列,才能实现完整性约束。用存储过程用存储过程sp_bindrule绑定规则。绑定规则。语法格式:语法格式:sp_bindrule 规则名规则名,对象名对象名例例8.3 将规则将规则sno_rule绑定到学生表的学号属绑定到学生表的学号属性列上。性列上。sp_bindrule sno_rule,student.sno8.1.3 使用规则和触发器实现完整性使用规则和触发器实现完整性第九章 数据库保护机制规则的松绑规则的松绑规则绑定后,可以解除,即松绑。规则绑定后
16、,可以解除,即松绑。用存储过程用存储过程sp_unbindrule为规则松绑。为规则松绑。语法格式:语法格式:sp_unbindrule 对象名对象名例例8.4 解除规则解除规则sno_rule在学生表的学号属性在学生表的学号属性列上的绑定。列上的绑定。sp_unbindrule student.sno8.1.3 使用规则和触发器实现完整性使用规则和触发器实现完整性第九章 数据库保护机制删除规则删除规则DROP RULE 规则名规则名1,规则规则2,注意注意:在删除规则前,必须先将其从约束对:在删除规则前,必须先将其从约束对象上解除。象上解除。8.1.3 使用规则和触发器实现完整性使用规则和触
17、发器实现完整性第九章 数据库保护机制前面介绍的一些约束机制,属于前面介绍的一些约束机制,属于被动被动的约束的约束机制。在检查出对数据库的操作违反约束后,机制。在检查出对数据库的操作违反约束后,只能做些比较简单的动作,比如拒绝操作。只能做些比较简单的动作,比如拒绝操作。如果需要处理复杂的完整性限制,且希望在如果需要处理复杂的完整性限制,且希望在某个操作后,系统能某个操作后,系统能自动根据自动根据条件转去执行条件转去执行各种操作,那么可以用触发器机制来实现各种操作,那么可以用触发器机制来实现。第第5章已经介绍过触发器建立和使用。这里章已经介绍过触发器建立和使用。这里我们就举一个复杂点的例子。我们就
18、举一个复杂点的例子。8.1.3 使用规则和触发器实现完整性使用规则和触发器实现完整性第九章 数据库保护机制例例8.5 在在“选课选课”表上建立触发器,实现教务表上建立触发器,实现教务规定的每门课程的选修人数必须在规定的每门课程的选修人数必须在180人以人以内的约束。内的约束。CREATE TRIGGER SC_count ON 选课选课FOR INSERT ASDECLARE cno CHAR(6)SELECT cno=inserted.课号课号FROM insertedIF 180(SELECT COUNT(*)FROM 选课选课WHERE 课号课号=cno)8.1.3 使用规则和触发器实现
19、完整性使用规则和触发器实现完整性第九章 数据库保护机制 BEGIN PRINT 对不起,该课已经选满!对不起,该课已经选满!ROLLBACK ENDELSE BEGIN PRINT 祝贺你,选课成功!祝贺你,选课成功!COMMITEND8.1.3 使用规则和触发器实现完整性使用规则和触发器实现完整性第九章 数据库保护机制8.2 安全性控制安全性控制数据库安全性的定义数据库安全性的定义数据库安全性数据库安全性是指保护数据库以防止不合法是指保护数据库以防止不合法的使用造成的数据泄露、更改或破坏。的使用造成的数据泄露、更改或破坏。数据库系统的安全性依赖于其所在的计算数据库系统的安全性依赖于其所在的计
20、算机和网络环境的安全性。见下图。机和网络环境的安全性。见下图。第九章 数据库保护机制SQL Server2000的安全机制数据库对象用户浏览器防火墙Web 服务器数据库服务器数据库B/S模式下的安全体系第九章 数据库保护机制SQL Server2000的安全机制硬件环境的安全性硬件环境的安全性操作系统的安全性操作系统的安全性SQL Server的安全性的安全性数据库的安全性数据库的安全性数据库对象的安全性数据库对象的安全性第九章 数据库保护机制 各用户在各级安全机制中操作各用户在各级安全机制中操作windows SQL Server服务器服务器 jxgl 数据库数据库student表表 zs
21、zs public角色修改字段角色修改字段 wang fj(zhang 保管员角色保管员角色 增删改增删改、liu)fj/liu(sno,sname)(sysadmin角色)第九章 数据库保护机制一、SQL Server2000服务器安全性SQL Server2000SQL Server2000使用以下两种方法来识别用户:使用以下两种方法来识别用户:WindowsWindows用户、用户、SQL Server2000SQL Server2000用户用户在安装在安装SQL Server2000SQL Server2000可选择的模式:可选择的模式:WindowsWindows验证模式:验证模式:
22、登陆登陆SQL Server2000SQL Server2000时,时,只进行只进行WindowsWindows用户验证;用户验证;混合模式混合模式:登陆:登陆SQL Server2000SQL Server2000时既可以使用时既可以使用WindowsWindows验证也可以使用验证也可以使用SQL Server2000SQL Server2000验证。验证。使用企业管理器修改验证模式:使用企业管理器修改验证模式:选中要管理的服选中要管理的服务器右击务器右击“属性属性”“”“安全性安全性”,确定,确定。重。重新启动新启动SQL Server2000SQL Server2000。第九章 数据库
23、保护机制一、SQL Server2000服务器安全管理(一)管理(一)管理Windows用户用户展开要管理的服务器展开要管理的服务器展开展开“安全性安全性”节点,节点,右击右击“登录登录”“”“新建登录新建登录”-”-添加添加WindowsWindows用用户为户为SQL ServerSQL Server的登录用户,并设置其要访问的登录用户,并设置其要访问的数据库的数据库(二)管理(二)管理SQL Server用户用户展开要管理的服务器展开要管理的服务器展开展开“安全性安全性”节点,节点,右击右击“登录登录”“”“新建登录新建登录”-”-选择选择SQL ServerSQL Server身份验证
24、输入密码,设置其数据库角色和要访身份验证输入密码,设置其数据库角色和要访问的数据库问的数据库第九章 数据库保护机制一、SQL Server2000服务器安全管理特殊帐户特殊帐户Sa在完成在完成SQL Server安装后,安装后,SQL Server就自就自动建立了一个特殊的帐户动建立了一个特殊的帐户Sa,它拥有服务器、所它拥有服务器、所有系统数据库和用户数据库的所权限,拥有最有系统数据库和用户数据库的所权限,拥有最高的管理权限,拥有高的管理权限,拥有System admin角色,可角色,可以执行服务器范围内的所有操作。以执行服务器范围内的所有操作。在刚完成在刚完成SQL Server安装后,安
25、装后,Sa帐户没有密帐户没有密码或弱密码码或弱密码,这是相当危险的。这是相当危险的。方法一:使用强口令方法一:使用强口令方法二:禁用方法二:禁用Sa,新建一个用户,赋予新建一个用户,赋予System admin角色角色第九章 数据库保护机制一、SQL Server2000服务器安全管理一旦用户获得一旦用户获得SQL Server2000SQL Server2000服务器的权限后,服务器的权限后,就可以设置用户访问单个数据库的权限。就可以设置用户访问单个数据库的权限。使用企业管理器添加数据库用户使用企业管理器添加数据库用户方法一:给服务器用户创建登录时,指定使用方法一:给服务器用户创建登录时,指
26、定使用的数据库;的数据库;方法二:数据库节点下,右击方法二:数据库节点下,右击“用户用户”,新建,新建数据库用户,从登录名中选择要映射的登录帐数据库用户,从登录名中选择要映射的登录帐户。户。说明:要使用数据库,首先要创建登录。说明:要使用数据库,首先要创建登录。第九章 数据库保护机制二、SQL Server2000数据库安全性特殊数据库用户:特殊数据库用户:dbo和和guestDbo 是数据库做高权限的拥有者,可以在数据库是数据库做高权限的拥有者,可以在数据库范围内执行一切操作。是在范围内执行一切操作。是在SQL Server安装时被安装时被设置到设置到model数据库中,不能被删除。数据库中
27、,不能被删除。Dbo用户用户都对应于都对应于Sa帐户。帐户。Guest用户可以使任何已登录到用户可以使任何已登录到SQL Server服务服务器的用户都可以访问数据库。所有系统数据库器的用户都可以访问数据库。所有系统数据库(model除外除外)都有都有guest用户;所有新建数据库都用户;所有新建数据库都没有这个用户,如果有不要添加,必须使用存储没有这个用户,如果有不要添加,必须使用存储过程明确建立。过程明确建立。EXEC SP-Grantdbaccess guest第九章 数据库保护机制四、角色角色是一个强大的工具,可以对用户权限角色是一个强大的工具,可以对用户权限进行集中管理。可以建立一个
28、角色来代表进行集中管理。可以建立一个角色来代表数据库的一类用户,然后给这个角色授予数据库的一类用户,然后给这个角色授予适当的权限。适当的权限。通俗的例子:通俗的例子:系主任、教学秘书、辅导员、任课教师,系主任、教学秘书、辅导员、任课教师,不同的角色有不同的职责和权利。不同的角色有不同的职责和权利。第九章 数据库保护机制四、角色(一)一)SQL Server固定服务器角色固定服务器角色在在数据库安装时数据库安装时就创建好的就创建好的8个固定服务个固定服务器角色用于分配服务器级管理权限的实器角色用于分配服务器级管理权限的实体。体。使用企业管理器管理服务器角色使用企业管理器管理服务器角色 展开服务器
29、节点展开服务器节点-“安全性安全性”-“服务器服务器角色角色”,选中角色右击,选中角色右击“添加添加”,将,将登录帐户登录帐户添加到该服务器角色。添加到该服务器角色。第九章 数据库保护机制四、角色(二)二)SQL Server固定数据库角色固定数据库角色在在数据库创建时数据库创建时就创建了就创建了9个数据库角色,来个数据库角色,来提供最基本的数据库权限的综合管理。提供最基本的数据库权限的综合管理。使用企业管理器管理数据库角色使用企业管理器管理数据库角色 展开数据库节点展开数据库节点-“角色角色”,选中角色右击,选中角色右击“添加添加”,将,将登录帐户登录帐户添加到该数据库角色。添加到该数据库角
30、色。说明:任何被赋予说明:任何被赋予sysadmin的固定服务器角色的固定服务器角色的用户都映射着每个数据库的特殊用户的用户都映射着每个数据库的特殊用户dbo,所所有有sysadmin成员创建的数据库对象都自动将成员创建的数据库对象都自动将拥有者设置为拥有者设置为dbo.第九章 数据库保护机制四、角色特殊数据库角色特殊数据库角色public除了前面提到的除了前面提到的9个数据库角色外,个数据库角色外,SQL Server还有一个特殊的数据库角色还有一个特殊的数据库角色public.。该角。该角色的特点:色的特点:public角色;角色;2.替数据库用户捕获所有数据库默认权限;替数据库用户捕获所
31、有数据库默认权限;3.public角色存在于每一个数据库中,包括系统角色存在于每一个数据库中,包括系统数据库和用户建立的数据库。数据库和用户建立的数据库。4.public角色不能删除。角色不能删除。第九章 数据库保护机制四、角色(三)创建自己定义的数据库角色(三)创建自己定义的数据库角色1.建标准角色。展开数据库节点建标准角色。展开数据库节点-“角色角色”,选中,选中角色右击角色右击“新建数据库角色新建数据库角色”,将,将登录帐户登录帐户添添加到该数据库角色。加到该数据库角色。应用程序角色是一种特殊的数据库角色。在应用程序角色是一种特殊的数据库角色。在数据量超级大或者数据库关系复杂以及考虑到安
32、数据量超级大或者数据库关系复杂以及考虑到安全因素时,只允许应用程序角色使用特定的软件全因素时,只允许应用程序角色使用特定的软件访问数据库,以约束用户的操作。访问数据库,以约束用户的操作。默认情况下,应用程序角色是无效的。需要应用默认情况下,应用程序角色是无效的。需要应用程序使用系统存储过程程序使用系统存储过程sp_setapprole并提供密并提供密码来激活它。它一旦被激活,在这次服务器连接码来激活它。它一旦被激活,在这次服务器连接将暂时失去所有登录帐户、数据库用户的权限。将暂时失去所有登录帐户、数据库用户的权限。第九章 数据库保护机制五、权限SQL Server提供权限作为访问权设置的最提供
33、权限作为访问权设置的最后一道关卡。当数据库对象创建后,只有后一道关卡。当数据库对象创建后,只有数据库又有者可以访问数据库对象,其他数据库又有者可以访问数据库对象,其他用户想访问对象,首先要拥有者赋予他们用户想访问对象,首先要拥有者赋予他们的权限。的权限。第九章 数据库保护机制(一)对(一)对数据库对象数据库对象进行权限管理进行权限管理选中数据库对象右击选中数据库对象右击“属性属性”“权权限限”(二)对数据库用户和角色进行权限管理(二)对数据库用户和角色进行权限管理选中用户或角色右击选中用户或角色右击“属性属性”“权权限限”五、权限第九章 数据库保护机制8.3 并发控制并发控制数据库是一个可共享
34、资源,允许多用户访问同一数据库是一个可共享资源,允许多用户访问同一数据库。数据库。每个用户存取数据库中的数据在每个用户存取数据库中的数据在时间上可能是顺时间上可能是顺序序进行的,也可能是进行的,也可能是同时进行同时进行的,前者称为的,前者称为串行串行操作,后者称为操作,后者称为并行操作并行操作;并行操作提高数据库系统的利用率,但可能出现并行操作提高数据库系统的利用率,但可能出现多个用户程序并发地访问同一数据资源的情况,多个用户程序并发地访问同一数据资源的情况,对此并发操作不加控制,就对此并发操作不加控制,就会破坏数据的一致性会破坏数据的一致性。所以,必须对并发操作加以所以,必须对并发操作加以控
35、制控制,以正确顺序方,以正确顺序方式调度并发操作。式调度并发操作。DBMSDBMS的并发控制是以的并发控制是以事务事务(tranctionstranctions)为单位)为单位进行的。进行的。第九章 数据库保护机制8.3.1 事务事务1事务事务(Transaction)事务事务是是用户定义的一个数据库操作序列,用户定义的一个数据库操作序列,这些操作这些操作要么全做,要么全不做要么全做,要么全不做,是一个,是一个不可分割的整体。不可分割的整体。一个事务可以是一个事务可以是一个一个SQL语句语句,或,或一组一组SQL语句语句或或整个程序整个程序。第九章 数据库保护机制8.3.1 事务事务例如例如网
36、上购物的一次交易,经常包括几步数据库网上购物的一次交易,经常包括几步数据库操作:操作:更新客户更新客户所购商品的库存信息;所购商品的库存信息;保存客户保存客户付款信息,可能包括与银行系统交互;付款信息,可能包括与银行系统交互;生成定单生成定单并保存到数据库中;并保存到数据库中;更新用户相关信息更新用户相关信息,如购物数量等,如购物数量等这一系列过程中,任何一个环节出了差错,都将这一系列过程中,任何一个环节出了差错,都将导致交易失败。导致交易失败。一旦失败一旦失败,数据库所有信息都必,数据库所有信息都必须须保持到交易前的状态不变保持到交易前的状态不变,例如库存信息没有,例如库存信息没有被更新、用
37、户也没付款,订单也没生成。被更新、用户也没付款,订单也没生成。第九章 数据库保护机制8.3.1 事务事务SQL定义事务的语句有定义事务的语句有3条:条:BEGIN TRANSACTION(事务开始)(事务开始)COMMIT:提交,提交事务的所有操作。即,将提交,提交事务的所有操作。即,将事务对数据库所做的所有更新写回到物理数据库事务对数据库所做的所有更新写回到物理数据库中去,事务正常结束。中去,事务正常结束。ROLLBACK:回滚。在事务运行过程中发生了回滚。在事务运行过程中发生了某种故障,事务不能继续进行,系统将事务中对某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作撤消,
38、使数据库恢复数据库的所有已完成的操作撤消,使数据库恢复到该事务执行前的状态。到该事务执行前的状态。例例6-23 P132-133第九章 数据库保护机制8.3.1 事务事务2事务的特性事务的特性1原子性原子性(Atomicity):一个事务中的所有操一个事务中的所有操作,是一个作,是一个不可分割不可分割的整体,要么都做,要的整体,要么都做,要么都不做(么都不做(由由DBMS的事务管理子系统保证的事务管理子系统保证)。2一致性一致性(Consistency):一个事务独立执行):一个事务独立执行的结果必须保持数据库的一致性。即事务的的结果必须保持数据库的一致性。即事务的执行结果必须是使数据库从一个
39、执行结果必须是使数据库从一个一致状态一致状态变变到到另一个一致状态另一个一致状态(由完整性控制子系统保由完整性控制子系统保证证)。第九章 数据库保护机制8.3.1 事务事务3隔离性隔离性(Isolation):在多个事务并发执):在多个事务并发执行时,一个事务的执行行时,一个事务的执行不受其他事务干扰不受其他事务干扰。系统应保证这些事务的并发执行与这些事务系统应保证这些事务的并发执行与这些事务先后单独执行时的结果一样。先后单独执行时的结果一样。(隔离性由隔离性由DBMS的并发控制子系统保证的并发控制子系统保证)第九章 数据库保护机制8.3.1 事务事务4持久性持久性(Durability):指
40、一个事务一旦):指一个事务一旦提交,它对数据库中数据的提交,它对数据库中数据的改变就应该是改变就应该是永久永久的。即使以后发生故障,也应保留这的。即使以后发生故障,也应保留这个事务的执行结果。个事务的执行结果。(持续性由持续性由DBMS的恢复子系统保证的恢复子系统保证)事务的事务的隔离性隔离性是由是由DBMS系统的恢复机制来系统的恢复机制来保证的。保证的。第九章 数据库保护机制8.3.2 事务并发调度事务并发调度“调度调度”:按照某种顺序执行一系列操作。:按照某种顺序执行一系列操作。.如果多个事务依次执行如果多个事务依次执行(一个事务执行完后一个事务执行完后再执行另一个事务再执行另一个事务),
41、则称为事务的,则称为事务的串行调串行调度度。如果并发事务中各操作交叉执行,则。如果并发事务中各操作交叉执行,则称为称为并发调度并发调度。.并发操作可能造成以下三种数据不一致性并发操作可能造成以下三种数据不一致性问题。问题。第九章 数据库保护机制8.3.2 事务并发调度事务并发调度161516155015050250100100200t第九章 数据库保护机制8.3.2 事务并发调度事务并发调度产生上述数据不一致的主要原因是并发操产生上述数据不一致的主要原因是并发操作作破坏了破坏了事务的事务的隔离性隔离性。为了保证并发调度的正确性,为了保证并发调度的正确性,DBMS的并发的并发控制机制必须提供一定
42、的手段来保证调度控制机制必须提供一定的手段来保证调度的的可串行化可串行化。目前,普遍采用的并发控制方法是目前,普遍采用的并发控制方法是封锁封锁。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法封锁封锁就是事务就是事务T在对某个数据对象(如数据在对某个数据对象(如数据库、表、数据块、记录、数据项等)操作库、表、数据块、记录、数据项等)操作之前,先向系统发出请求,对其之前,先向系统发出请求,对其加锁加锁。加。加锁成功后事务锁成功后事务T释放才可以多该数据对象进释放才可以多该数据对象进行操作,操作完成以后,在某个时刻,事行操作,操作完成以后,在某个时刻,事务务T要要释放
43、锁释放锁。在事务。在事务T释放它的锁之前,释放它的锁之前,其他事务不能更新此数据对象。其他事务不能更新此数据对象。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法一、基本封锁有两种:一、基本封锁有两种:1)排它锁排它锁(Exclusive lock 简称简称X锁):若事锁):若事务务T对数据对象对数据对象A加上加上X锁,则只允许锁,则只允许T读取读取和修改和修改A,在,在T释放释放A上的锁之前,其他任上的锁之前,其他任何事务对数据何事务对数据A都不能申请到加锁。都不能申请到加锁。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法2)共享
44、锁共享锁(Shared lock,简称,简称S锁):若事务锁):若事务T对数据对象对数据对象A加上加上S锁,则事务锁,则事务T可以读可以读A但不能修改但不能修改A,其他事务只能再对,其他事务只能再对A加加S锁,锁,而不能加而不能加X锁,直到锁,直到T释放释放A上的上的S锁。锁。加锁方法加锁方法:“写写”操作之前申请加操作之前申请加X锁;锁;“读读”操作之前申请加操作之前申请加S锁。锁。排它锁和共享锁的控制方式可以用相容矩排它锁和共享锁的控制方式可以用相容矩阵来表示。阵来表示。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法第九章 数据库保护机制8.3.3 基于封锁
45、的基于封锁的并发控制方法并发控制方法第九章 数据库保护机制161515145015050150100200100100第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法3.活锁和死锁活锁和死锁封锁方法可能引起活锁和死锁。封锁方法可能引起活锁和死锁。(1)活锁活锁如果某事务存在永远等待状态,得不到封锁如果某事务存在永远等待状态,得不到封锁机会,这种现象称为机会,这种现象称为活锁活锁。避免活锁的方法避免活锁的方法:采用先来先服务的策略。:采用先来先服务的策略。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法(2 2)死锁)死锁如果两个或两个
46、以上的事务都处于相互等如果两个或两个以上的事务都处于相互等待状态,每个事务都在等对方事务释放锁,待状态,每个事务都在等对方事务释放锁,它才能继续执行下去,这种现象就叫它才能继续执行下去,这种现象就叫死锁死锁。如下图所示。如下图所示。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法死锁示例第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法解决死锁问题主要有两类方法解决死锁问题主要有两类方法:1)死锁预防死锁预防:一类方法是采用一定措施来预:一类方法是采用一定措施来预防死锁发生。通常有两种方法。防死锁发生。通常有两种方法。(1)一次封锁法一
47、次封锁法。要求每个事务必须一次将所。要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能执有要使用的数据全部加锁,否则就不能执行。行。一次封锁可以有效地防止死锁的发生。但一次封锁可以有效地防止死锁的发生。但扩大了封锁范围,降低了系统的并发度。扩大了封锁范围,降低了系统的并发度。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法(2)顺序封锁法:)顺序封锁法:是预先对数据对象规定一是预先对数据对象规定一个顺序,所有事务都按照这个顺序实行封锁。个顺序,所有事务都按照这个顺序实行封锁。顺序封锁法可以有效地防止死锁,但维持顺序封锁法可以有效地防止死锁,但维持数据对象的
48、封锁顺序非常困难,系统消耗大,数据对象的封锁顺序非常困难,系统消耗大,实现复杂。实现复杂。数据库系统中一般采用死锁诊断与解除的数据库系统中一般采用死锁诊断与解除的方法。方法。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法2)死锁诊断与解除死锁诊断与解除:允许死锁发生,采用一:允许死锁发生,采用一定的手段定期诊断系统中有无死锁,若有定的手段定期诊断系统中有无死锁,若有就解除它。死锁的诊断一般用超时法和等就解除它。死锁的诊断一般用超时法和等待图法。待图法。(1)超时法:)超时法:如果一个事务的等待时间超如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。过了规
49、定的时限,就认为发生了死锁。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控制方法(2)等待图法)等待图法等待图是一个有向图等待图是一个有向图G=(T,U)。)。T为结点的集合,每个结点表示正在运行的为结点的集合,每个结点表示正在运行的事务。事务。U为边的集合,每条边表示事务等待为边的集合,每条边表示事务等待情况。若情况。若T1等待等待T2,则,则T1和和T2之间划一条之间划一条有向边,从有向边,从T1指向指向T2。事务等待图动态地反映了所有事务的等待事务等待图动态地反映了所有事务的等待情况。情况。第九章 数据库保护机制8.3.3 基于封锁的基于封锁的并发控制方法并发控
50、制方法并发控制子系统周期性地检测事务等待图,并发控制子系统周期性地检测事务等待图,如果发现图中有回路,则表示系统中出现死如果发现图中有回路,则表示系统中出现死锁。一旦检测到系统存在死锁,就要设法解锁。一旦检测到系统存在死锁,就要设法解除。除。解除死锁方法解除死锁方法:选择一个处理死锁:选择一个处理死锁代价最代价最小的事务小的事务,将其撤消,释放其所持有的所,将其撤消,释放其所持有的所有锁,使其他事务得以继续运行下去。有锁,使其他事务得以继续运行下去。第九章 数据库保护机制8.3.4 SQL Serve中的并发控制机制中的并发控制机制SQL Server并发控制说明并发控制说明:(1)一个连接在