《《数据库安全保护》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据库安全保护》PPT课件.ppt(86页珍藏版)》请在三一办公上搜索。
1、2023/7/16,1,第6章 数据库保护技术,本章内容,本章介绍 数据共享是数据库的基本性能要求,多用户共享数据库时,必然有合法用户合法使用、合法用户非法使用以及非法用户非法使用数据的问题,要保证合法用户合法使用数据库及数据共享的安全性,就需要对数据库实施保护。数据库的保护技术主要有数据库的安全性、完整性、并发控制及恢复4方面内容。,第六章数据库安全保护(续),6.1.1 计算机系统的安全性,计算机系统安全性的含义:计算机系统安全性就是指计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件等资源,不因各种有意无意的原因而遭到破坏、泄密或拒绝正常使用,使计算机系统的全部资源能
2、保持其正常状态。安全性问题有许多方面:计算机系统的安全性不仅涉及到计算机系统本身的技术问题、管理问题,还涉及法学、犯罪学、心理学等问题,其内容包括计算机安全理论与策略、计算机安全技术、安全管理、安全评价、安全产品,以及计算机犯罪与侦察、计算机安全法律等。概括起来,计算机系统的安全性问题可分为技术安全类、管理安全类和政策法律类三大类。,数据库安全性的含义:数据库的安全性是指保护数据库以防止非法使用所造成的数据泄露、更改或破坏。安全性问题包括:(1)法律、社会和伦理方面时问题。(2)政策方面的问题。(3)硬件控制方面的问题。(4)物理控制方面的问题。(5)运行方面的问题。(6)操作系统安全性方面的
3、问题。(7)数据库系统本身的安全性方面的问题。,6.1.2 数据库的安全性,安全控制模型控制位置,安全性控制就是指要尽可能地杜绝所有可能的数据库非法访问。,用户,DBMS,OS,用户标识和鉴定,访问控制,定义视图,数据加密和审计,6.1.3 安全性控制的一般方法,安全性控制的一般方法 用户标识和鉴定 用户存取权限控制 定义视图 数据加密 审计(Audit),用户标识和鉴定是由系统提供一定的方式让用户标识自己的名字或身份,系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核实,通过鉴定后才提供机器的使用权。用户标识和鉴定的方法(1
4、)用一个用户名或用户标识符来标明用户的身份,系统以此来鉴别用户的合法性。(2)用户标识符是用户公开的标识,它不足以成为鉴别用户身份的凭证。(3)通过用户名和口令来鉴定用户的方法简单易行,但该方法在使用时,由于用户名和口令的产生和使用比较简单,也容易被窃取,因此还可采用更复杂的方法如函数和计算过程。,1用户标识和鉴定,用户存取权限指的是不同的用户对于不同的数据对象允许执行的操作权限。在数据库系统中,定义用户存取权限称为授权。这些授权定义经过编译后以一张授权表的形式存放在数据字典中。,2存取权限控制,存取权限由两个要素组成:数据对象和操作类型。定义一个用户的存取权限就是要定义该用户可以在哪些数据对
5、象上进行哪些类型的操作。,DBA特权用户-GRANT REVOKE-其他用户,表6-1 关系数据库系统中的存取权限,表6-2 授权表的例子(1),对于一个授权表,衡量授权机制的一个重要指标就是授权粒度。授权粒度就是可以定义的数据对象的范围。授权定义中粒度越细,授权子系统就越灵活。如表6-2所示是一个授权粒度很粗的表,它只能对整个关系授权,如用户USER1拥有对关系S的一切权限;用户USER2拥有对关系C的SELECT权限以及对关系SC的UPDATE权限;用户USER3只可以向关系SC中插入新记录。,表6-3 授权表的例子(2),如表6-3所示是一个授权粒度较为精细的表,它可以精确到关系的某一属
6、性。用户USER1拥有对关系S的一切权限;用户USER2只能查询关系C的CNO属性和修改关系SC的SCORE属性;用户USER3可以向关系SC中插入新记录。,在关系数据库系统中,可以为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权操作的用户隐藏起来,从而自动地为数据提供一定程度的安全保护。在实际应用中,通常将视图机制与授权机制结合起来使用:首先用视图机制屏蔽一部分保密数据,然后在视图上再进一步定义存取权限。,3定义视图,例如,限制USER1只能对数学系的学生进行操作。一种方法是通过授权语句对USER1授权,另一种简单的方法就是先建立数学系学生的视图,然后在该视图上定义存取权限。,加
7、密的基本思想是根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文),从而使得不知道解密算法的人无法获得数据的内容。加密方法主要有两种:,4数据加密,(1)信息替换方法。该方法使用密钥将明文中的每一个字符转换为密文中的字符。(2)信息置换方法。该方法仅将明文的字符按不同的顺序重新排列。单独使用这两种方法的任意一种都是不够安全的,但是将这两种方法结合起来就能达到相当高的安全程度。,审计功能是一种监视措施,它跟踪记录有关数据的访问活动。审计追踪把用户对数据库的所有操作自动记录下来,存放在一个特殊文件中,即审计日志中。记录的内容一般包括:操作类型(如修改、查询等),操作终端标识与操作者标识
8、,操作日期和时间,操作所涉及到的相关数据(如基本表、视图、记录、属性等),数据的前象和后象等。,5审计,1985年美国国防部标准可信计算机系统评估标准(Trusted Computer System Evaluation Criteria,简称TCSEC,桔皮书)1991年美国国家计算机安全中心颁布的可信计算机系统评估标准关于数据库系统解释(Trusted Database Interpretation,简称TDI,紫皮书)。这两个标准合称为TCSEC/TDI标准。按照该标准,将系统划分为D、C、B、A 4组,D、C1、C2、B1、B2、B3、A1从低到高7个等级。较高安全等级提供的安全保护包
9、含较低等级的所有保护要求,同时提供更多、更完善的保护能力。,6.1.4 数据库的安全标准,1)D级安全标准D级安全标准为无安全保护的系统。2)C1级安全标准满足C1级安全标准的系统必须具有如下功能:(1)身份标识与身份鉴别。(2)数据完整性。(3)存取控制。C1级安全标准的核心是存取控制,适合于单机工作方式。,1TCSEC/TDI标准,3)C2级安全标准(1)满足C1级安全标准的全部功能。(2)审计。C2级安全标准的核心是审计,适合于单机工作方式,目前国内所使用的系统一部分符合该标准。满足C2标准的数据库系统有Oracle 7 及以上版本系统、Sybase 公司的、微软公司的 MS SQL S
10、erver 2000等。4)B1级安全标准(1)满足C2级安全标准的全部功能。(2)存取控制。,B1级安全标准的核心是存取控制,适合于网络工作方式,目前国内所使用的系统基本不符合该标准,而在国际上,有部分系统符合这一标准。满足B1标准的数据库系统有Oracle公司的Trusted Oracle 7、Sybase公司的等。凡符合B1级安全标准的数据库系统称为安全数据库系统或可信数据库系统。5)B2级安全标准(1)满足B1级安全标准的全部功能。(2)具有隐蔽通道。(3)具有数据库安全的形式化。B2级安全标准的核心是隐蔽通道与形式化,适合于网络工作方式,目前国内外均尚无符合这一标准的系统,其主要的难
11、点是数据库安全的形式化表示。,6)B3级安全标准(1)满足B2级安全标准的全部功能。(2)访问监控器。B3级安全标准的核心是访问监控器,适合于网络工作方式,目前国内外均尚无符合这一标准的系统。7)A1级安全标准(1)满足B3级安全标准的全部功能。(2)具有较高的形式化要求。此级标准的安全级别最高,应具有完善的形式化要求。目前尚无法实现,仅仅是一种理想化的等级。,我国标准分为5级,从第1级到第5级基本上与TCSEC标准的C级(C1、C2)及B级(B1、B2、B3)一致。,2我国国家标准,表6-5 TCSEC标准与我国标准的对比,数据库建立之后,数据的安全性最为重要。SQL Server 2000
12、提供了一套设计完善、操作简单的安全管理机制。,图6-2 SQL Server 2000 的安全体系结构,6.1.5 SQL Server 2000的安全性控制,1SQL Server 2000的安全体系结构,用户要访问数据库,需经过以下步骤:(1)具有登录账户。在这个前提条件下,才有可能进入SQL Server 2000系统。(2)数据库服务器的登录账户,才具有数据库服务器的连接权或登录权。SQL Server 2000只有在验证了指定的登录账户有效后,才能完成连接。这种对登录账户的验证称为身份验证模式。(3)当一个登录者登录数据库服务器后,并不等于对其中的数据库具有访问权限,还必须由数据库所
13、有者或管理员授权,使该登录者成为某一个数据库的用户。(4)作为某个数据库的用户,对数据库对象的访问权限也必须被授予,这些权限包括SELECT、UPDATE、INSERT、DELETE等。这种用户访问数据库权限的设置是通过用户账号来实现的。,Windows身份验证模式利用了用户安全性和账号管理机制,用户只需使用Windows的用户名和密码,通过Windows的身份验证,就可以连接到SQL Server,登录SQL Server 2000时不再进行身份验证,从而实现SQL Server 与Windows登录的安全集成。因此,也称这种模式为安全验证模式。混合身份验证模式,即Windows身份验证模式
14、和SQL Server身份验证模式的混合,表示SQL Server 接受Windows授权用户和SQL授权用户。在这种模式下,用户必须输入有效的SQL Server登录账号及口令,因为SQL Server要用这两部分内容来验证用户的身份。,2SQL Server 2000的身份验证模式,1)设置 SQL Server身份验证模式的步骤(1)在企业管理器下展开服务器组,右击要设置的数据库服务器名称,在下拉菜单中选择“属性”命令,如图6-3所示。(2)在弹出的“SQL Server属性(配置)”对话框中,选择“安全性”选项卡,如图6-4所示,在此选项卡中有一个“安全性”栏,可根据需要选择所需的身份
15、验证模式。,图6-3 服务器属性查看,图6-4“SQL Server属性(配置)”对话框,2SQL Server 2000的身份验证模式(续1),2)通过企业管理器设置Windows身份验证模式登录账号的步骤(1)创建Windows系统的账号。以管理员身份登录Window XP,选择“开始”“设置”“控制面板”“管理工具”“计算机管理”命令,在“计算机管理”窗口中展开“本地用户和组”,右击“用户”选项,在下拉菜单中选择“新用户”命令,如图6-5所示。(2)在“新用户”对话框中输入用户名、密码和确认密码后,单击“创建”按钮,创建一个系统账号。重复上面过程可以继续创建用户,如果不再创建可单击“关闭
16、”按钮,,图6-5 创建新用户,图6-6“新用户”对话框,2SQL Server 2000的身份验证模式(续2),(3)进入SQL Server 2000的企业管理器,展开服务器组,选择要操作的服务器,展开“安全性”选项,右击“登录”选项,在下拉菜单中选择“新建登录”命令,如图6-7所示。(4)在新建登录属性对话框中有“常规”、“服务器角色”和“数据库访问”选项卡。打开“常规”选项卡,单击“名称”文本框右侧的“”按钮,在弹出的用户列表中选择用户名后依次单击“添加”、“确定”按钮,将用户名添加到“名称”文本框中;在“身份验证”属性中选择“Windows身份验证”,在“安全性访问”中选择“允许访问
17、”,然后单击“确定”按钮实现将Windows账号添加到SQL Server 2000中,如图6-8所示。,图6-7 新建登录向导,图6-8 登录属性设置,3)在混合模式下创建SQL Server登录账号的步骤在Windows XP或Windows 2003系统中,应将SQL Server 2000数据库服务器的验证模式设置为混合模式。其步骤如下。(1)在企业管理器中选择要设置的数据库服务器,展开“安全性”选项,右击“登录”选项,在下拉菜单中选择“新建登录”命令。(2)在弹出的新建登录窗口中,输入用户名称,选择验证方式为“SQL Server身份验证”,输入密码并确认新密码,连续两次单击“确定”
18、按钮,创建一个SQL Server登录账号。,2SQL Server 2000的身份验证模式(续3),数据库的安全管理主要是对数据库用户的合法性和操作权限的管理,包括数据库系统登录用户管理、数据库用户管理、数据库系统角色管理以及数据库访问权限的管理。1)数据库系统登录用户管理 SQL Server在安装时,会自动创建一个登录用户sa,即系统管理员。该用户可以执行所有的操作,是超级用户。几乎所有的创建用户和授权的工作都由sa来完成,除非他将授权工作转授给专门的权限管理人员。在企业管理器下展开Microsoft SQL Serve服务器组,选择要操作的服务器,展开“安全性”选项,右击“登录”选项,
19、在下拉菜单中选择“新建登录”命令,如图6-7所示。在该对话框中输入登录用户名、选择身份验证模式、选择登录到SQL Server之后要连接的默认数据库,最后单击“确定”按钮,关闭“新建登录”对话框。这时,在企业管理器的“登录”面板中可以看到新建的登录用户。,3SQL Server的安全管理,2)数据库用户管理 数据库用户是指具有合法身份的数据库使用者,其作用范围局限于其所属的数据库,必须对应到登录用户。登录用户只有成为数据库用户后才能访问数据库,数据库用户可以与登录用户同名,也可以不同名。例如,登录用户sa自动与每一个数据库用户dbo相关联。SQL Server数据库中有两个特殊的用户:Dbo和
20、Guest。Dbo是数据库对象拥有者;Guest是一个公共用户,主要是将没有自己的用户账号的SQL Server登录者作为默认的用户,从而使该登录者能够访问具有Guest用户的数据库。,3SQL Server的安全管理(续1),在企业管理器中创建新的数据库用户的步骤如下:(1)在企业管理器中,展开服务器组,再展开服务器。(2)展开“数据库”文件夹,打开要创建用户的数据库。(3)右击“用户”选项,从快捷菜单中选择“新建数据库用户”命令,弹出“数据库用户属性新建用户”对话框,如图6-9所示。,图6-9“数据库用户属性新建用户”对话框,(4)在“登录名”下拉列表框中选择一个登录账号,在“用户名”文本
21、框中输入数据库用户名,在“数据库角色成员”列表中为该用户选择数据库角色。(5)单击“确定”按钮,完成数据库用户的创建。创建数据库用户后,可设置其权限。,(6)查看数据库用户。在企业管理器中,展开要查看用户的数据库,单击“用户”,则右侧窗口中将显示当前数据库的所有用户信息。(7)删除数据库用户。在右面的窗格中右击想要删除的数据库用户,在弹出的快捷菜单中选择“删除”命令,则会从当前数据库中删除该数据库用户。,3)数据库系统角色管理具有相同权限的一组用户称为角色,数据库系统角色管理包括服务器角色管理和数据库角色管理。(1)服务器角色管理。服务器角色是指根据SQL Server的管理任务,以及与这些任
22、务相对的重要性等级来把具有SQL Server 管理职能的用户划分成不同的用户组。每一组所具有的管理SQL Server的权限已被预定义在服务器范围内,且不能修改,所以也称为固定服务器角色。例如,具有Sysadmin角色的用户在SQL Server中可以执行任何管理性工作,任何企图对其权限进行修改的操作,都将会失败。,3SQL Server的安全管理(续2),SQL Server 共有7种固定服务器角色,其具体含义如表6-6所示。,表6-6 服务器角色表,在企业管理器下将一个用户添加为服务器角色成员的步骤 在企业管理器下,登录数据库服务器,选择某一登录账号后单击右键,在下拉菜单中选择“属性”命
23、令。在“登录属性”对话框中选择“服务器角色”选项卡,如图6-10所示,单击“确定”按钮,将一个用户添加为服务器角色成员。,图6-10“服务器角色”选项卡,数据库角色对应于单个数据库,分为固定数据库角色和用户自定义的数据库角色。固定数据库角色。SQL Server提供了9个常用的固定数据库角色,其具体含义如下表所示。,(2)数据库角色管理。,表6-7 固定数据库角色表,在企业管理器中,打开要操作的数据库文件夹,右击“角色”文件夹,在弹出的菜单中选择“新建数据库角色”命令,打开“数据库角色属性新建角色”对话框,如图6-11所示。在该对话框中可完成3种操作:在“名称”文本框中输入新角色名;在用户栏中
24、增加或移去角色中的用户;确定数据库角色的类型。单击“确定”按钮可完成设置。,图6-11“新建数据库角色新建角色”对话框,用户自定义的数据库角色。用户自定义的数据库角色有两种类型:标准角色和应用程序角色。,权限管理分为语句权限管理和对象权限管理。语句权限是指用户是否具有权限来执行某一语句,这些语句通常是一些具有管理性的操作,如CREATE DATABASE、CREATE TABLE等。,对象权限是指用户能否在数据库的表、视图、存储过程中执行SELECT(查询)、UPDATE(修改)、INSERT(插入)、DELETE(删除)、EXECUT(调用过程)等操作,如果用户想对某一对象进行操作,必须具有
25、相应的操作权限。无论是语句权限还是对象权限,都可以使用Transact-SQL的DCL,即GRANT和REVOKE语句实现其管理。,4SQL Server的权限管理,1)使用企业管理器管理语句权限的步骤(1)展开一个SQL服务器和相应的数据库文件夹,右击指定的数据库文件夹,在弹出的快捷菜单中,选择“属性”命令,如图6-12所示。随后,出现数据库属性对话框。(2)在数据库属性对话框中,选择“权限”选项卡,出现管理数据库语句权限的对话框,如图6-13所示。在对话框的列表栏中,单击表中的复选框,可分别对各用户或角色授予、撤销和废除数据库的语句操作权限。复选框有3种状态:“”表示授予权限;“”表示废除
26、权限;空白表示撤销权限。,图6-12 数据库的弹出菜单 图6-13 管理数据库语句权限的对话框,(3)完成后单击“确定”按钮。,4SQL Server的权限管理,2)使用企业管理器管理对象权限对象权限的管理可以通过两种方法实现:一种是通过对象管理其用户及操作权;另一种是通过用户管理对应的数据库对象及操作权。具体使用哪种方法要视管理的方便性来决定。(1)通过对象授予、撤销和废除用户权限。如果要一次为多个用户(角色)授予、撤销和废除对某一个数据库对象的权限,应采用通过对象的方法实现。具体操作步骤如下:,展开SQL服务器、数据库文件夹和数据库,选中其中一个数据库对象,如选中教学数据库中的表文件夹中的
27、表,单击鼠标右键。在弹出的菜单中选择“所有任务”“管理权限”命令,如图6-14所示,弹出一个对象权限对话框,如图6-15所示。,4SQL Server的权限管理(续),图6-14 选择“管理权限”命令 图6-15 对象权限对话框,在对象权限对话框中有两个单选按钮,若选中“列出全部用户用户定义的数据库角色”单选按钮,则在下面的权限表中列出所有的数据库用户和角色;若选中“仅列出对此对象具有权限的用户用户定义的数据库角色”单选按钮,则在下面的权限表中列出具有本对象操作权的数据库用户和角色。对话框下面是数据库用户和角色所对应的权限表,表中权限用复选框表示。在表中可以对各用户或角色的各种对象操作权(SE
28、LECT、INSERT、UPDATE、DELETE、EXEC和DRI)进行授予或撤销。完成后,单击“确定”按钮。,(2)通过用户或角色授予、撤销和废除对象权限。如果要为一个用户或角色同时授予、撤销或者废除多个数据库对象的使用权限,则可以通过用户或角色的方法进行。例如,要对教学数据库中的rolesl角色进行授权操作,可执行下列操作。展开一个SQL服务器和数据库文件夹,单击用户或角色文件夹。在细节窗口中找到要选择的用户或角色,本例为角色中的rolesl角色,用鼠标右键单击该角色,在弹出的菜单中选择“属性”命令,出现如图6-16所示的“数据库角色属性教学”对话框。,图6-16“数据库角色属性教学”对
29、话框,在该对话框中,若选中“列出全部对象”单选按钮,则会在下面的权限表中列出全部数据库对象;若选中“仅列出该角色具有权限的对象”单选按钮,则下面的权限表中只列出该角色有操作权的对象。显然,要进行授权操作时应选前者,进行撤销或废除权限操作时选后者。在对话框中的权限列表中,对每个对象进行授予、撤销和废除权限的操作。在权限表中,权限SELECT、INSERT、UPDATE等安排在列中,每个对象的操作权用一行表示,单击单元格可改变其状态。完成后,单击“确定”按钮。,数据库完整性的含义 数据库的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。数据库的完整性是指防
30、止合法用户使用数据库时向数据库中加入不符合语义的数据。完整性措施的防范对象是不合语义的数据。,完整性约束条件是完整性控制机制的核心。,从约束条件使用的对象的粒度分,静态约束 数据库处于确定状态时,数据对象应满足的约束条件;动态约束 数据库从一种状态转变为另一种状态时,新旧值之间应满足的约束条件,列级约束元组级约束表级约束,6.2.1 完整性约束条件的类型,从约束条件使用的对象的状态分,综上所述,可以将完整性约束条件分为以下6类。静态列级约束是对一个列的取值域的说明,即对数据类型、数据格式、取值范围和空值等进行规定。(1)对数据类型的约束,包括数据的类型、长度、单位和精度等。(2)对数据格式的约
31、束。(3)对取值范围的约束。(4)对空值的约束。(5)其他约束,1.静态列级约束,6.2.1 完整性约束条件的类型(续),2.静态元组级约束,静态元组级约束是各个列之间的约束关系。,3静态表级约束,表中各个元组之间或若干关系之间存在的联系或约束。,(1)函数依赖约束。说明了同一关系中不同属性之间应满足的约束条件(2)统计约束。规定某属性值与一个关系多个元组的统计值之间必须满足某种约束条件。,4动态列级约束,修改列定义或列值时必须满足的约束条件,它包括以下两方面:(1)修改列定义时的约束。(2)修改列值时的约束。修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。,5动态元组级约束,
32、6动态表级约束,修改元组的值时,元组中字段组或字段间需要满足某种约束。,加在关系变化时的限制条件。,6.2.2 完整性控制机制的功能,DBMS的完整性控制机制应当具有以下3种功能。(1)定义功能。允许用户定义所有的完整性约束条件。(2)检查功能。检查用户发出的操作请求是否违背了完整性约束条件。,(3)保护功能。如果发现用户的操作请求违背了完整性约束条件,则采取一定的保护动作来保证数据的完整性。,完整性规则从执行时间上可分为立即执行约束(Immediate Constraints)和延迟执行约束(Deferred Constraints)。,6.2.3 完整性规则的组成,一条完整性规则可以用一个
33、五元组(D,O,A,C,P)来表示:D(Data):表示约束作用的数据对象;O(Operation):表示触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查;A(Assertion):表示数据对象必须满足的语义约束,是规则的主体;C(Condition):表示选择A作用的数据对象值的谓词;P(Procedure):表示违反完整性规则时执行的操作。,例如,在S表中“学号不能为空”的完整性约束中,D、O、A、C、P的含义分别如下:D:约束作用的数据对象为SNO属性;O:当用户插入或修改数据时需要检查该完整性规则;A:SNO不能为空;C:无,A可作用于
34、所用记录的SNO属性;P:拒绝执行用户的请求。,6.2.4 SQL Server 2000的数据完整性控制,在SQL Server中,可以通过各种约束、缺省、规则、触发器、存储过程等数据库对象来保证数据的完整性。1)约束,(1)主关键字(PRIMARY KEY)约束。能够保证指定列的实体完整性,该约束可以应用于一列或多列,应用于多列时,被定义为表级约束。(2)外部关键字(FOREIGN KEY)约束。为表中一列或多列数据提供参照完整性。实施FOREIGN KEY约束时,要求在被参照表中定义PRIMARY KEY约束或UNIQUE约束。(3)唯一(UNIQUE)约束。能够保证一列或多列的实体完整
35、性。对于实施UNIQUE约束的列,不允许有任意两行具有相同的索引值。SQL Server允许在每张表上建立多个UNIQUE约束。(4)检查(CHECK)约束。限制输入到一列或多列的可能值,从而保证SQL Server数据厍中数据的值域完整性。(5)默认值(DEFAULT)约束。使用此约束时,如果用户在插入数据操作时没有显式地为该列提供数据,系统就将默认值赋给该列。,2)缺省 缺省是一种数据库对象,与默认值约束的作用类似,在INSERT语句中为指定数据列设置缺省值。缺省对象只适用于受INSERT语句影响的行。创建缺省对象使用CREATE DEFAULT语句,该语句只能在当前数据库中创建缺省对象。
36、对每一个用户来说,在同一个数据库中所创建的缺省对象名称必须唯一。创建缺省后,必须将它与列或用户定义数据类型关联起来才能使其发挥作用。使用DROP DEFAULT语句删除指定的缺省对象。3)规则规则是对输入到列中的数据所实施的完整性约束条件,指定插入到列中的可能值。规则可以被关联到一列或几列,以及用户定义的数据类型。创建规则使用CREATE RULE语句,删除规则使用DROP RULE语句。,4)触发器触发器是一种高功能、高开支的数据完整性方法,具有INSERT、UPDATE和DELETE 3种类型,分别针对数据插入、数据更新和数据删除3种情况。触发器的用途是维护行级数据的完整性,不能返回结果集
37、。与CHECK约束相比,触发器能强制实现更加复杂的数据完整性、执行操作或级联操作、实现多行数据间的完整性约束、维护非正规化的数据等。触发器是一个特殊的存储过程。在创建触发器时,通过CREATE TRIGGER语句定义触发器对应的表、执行的事件和触发器的指令。当发生事件后,会引发触发器执行,通过执行其指令,保证数据完整性。,数据库并发性的含义 为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整性。并发控制就是解决这类问题,以保持数据库中数据的一致性,即在任何一个时刻数据
38、库都将以相同的形式给用户提供数据。,6.3.1 事务的基本概念,事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。定义事务的语句有三条:BEGIN TRANSACTIONCOMMITROLLBACK,1事务的特性,事务的开始,事务的提交,事务的回滚,(1)原子性。一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”的原则,即不允许完成部分的事务。即使因为故障而使事务未能完成,它执行的部分结果也将被取消。事务的原子性是对事务最基本的要求。(2)一致性。事务执行的结果必
39、须是使数据库从一个一致性状态转变到另一个一致性状态。,2事务的特性,(3)隔离性。如果多个事务并发地执行,应像各个事务独立地执行一样,一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。并发控制就是为了保证事务间的隔离性。(4)持久性。持久性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使系统发生故障也不应该对其有任何影响。持久性的意义在于保证数据库具有可恢复性。,例如 飞机机票订票系统。假设机票余额R=100张,甲事务T1读出某航班目前的机票余额数100张,订出1张机票,乙事务T2读出同航班目前的机票余
40、额数,订出1张机票,如果正常操作,即甲事务T1执行完毕再执行乙事务T2,机票余额更新后应该是98张。但是如果按照如下顺序操作,则会有不同的结果:(1)甲事务T1读取机票余额R=100张;(2)乙事务T2读取机票余额R=100张;(3)甲事务T1订出1张机票,修改机票余额R=R-1=99,把R=99写回到数据库;(4)乙事务T2订出1张机票,修改机票余额R=R-1=99,把R=99写回到数据库;结果两个事务共订出机票2张,而数据库中的机票余额却只少了1张。得到这种错误的结果是由甲乙两个事务并发操作引起的。,6.3.2 并发操作引发的问题,两个事务T1和T2读入同一数据,并发执行修改操作时,会出现
41、事务T2提交的结果破坏了事务T1提交的结果,导致T1的修改结果丢失的问题,如表6-8所示。表6-8 丢失修改,1丢失修改,事务T1修改某一数据R,并将修改结果写回到磁盘,事务T2读取了修改后的数据R,但事务T1由于某种原因撤销了所有的操作,这样被事务T1修改过的数据R又恢复为原值,这时,事务T2得到的数据与数据库中的数据不一致,是不正确的数据,这种情况称为读“脏”数据,如表6-9所示。表6-9 读“脏”数据示例,2读“脏”数据,事务T1读取了数据R后,事务T2读取并更新了数据R,当事务T1再读取数据R以进行核对时,得到的读取值不一致,这种情况称为不可重读,如表6-10所示。表6-10 不可重复
42、读示例,3不可重读,产生“幻影”数据属于不可重读的范畴。事务T1按一定条件从数据库中读取了某些数据R后,事务T2删除了其中的部分记录,或者在其中插入了一些记录,当事务T1再次按相同条件读取数据R时,发现某些记录消失了(删除)或多了(插入)一些记录。这样的数据对事务T1来说就是“幻影”数据,或称“幽灵”数据。分析:产生上述4个问题是由于违反了事务ACID中的4项原则,特别是事务的隔离性原则。为了保证事务并发执行的正确性,必须要有一定的控制手段保障在事务并发执行中一个事务的执行不受其他事务的影响,避免造成数据的不一致。,4产生“幻影”数据,封锁的含义 所谓封锁就是当一个事务在对某个数据对象(可以是
43、数据项、记录、数据集以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。,6.3.3 封锁及封锁协议,封锁类型有两种 排他锁 排它型封锁又称写封锁,简称为X封锁,它采用的原理是禁止并发操作。共享锁 共享封锁又称读封锁,简称为S锁,它采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。,1锁的类型,排他锁与共享锁的控制方式可用图6-17表示。,图6-17 封锁类型的相容矩阵,其中,Y=Yes,表示相容的请求;N=No,表示不相容的请求。在上述封锁类型的相容矩阵中,最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线“”表示没有加锁;最
44、上面一行表示事务T2对同一数据对象发出的封锁请求。事务T2的封锁请求能否被满足用矩阵中的Y或N表示,Y表示事务T2的封锁请求与事务T1已持有的锁相容,封锁请求可以满足;N表示事务T2的封锁请求与事务T1已持有的锁冲突,请求被拒绝。,上面讲述过的并发操作所带来的丢失修改、读“脏”数据和不可重读等数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决:一级封锁协议 事务T在修改数据对象之前必须对其加X锁,直到事务结束。二级封锁协议 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。三级封锁协议 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对
45、其加S锁,读完后并不释放S锁,而直到事务T结束才释放。,2封锁协议,表6-11 使用一级封锁协议防止丢失修改,表6-12 使用二级封锁协议防止读“脏”数据,表6-13 使用三级封锁协议防止不可重读,(1)并发调度的可串行化。串行执行:以事务为单位,多个事务依次顺序执行,前一个事务对数据库的访问操作执行结束后,再去处理下一个事务对数据库的访问操作。串行执行能保证事务的正确执行。并发执行:以事务为单位,按一定的调度策略同时执行。并发调度的可串行化:事务的并发执行并不能保证事务的正确性,因此需要采用一定的技术,使得在并发执行时像串行执行一样(正确),这种执行称为并发调度的可串行化。【例6-1】假设有
46、两个事务T1和T2,初始值A=10,B=10。两事务分别包含如下所示的操作,试分析执行的结果。T1:READ(A)T2:READ(B)A:=A5 B:=B5 WRITE(A)WRITE(B)READ(B)B:=B+5 WRITE(B),3并发调度的可串行化与两段锁协议,(a)串行执行之一(b)串行执行之二,c)可串行化(d)不可串行化图6-18 几种调度方案,图6-18(a)是执行事务T1后执行事务T2的串行调度,执行结果为A=5,B=10。图6-18(b)是执行事务T2后执行事务T1的串行调度,执行结果为A=5,B=10。图6-18(c)和图6-18(d)是两个可能的并发调度,其中图6-18
47、(c)的执行结果为A=5,B=10,所以是可串行化调度,但是图6-18(d)的执行结果为A=5,B=15,不等价于任一个串行调度,所以是一个不可串行化调度,其结果是不正确的。为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。两段锁(Two-Phase Locking,简称2PL)协议就是保证并发调度可串行性的封锁协议。,(2)两段锁协议。所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁。第一阶段是申请并获得锁,也称为扩展阶段。第二阶段是释放所有原申请获得的锁,也称为收缩阶段。如图6-19所示是遵守两段锁协议的序列。,图6-19 遵守两段锁协
48、议的封锁序列 结论:所有两段锁协议的事务,其并发执行的结果一定是正确的。,表6-15 活锁实例,解决活锁最有效的方法是采用“先来先服务”的控制策略。,6.3.4 封锁出现的问题和解决方法,1活锁,当某个事务请求对某一数据进行排它性封锁时,由于其他事务对该数据的操作而使这个事务处于永久等待状态,这种状态称为活锁。,2死锁 所谓死锁即事务之间对锁的循环等待。也就是说,多个事务申请不同的锁,申请者均拥有一部分锁,而它又在等待另外事务所拥有的锁,这样相互等待,从而造成它们都无法继续执行,如表6-16所示。表6-16 死锁实例,(1)预防死锁的方法 一次封锁法 一次封锁法是指每个事务一次性地申请它所需要
49、的全部锁,对一个事务来说,要么获得所需的全部锁,要么一个锁也不占有。这样,一个事务不会既等待其他事务,又被其他事务等待,从而不会出现循环等待。顺序封锁法 顺序封锁法是指将数据对象按序编号,在申请时,要求按序请求,这样只有请求低序号数据对象的锁的事务等待占有高序号数据对象的锁的事务,而不可能出现相反的等待,因而不可能发生循环等待。,(2)诊断与解除死锁的方法。,超时法等待图法,封锁粒度指封锁的单位。根据对数据的不同处理,封锁的对象可以是这样一些逻辑单元:字段、记录、表、数据库等,封锁的数据对象的大小叫封锁粒度。封锁粒度越小,系统中能够被封锁的对象就越多,并发度越高,但封锁机构复杂,系统开销也就越
50、大。封锁粒度越大,系统中能够被封锁的对象就越少,并发度越低,封锁机构越简单,相应系统开销也就越小。,6.3.5 封锁粒度,1SQL Server的空间管理及锁的级别锁是为防止其他事务访问指定的资源,实现并发控制的主要手段。要加快事务的处理速度并缩短事务的等待时间,就要使事务锁定的资源最小。(1)行和行级锁。行是可以锁定的最小空间资源。行级锁是指事务操作过程中,锁定一行或若干行数据。行级锁占用的数据资源最少,并避免了数据被占用但不使用的现象,因而是最优锁。(2)页和页级锁。在SQL Server中,除行外的最小数据单位是页。一个页有8KB,所有的数据、日志和索引都放在页上。为了管理方便,表中的行