第数据库安全保护演示文稿_第1页
第数据库安全保护演示文稿_第2页
第数据库安全保护演示文稿_第3页
第数据库安全保护演示文稿_第4页
第数据库安全保护演示文稿_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第数据库安全保护演示文稿现在是1页\一共有84页\编辑于星期一优选第数据库安全保护现在是2页\一共有84页\编辑于星期一本章介绍数据共享是数据库的基本性能要求,多用户共享数据库时,必然有合法用户合法使用、合法用户非法使用以及非法用户非法使用数据的问题,要保证合法用户合法使用数据库及数据共享的安全性,就需要对数据库实施保护。数据库的保护技术主要有数据库的安全性、完整性、并发控制及恢复4方面内容。现在是3页\一共有84页\编辑于星期一第六章数据库安全保护(续)数据库的安全性计算机系统的安全性

计算机系统安全性的含义

:计算机系统安全性就是指计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件等资源,不因各种有意无意的原因而遭到破坏、泄密或拒绝正常使用,使计算机系统的全部资源能保持其正常状态。

安全性问题有许多方面:计算机系统的安全性不仅涉及到计算机系统本身的技术问题、管理问题,还涉及法学、犯罪学、心理学等问题,其内容包括计算机安全理论与策略、计算机安全技术、安全管理、安全评价、安全产品,以及计算机犯罪与侦察、计算机安全法律等。概括起来,计算机系统的安全性问题可分为技术安全类、管理安全类和政策法律类三大类。现在是4页\一共有84页\编辑于星期一数据库安全性的含义:

数据库的安全性是指保护数据库以防止非法使用所造成的数据泄露、更改或破坏。安全性问题包括:

(1)法律、社会和伦理方面时问题。(2)政策方面的问题。(3)硬件控制方面的问题。(4)物理控制方面的问题。(5)运行方面的问题。(6)操作系统安全性方面的问题。(7)数据库系统本身的安全性方面的问题。

6.1.2数据库的安全性现在是5页\一共有84页\编辑于星期一

安全控制模型—控制位置

安全性控制就是指要尽可能地杜绝所有可能的数据库非法访问。用户DBMS

DB

OS用户标识和鉴定访问控制定义视图数据加密和审计6.1.3安全性控制的一般方法现在是6页\一共有84页\编辑于星期一安全性控制的一般方法

用户标识和鉴定用户存取权限控制定义视图数据加密

审计(Audit)

现在是7页\一共有84页\编辑于星期一用户标识和鉴定是由系统提供一定的方式让用户标识自己的名字或身份,系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统将用户提供的身份标识与系统内部记录的合法用户标识进行核实,通过鉴定后才提供机器的使用权。

用户标识和鉴定的方法

(1)用一个用户名或用户标识符来标明用户的身份,系统以此来鉴别用户的合法性。(2)用户标识符是用户公开的标识,它不足以成为鉴别用户身份的凭证。(3)通过用户名和口令来鉴定用户的方法简单易行,但该方法在使用时,由于用户名和口令的产生和使用比较简单,也容易被窃取,因此还可采用更复杂的方法如函数和计算过程。

1.用户标识和鉴定现在是8页\一共有84页\编辑于星期一用户存取权限指的是不同的用户对于不同的数据对象允许执行的操作权限。在数据库系统中,定义用户存取权限称为授权。这些授权定义经过编译后以一张授权表的形式存放在数据字典中。

2.存取权限控制存取权限由两个要素组成:数据对象和操作类型。定义一个用户的存取权限就是要定义该用户可以在哪些数据对象上进行哪些类型的操作。DBA特权用户------》GRANTREVOKE-------》其他用户现在是9页\一共有84页\编辑于星期一

象操作类型模式模式建立、修改、检索外模式建立、修改、检索内模式建立、修改、检索数据表查找、插入、修改、删除属性列查找、插入、修改、删除表6-1关系数据库系统中的存取权限现在是10页\一共有84页\编辑于星期一

用户标识数据对象操作类型用户标识数据对象操作类型USER1关系SALLUSER3关系SCINSERTUSER2关系CSELECT………USER2关系SCUPDATE

表6-2授权表的例子(1)

对于一个授权表,衡量授权机制的一个重要指标就是授权粒度。授权粒度就是可以定义的数据对象的范围。

授权定义中粒度越细,授权子系统就越灵活。如表6-2所示是一个授权粒度很粗的表,它只能对整个关系授权,如用户USER1拥有对关系S的一切权限;用户USER2拥有对关系C的SELECT权限以及对关系SC的UPDATE权限;用户USER3只可以向关系SC中插入新记录。现在是11页\一共有84页\编辑于星期一用户标识数据对象操作类型用户标识数据对象操作类型USER1关系SALLUSER3关系SCINSERTUSER2列C.CNOSELECT………USER2列SC.SCOREUPDATE表6-3授权表的例子(2)如表6-3所示是一个授权粒度较为精细的表,它可以精确到关系的某一属性。用户USER1拥有对关系S的一切权限;用户USER2只能查询关系C的CNO属性和修改关系SC的SCORE属性;用户USER3可以向关系SC中插入新记录。现在是12页\一共有84页\编辑于星期一

在关系数据库系统中,可以为不同的用户定义不同的视图,通过视图机制把要保密的数据对无权操作的用户隐藏起来,从而自动地为数据提供一定程度的安全保护。在实际应用中,通常将视图机制与授权机制结合起来使用:首先用视图机制屏蔽一部分保密数据,然后在视图上再进一步定义存取权限。3.定义视图例如,限制USER1只能对数学系的学生进行操作。一种方法是通过授权语句对USER1授权,另一种简单的方法就是先建立数学系学生的视图,然后在该视图上定义存取权限。现在是13页\一共有84页\编辑于星期一

加密的基本思想是根据一定的算法将原始数据(明文)变换为不可直接识别的格式(密文),从而使得不知道解密算法的人无法获得数据的内容。

加密方法主要有两种:

4.数据加密

(1)信息替换方法。该方法使用密钥将明文中的每一个字符转换为密文中的字符。(2)信息置换方法。该方法仅将明文的字符按不同的顺序重新排列。单独使用这两种方法的任意一种都是不够安全的,但是将这两种方法结合起来就能达到相当高的安全程度。现在是14页\一共有84页\编辑于星期一审计功能是一种监视措施,它跟踪记录有关数据的访问活动。

审计追踪把用户对数据库的所有操作自动记录下来,存放在一个特殊文件中,即审计日志中。

记录的内容一般包括:操作类型(如修改、查询等),操作终端标识与操作者标识,操作日期和时间,操作所涉及到的相关数据(如基本表、视图、记录、属性等),数据的前象和后象等。

5.审计现在是15页\一共有84页\编辑于星期一

1985年美国国防部标准《可信计算机系统评估标准》(TrustedComputerSystemEvaluationCriteria,简称TCSEC,桔皮书)

1991年美国国家计算机安全中心颁布的《可信计算机系统评估标准——关于数据库系统解释》(TrustedDatabaseInterpretation,简称TDI,紫皮书)。这两个标准合称为TCSEC/TDI标准。按照该标准,将系统划分为D、C、B、A

4组,D、C1、C2、B1、B2、B3、A1从低到高7个等级。较高安全等级提供的安全保护包含较低等级的所有保护要求,同时提供更多、更完善的保护能力。

6.1.4数据库的安全标准现在是16页\一共有84页\编辑于星期一1)D级安全标准D级安全标准为无安全保护的系统。2)C1级安全标准满足C1级安全标准的系统必须具有如下功能:(1)身份标识与身份鉴别。(2)数据完整性。(3)存取控制。

C1级安全标准的核心是存取控制,适合于单机工作方式。1.TCSEC/TDI标准现在是17页\一共有84页\编辑于星期一3)C2级安全标准(1)满足C1级安全标准的全部功能。(2)审计。

C2级安全标准的核心是审计,适合于单机工作方式,目前国内所使用的系统一部分符合该标准。满足C2标准的数据库系统有Oracle7及以上版本系统、Sybase公司的、微软公司的

MSSQLServer2000等。4)B1级安全标准(1)满足C2级安全标准的全部功能。(2)存取控制。现在是18页\一共有84页\编辑于星期一

B1级安全标准的核心是存取控制,适合于网络工作方式,目前国内所使用的系统基本不符合该标准,而在国际上,有部分系统符合这一标准。满足B1标准的数据库系统有Oracle公司的TrustedOracle7、Sybase公司的等。凡符合B1级安全标准的数据库系统称为安全数据库系统或可信数据库系统。5)B2级安全标准(1)满足B1级安全标准的全部功能。(2)具有隐蔽通道。(3)具有数据库安全的形式化。

B2级安全标准的核心是隐蔽通道与形式化,适合于网络工作方式,目前国内外均尚无符合这一标准的系统,其主要的难点是数据库安全的形式化表示。现在是19页\一共有84页\编辑于星期一

6)B3级安全标准(1)满足B2级安全标准的全部功能。(2)访问监控器。

B3级安全标准的核心是访问监控器,适合于网络工作方式,目前国内外均尚无符合这一标准的系统。

7)A1级安全标准(1)满足B3级安全标准的全部功能。(2)具有较高的形式化要求。此级标准的安全级别最高,应具有完善的形式化要求。目前尚无法实现,仅仅是一种理想化的等级。

现在是20页\一共有84页\编辑于星期一我国标准分为5级,从第1级到第5级基本上与TCSEC标准的C级(C1、C2)及B级(B1、B2、B3)一致。我国标准TCSEC标准我国标准TCSEC标准—D级标准第4级:结构化保护级B2级标准第1级:自主安全保护级C1级标准第5级:访问验证保护级B3级标准第2级:系统审计保护级C2级标准—A1级标准第3级:安全标记保护级B1级标准2.我国国家标准表6-5TCSEC标准与我国标准的对比现在是21页\一共有84页\编辑于星期一数据库建立之后,数据的安全性最为重要。SQLServer2000提供了一套设计完善、操作简单的安全管理机制。图6-2SQLServer2000的安全体系结构6.1.5SQLServer2000的安全性控制1.SQLServer2000的安全体系结构现在是22页\一共有84页\编辑于星期一用户要访问数据库,需经过以下步骤:(1)具有登录账户。在这个前提条件下,才有可能进入SQLServer2000系统。(2)数据库服务器的登录账户,才具有数据库服务器的连接权或登录权。SQLServer2000只有在验证了指定的登录账户有效后,才能完成连接。这种对登录账户的验证称为身份验证模式。(3)当一个登录者登录数据库服务器后,并不等于对其中的数据库具有访问权限,还必须由数据库所有者或管理员授权,使该登录者成为某一个数据库的用户。(4)作为某个数据库的用户,对数据库对象的访问权限也必须被授予,这些权限包括SELECT、UPDATE、INSERT、DELETE等。这种用户访问数据库权限的设置是通过用户账号来实现的。现在是23页\一共有84页\编辑于星期一

Windows身份验证模式利用了用户安全性和账号管理机制,用户只需使用Windows的用户名和密码,通过Windows的身份验证,就可以连接到SQLServer,登录SQLServer2000时不再进行身份验证,从而实现SQLServer与Windows登录的安全集成。因此,也称这种模式为安全验证模式。

混合身份验证模式,即Windows身份验证模式和SQLServer身份验证模式的混合,表示SQLServer接受Windows授权用户和SQL授权用户。在这种模式下,用户必须输入有效的SQLServer登录账号及口令,因为SQLServer要用这两部分内容来验证用户的身份。2.SQLServer2000的身份验证模式现在是24页\一共有84页\编辑于星期一1)设置

SQLServer身份验证模式的步骤(1)在企业管理器下展开服务器组,右击要设置的数据库服务器名称,在下拉菜单中选择“属性”命令,如图6-3所示。(2)在弹出的“SQLServer属性(配置)”对话框中,选择“安全性”选项卡,如图6-4所示,在此选项卡中有一个“安全性”栏,可根据需要选择所需的身份验证模式。图6-3

服务器属性查看

图6-4

“SQLServer属性(配置)”对话框2.SQLServer2000的身份验证模式(续1)现在是25页\一共有84页\编辑于星期一2)通过企业管理器设置Windows身份验证模式登录账号的步骤(1)创建Windows系统的账号。以管理员身份登录WindowXP,选择“开始”→“设置”→“控制面板”→“管理工具”→“计算机管理”命令,在“计算机管理”窗口中展开“本地用户和组”,右击“用户”选项,在下拉菜单中选择“新用户”命令,如图6-5所示。(2)在“新用户”对话框中输入用户名、密码和确认密码后,单击“创建”按钮,创建一个系统账号。重复上面过程可以继续创建用户,如果不再创建可单击“关闭”按钮,图6-5

创建新用户

图6-6

“新用户”对话框2.SQLServer2000的身份验证模式(续2)现在是26页\一共有84页\编辑于星期一(3)进入SQLServer2000的企业管理器,展开服务器组,选择要操作的服务器,展开“安全性”选项,右击“登录”选项,在下拉菜单中选择“新建登录”命令,如图6-7所示。(4)在新建登录属性对话框中有“常规”、“服务器角色”和“数据库访问”选项卡。打开“常规”选项卡,单击“名称”文本框右侧的“…”按钮,在弹出的用户列表中选择用户名后依次单击“添加”、“确定”按钮,将用户名添加到“名称”文本框中;在“身份验证”属性中选择“Windows身份验证”,在“安全性访问”中选择“允许访问”,然后单击“确定”按钮实现将Windows账号添加到SQLServer2000中,如图6-8所示。

图6-7

新建登录向导

图6-8

登录属性设置现在是27页\一共有84页\编辑于星期一3)在混合模式下创建SQLServer登录账号的步骤在WindowsXP或Windows2003系统中,应将SQLServer2000数据库服务器的验证模式设置为混合模式。其步骤如下。(1)在企业管理器中选择要设置的数据库服务器,展开“安全性”选项,右击“登录”选项,在下拉菜单中选择“新建登录”命令。(2)在弹出的新建登录窗口中,输入用户名称,选择验证方式为“SQLServer身份验证”,输入密码并确认新密码,连续两次单击“确定”按钮,创建一个SQLServer登录账号。2.SQLServer2000的身份验证模式(续3)现在是28页\一共有84页\编辑于星期一数据库的安全管理主要是对数据库用户的合法性和操作权限的管理,包括数据库系统登录用户管理、数据库用户管理、数据库系统角色管理以及数据库访问权限的管理。1)数据库系统登录用户管理

SQLServer在安装时,会自动创建一个登录用户sa,即系统管理员。该用户可以执行所有的操作,是超级用户。几乎所有的创建用户和授权的工作都由sa来完成,除非他将授权工作转授给专门的权限管理人员。在企业管理器下展开MicrosoftSQLServe服务器组,选择要操作的服务器,展开“安全性”选项,右击“登录”选项,在下拉菜单中选择“新建登录”命令,如图6-7所示。在该对话框中输入登录用户名、选择身份验证模式、选择登录到SQLServer之后要连接的默认数据库,最后单击“确定”按钮,关闭“新建登录”对话框。这时,在企业管理器的“登录”面板中可以看到新建的登录用户。3.SQLServer的安全管理现在是29页\一共有84页\编辑于星期一2)数据库用户管理数据库用户是指具有合法身份的数据库使用者,其作用范围局限于其所属的数据库,必须对应到登录用户。登录用户只有成为数据库用户后才能访问数据库,数据库用户可以与登录用户同名,也可以不同名。例如,登录用户sa自动与每一个数据库用户dbo相关联。

SQLServer数据库中有两个特殊的用户:Dbo和Guest。Dbo是数据库对象拥有者;Guest是一个公共用户,主要是将没有自己的用户账号的SQLServer登录者作为默认的用户,从而使该登录者能够访问具有Guest用户的数据库。3.SQLServer的安全管理(续1)现在是30页\一共有84页\编辑于星期一在企业管理器中创建新的数据库用户的步骤如下:(1)在企业管理器中,展开服务器组,再展开服务器。(2)展开“数据库”文件夹,打开要创建用户的数据库。(3)右击“用户”选项,从快捷菜单中选择“新建数据库用户”命令,弹出“数据库用户属性—新建用户”对话框,如图6-9所示。图6-9

“数据库用户属性—新建用户”对话框现在是31页\一共有84页\编辑于星期一(4)在“登录名”下拉列表框中选择一个登录账号,在“用户名”文本框中输入数据库用户名,在“数据库角色成员”列表中为该用户选择数据库角色。(5)单击“确定”按钮,完成数据库用户的创建。创建数据库用户后,可设置其权限。(6)查看数据库用户。在企业管理器中,展开要查看用户的数据库,单击“用户”,则右侧窗口中将显示当前数据库的所有用户信息。(7)删除数据库用户。在右面的窗格中右击想要删除的数据库用户,在弹出的快捷菜单中选择“删除”命令,则会从当前数据库中删除该数据库用户。现在是32页\一共有84页\编辑于星期一

3)数据库系统角色管理具有相同权限的一组用户称为角色,数据库系统角色管理包括服务器角色管理和数据库角色管理。(1)服务器角色管理。服务器角色是指根据SQLServer的管理任务,以及与这些任务相对的重要性等级来把具有SQLServer管理职能的用户划分成不同的用户组。每一组所具有的管理SQLServer的权限已被预定义在服务器范围内,且不能修改,所以也称为固定服务器角色。例如,具有Sysadmin角色的用户在SQLServer中可以执行任何管理性工作,任何企图对其权限进行修改的操作,都将会失败。3.SQLServer的安全管理(续2)现在是33页\一共有84页\编辑于星期一SQLServer共有7种固定服务器角色,其具体含义如表6-6所示。服务器角色含义系统管理员(Sysadmin)拥有SQLServer所有的权限许可服务器管理员(Serveradmin)管理SQLServer服务器端的设置安装管理员(Setupadmin)增加和删除连接服务器、建立数据库复制、管理扩展存储过程安全管理员(Securityadmin)管理和审核SQLServer系统登录进程管理员(Processadmin)管理SQLServer系统进程数据库创建者(Dbcreator)创建数据库,并对数据库进行修改磁盘管理员(Diskadmin)管理磁盘文件表6-6服务器角色表现在是34页\一共有84页\编辑于星期一在企业管理器下将一个用户添加为服务器角色成员的步骤①在企业管理器下,登录数据库服务器,选择某一登录账号后单击右键,在下拉菜单中选择“属性”命令。②在“登录属性”对话框中选择“服务器角色”选项卡,如图6-10所示,单击“确定”按钮,将一个用户添加为服务器角色成员。图6-10

“服务器角色”选项卡现在是35页\一共有84页\编辑于星期一

数据库角色对应于单个数据库,分为固定数据库角色和用户自定义的数据库角色。①固定数据库角色。

SQLServer提供了9个常用的固定数据库角色,其具体含义如下表所示。(2)数据库角色管理。预定义的数据库角色含义db_owner数据库的所有者,可以对所有拥有的数据库执行任何操作db_accessadmin可以增加或删除数据库用户、工作组和角色db_datareader查看来自数据库的所有用户表的全部数据db_datawriter增加、修改和删除全部表中的数据,但不能进行SELECT操作db_addladmin增加、删除和修改数据库中任何对象db_securityadmin执行语句和对象权限管理db_backupoperator备份和恢复数据库db_denydatareader不能对数据库中任何表执行SELECT操作db_denydatawriter不能对数据库中任何表执行增加、修改和删除数据操作表6-7固定数据库角色表现在是36页\一共有84页\编辑于星期一在企业管理器中,打开要操作的数据库文件夹,右击“角色”文件夹,在弹出的菜单中选择“新建数据库角色”命令,打开“数据库角色属性—新建角色”对话框,如图6-11所示。在该对话框中可完成3种操作:在“名称”文本框中输入新角色名;在用户栏中增加或移去角色中的用户;确定数据库角色的类型。单击“确定”按钮可完成设置。图6-11

“新建数据库角色—新建角色”对话框②用户自定义的数据库角色。用户自定义的数据库角色有两种类型:标准角色和应用程序角色。现在是37页\一共有84页\编辑于星期一

权限管理分为语句权限管理和对象权限管理。语句权限是指用户是否具有权限来执行某一语句,这些语句通常是一些具有管理性的操作,如CREATEDATABASE、CREATETABLE等。对象权限是指用户能否在数据库的表、视图、存储过程中执行SELECT(查询)、UPDATE(修改)、INSERT(插入)、DELETE(删除)、EXECUT(调用过程)等操作,如果用户想对某一对象进行操作,必须具有相应的操作权限。无论是语句权限还是对象权限,都可以使用Transact-SQL的DCL,即GRANT和REVOKE语句实现其管理。4.SQLServer的权限管理现在是38页\一共有84页\编辑于星期一1)使用企业管理器管理语句权限的步骤(1)展开一个SQL服务器和相应的数据库文件夹,右击指定的数据库文件夹,在弹出的快捷菜单中,选择“属性”命令,如图6-12所示。随后,出现数据库属性对话框。(2)在数据库属性对话框中,选择“权限”选项卡,出现管理数据库语句权限的对话框,如图6-13所示。在对话框的列表栏中,单击表中的复选框,可分别对各用户或角色授予、撤销和废除数据库的语句操作权限。复选框有3种状态:“√”表示授予权限;“×”表示废除权限;空白表示撤销权限。图6-12数据库的弹出菜单

图6-13

管理数据库语句权限的对话框(3)完成后单击“确定”按钮。4.SQLServer的权限管理现在是39页\一共有84页\编辑于星期一2)使用企业管理器管理对象权限对象权限的管理可以通过两种方法实现:一种是通过对象管理其用户及操作权;另一种是通过用户管理对应的数据库对象及操作权。具体使用哪种方法要视管理的方便性来决定。(1)通过对象授予、撤销和废除用户权限。如果要一次为多个用户(角色)授予、撤销和废除对某一个数据库对象的权限,应采用通过对象的方法实现。具体操作步骤如下:①展开SQL服务器、数据库文件夹和数据库,选中其中一个数据库对象,如选中教学数据库中的表文件夹中的表,单击鼠标右键。②在弹出的菜单中选择“所有任务”→“管理权限”命令,如图6-14所示,弹出一个对象权限对话框,如图6-15所示。4.SQLServer的权限管理(续)现在是40页\一共有84页\编辑于星期一图6-14

选择“管理权限”命令

图6-15

对象权限对话框 ③在对象权限对话框中有两个单选按钮,若选中“列出全部用户/用户定义的数据库角色”单选按钮,则在下面的权限表中列出所有的数据库用户和角色;若选中“仅列出对此对象具有权限的用户/用户定义的数据库角色”单选按钮,则在下面的权限表中列出具有本对象操作权的数据库用户和角色。④对话框下面是数据库用户和角色所对应的权限表,表中权限用复选框表示。在表中可以对各用户或角色的各种对象操作权(SELECT、INSERT、UPDATE、DELETE、EXEC和DRI)进行授予或撤销。⑤完成后,单击“确定”按钮。现在是41页\一共有84页\编辑于星期一(2)通过用户或角色授予、撤销和废除对象权限。如果要为一个用户或角色同时授予、撤销或者废除多个数据库对象的使用权限,则可以通过用户或角色的方法进行。例如,要对教学数据库中的rolesl角色进行授权操作,可执行下列操作。①展开一个SQL服务器和数据库文件夹,单击用户或角色文件夹。在细节窗口中找到要选择的用户或角色,本例为角色中的rolesl角色,用鼠标右键单击该角色,在弹出的菜单中选择“属性”命令,出现如图6-16所示的“数据库角色属性—教学”对话框。图6-16

“数据库角色属性—教学”对话框现在是42页\一共有84页\编辑于星期一②在该对话框中,若选中“列出全部对象”单选按钮,则会在下面的权限表中列出全部数据库对象;若选中“仅列出该角色具有权限的对象”单选按钮,则下面的权限表中只列出该角色有操作权的对象。显然,要进行授权操作时应选前者,进行撤销或废除权限操作时选后者。③在对话框中的权限列表中,对每个对象进行授予、撤销和废除权限的操作。在权限表中,权限SELECT、INSERT、UPDATE等安排在列中,每个对象的操作权用一行表示,单击单元格可改变其状态。④完成后,单击“确定”按钮。现在是43页\一共有84页\编辑于星期一数据库完整性的含义

数据库的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。

数据库的完整性是指防止合法用户使用数据库时向数据库中加入不符合语义的数据。完整性措施的防范对象是不合语义的数据。

数据库的完整性6.2完整性约束条件是完整性控制机制的核心。现在是44页\一共有84页\编辑于星期一从约束条件使用的对象的粒度分静态约束

数据库处于确定状态时,数据对象应满足的约束条件;

动态约束

数据库从一种状态转变为另一种状态时,新旧值之间应满足的约束条件

列级约束元组级约束表级约束6.2.1完整性约束条件的类型从约束条件使用的对象的状态分现在是45页\一共有84页\编辑于星期一综上所述,可以将完整性约束条件分为以下6类。静态列级约束是对一个列的取值域的说明,即对数据类型、数据格式、取值范围和空值等进行规定。

(1)对数据类型的约束,包括数据的类型、长度、单位和精度等。

(2)对数据格式的约束。

(3)对取值范围的约束。

(4)对空值的约束。

(5)其他约束1.静态列级约束6.2.1完整性约束条件的类型(续)2.静态元组级约束静态元组级约束是各个列之间的约束关系。3.静态表级约束表中各个元组之间或若干关系之间存在的联系或约束。现在是46页\一共有84页\编辑于星期一(1)函数依赖约束。说明了同一关系中不同属性之间应满足的约束条件(2)统计约束。规定某属性值与一个关系多个元组的统计值之间必须满足某种约束条件。4.动态列级约束修改列定义或列值时必须满足的约束条件,它包括以下两方面:(1)修改列定义时的约束。(2)修改列值时的约束。修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。5.动态元组级约束6.动态表级约束修改元组的值时,元组中字段组或字段间需要满足某种约束。加在关系变化时的限制条件。现在是47页\一共有84页\编辑于星期一6.2.2完整性控制机制的功能DBMS的完整性控制机制应当具有以下3种功能。(1)定义功能。

允许用户定义所有的完整性约束条件。(2)检查功能。检查用户发出的操作请求是否违背了完整性约束条件。(3)保护功能。如果发现用户的操作请求违背了完整性约束条件,则采取一定的保护动作来保证数据的完整性。

完整性规则从执行时间上可分为立即执行约束(ImmediateConstraints)和延迟执行约束(DeferredConstraints)。现在是48页\一共有84页\编辑于星期一6.2.3完整性规则的组成一条完整性规则可以用一个五元组(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可作用于所用记录的SNO属性;P:拒绝执行用户的请求。现在是49页\一共有84页\编辑于星期一6.2.4SQLServer2000的数据完整性控制

在SQLServer中,可以通过各种约束、缺省、规则、触发器、存储过程等数据库对象来保证数据的完整性。1)约束(1)主关键字(PRIMARYKEY)约束。能够保证指定列的实体完整性,该约束可以应用于一列或多列,应用于多列时,被定义为表级约束。(2)外部关键字(FOREIGNKEY)约束。为表中一列或多列数据提供参照完整性。实施FOREIGNKEY约束时,要求在被参照表中定义PRIMARYKEY约束或UNIQUE约束。(3)唯一(UNIQUE)约束。能够保证一列或多列的实体完整性。对于实施UNIQUE约束的列,不允许有任意两行具有相同的索引值。SQLServer允许在每张表上建立多个UNIQUE约束。(4)检查(CHECK)约束。限制输入到一列或多列的可能值,从而保证SQLServer数据厍中数据的值域完整性。(5)默认值(DEFAULT)约束。使用此约束时,如果用户在插入数据操作时没有显式地为该列提供数据,系统就将默认值赋给该列。现在是50页\一共有84页\编辑于星期一2)缺省缺省是一种数据库对象,与默认值约束的作用类似,在INSERT语句中为指定数据列设置缺省值。缺省对象只适用于受INSERT语句影响的行。创建缺省对象使用CREATEDEFAULT语句,该语句只能在当前数据库中创建缺省对象。对每一个用户来说,在同一个数据库中所创建的缺省对象名称必须唯一。创建缺省后,必须将它与列或用户定义数据类型关联起来才能使其发挥作用。使用DROPDEFAULT语句删除指定的缺省对象。3)规则规则是对输入到列中的数据所实施的完整性约束条件,指定插入到列中的可能值。规则可以被关联到一列或几列,以及用户定义的数据类型。创建规则使用CREATERULE语句,删除规则使用DROPRULE语句。现在是51页\一共有84页\编辑于星期一4)触发器触发器是一种高功能、高开支的数据完整性方法,具有INSERT、UPDATE和DELETE3种类型,分别针对数据插入、数据更新和数据删除3种情况。触发器的用途是维护行级数据的完整性,不能返回结果集。与CHECK约束相比,触发器能强制实现更加复杂的数据完整性、执行操作或级联操作、实现多行数据间的完整性约束、维护非正规化的数据等。触发器是一个特殊的存储过程。在创建触发器时,通过CREATETRIGGER语句定义触发器对应的表、执行的事件和触发器的指令。当发生事件后,会引发触发器执行,通过执行其指令,保证数据完整性。现在是52页\一共有84页\编辑于星期一数据库并发性的含义为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整性。并发控制就是解决这类问题,以保持数据库中数据的一致性,即在任何一个时刻数据库都将以相同的形式给用户提供数据。并发控制6.3现在是53页\一共有84页\编辑于星期一6.3.1事务的基本概念事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。

定义事务的语句有三条:BEGINTRANSACTIONCOMMITROLLBACK

1.事务的特性事务的开始事务的提交事务的回滚现在是54页\一共有84页\编辑于星期一(1)原子性。一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”的原则,即不允许完成部分的事务。即使因为故障而使事务未能完成,它执行的部分结果也将被取消。事务的原子性是对事务最基本的要求。(2)一致性。事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态。2.事务的特性现在是55页\一共有84页\编辑于星期一(3)隔离性。如果多个事务并发地执行,应像各个事务独立地执行一样,一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。并发控制就是为了保证事务间的隔离性。(4)持久性。持久性也称永久性(Permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使系统发生故障也不应该对其有任何影响。持久性的意义在于保证数据库具有可恢复性。现在是56页\一共有84页\编辑于星期一例如

飞机机票订票系统。假设机票余额R=100张,甲事务T1读出某航班目前的机票余额数100张,订出1张机票,乙事务T2读出同航班目前的机票余额数,订出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并发操作引发的问题现在是57页\一共有84页\编辑于星期一两个事务T1和T2读入同一数据,并发执行修改操作时,会出现事务T2提交的结果破坏了事务T1提交的结果,导致T1的修改结果丢失的问题,如表6-8所示。

表6-8

丢失修改执行顺序事务T1数据库中R的值事务T2t0100t1从数据库读R=100t2从数据库读R=100t3执行R=R−1t4执行R=R−1t5写回R=99t699写回R=991.丢失修改现在是58页\一共有84页\编辑于星期一

事务T1修改某一数据R,并将修改结果写回到磁盘,事务T2读取了修改后的数据R,但事务T1由于某种原因撤销了所有的操作,这样被事务T1修改过的数据R又恢复为原值,这时,事务T2得到的数据与数据库中的数据不一致,是不正确的数据,这种情况称为读“脏”数据,如表6-9所示。

表6-9读“脏”数据示例执行顺序事务T1数据库中R的值事务T2t0

100t1从数据库读R=100t2R=R−1t3写回R=99t499从数据库读R=99t5ROLLBACKT61002.读“脏”数据现在是59页\一共有84页\编辑于星期一事务T1读取了数据R后,事务T2读取并更新了数据R,当事务T1再读取数据R以进行核对时,得到的读取值不一致,这种情况称为不可重读,如表6-10所示。

表6-10不可重复读示例执行顺序事务T1数据库中R的值事务T2t0100t1从数据库读R=100t2从数据库读R=100t3执行R=R−1t4写回R=99t5从数据库读R=99993.不可重读现在是60页\一共有84页\编辑于星期一产生“幻影”数据属于不可重读的范畴。事务T1按一定条件从数据库中读取了某些数据R后,事务T2删除了其中的部分记录,或者在其中插入了一些记录,当事务T1再次按相同条件读取数据R时,发现某些记录消失了(删除)或多了(插入)一些记录。这样的数据对事务T1来说就是“幻影”数据,或称“幽灵”数据。

分析:产生上述4个问题是由于违反了事务ACID中的4项原则,特别是事务的隔离性原则。为了保证事务并发执行的正确性,必须要有一定的控制手段保障在事务并发执行中一个事务的执行不受其他事务的影响,避免造成数据的不一致。

4.产生“幻影”数据现在是61页\一共有84页\编辑于星期一封锁的含义

所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。

6.3.3封锁及封锁协议封锁类型有两种

排他锁

排它型封锁又称写封锁,简称为X封锁,它采用的原理是禁止并发操作。共享锁

共享封锁又称读封锁,简称为S锁,它采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。

1.锁的类型现在是62页\一共有84页\编辑于星期一排他锁与共享锁的控制方式可用图6-17表示。图6-17

封锁类型的相容矩阵T2T1XS—XNNYSNYY—YYY其中,Y=Yes,表示相容的请求;N=No,表示不相容的请求。在上述封锁类型的相容矩阵中,最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线“—”表示没有加锁;最上面一行表示事务T2对同一数据对象发出的封锁请求。事务T2的封锁请求能否被满足用矩阵中的Y或N表示,Y表示事务T2的封锁请求与事务T1已持有的锁相容,封锁请求可以满足;N表示事务T2的封锁请求与事务T1已持有的锁冲突,请求被拒绝。现在是63页\一共有84页\编辑于星期一上面讲述过的并发操作所带来的丢失修改、读“脏”数据和不可重读等数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决:一级封锁协议

事务T在修改数据对象之前必须对其加X锁,直到事务结束。二级封锁协议

在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。三级封锁协议在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。

2.封锁协议现在是64页\一共有84页\编辑于星期一表6-11使用一级封锁协议防止丢失修改执行顺序事务T1数据库中R的值事务T2t0XLOCKR100t1从数据库读R=100t2XLOCKR(失败)t3执行R=R−1WAITt4写回R=99WAITt5UNLOCK

X99WAITt6XLOCKR(重做成功)t7从数据库读R=99t8执行R=R−1t9写回R=98t1098UNLOCKX现在是65页\一共有84页\编辑于星期一表6-12

使用二级封锁协议防止读“脏”数据执行顺序事务T1数据库中R的值事务T2t0XLOCKR100t1从数据库读R=100t2执行R=R−1t3写回

R=9999t4SLOCKR(失败)t5WAITt6ROLLBACK100WAITt7UNLOCKRWAITt8SLOCKR(重做成功)T9从数据库中读R=100T10UNLOCKS现在是66页\一共有84页\编辑于星期一执行顺序事务T1数据库中R的值事务T2t0100t1SLOCK

Rt2从数据库中读R=100t3XLOCKRt4WAITt5读R=100WAITt6UNLOCKSWAITt7XLOCKRt8读R=100t9R=R-1t10写回R=99t11UNLOCKX

表6-13使用三级封锁协议防止不可重读现在是67页\一共有84页\编辑于星期一(1)并发调度的可串行化。①串行执行:以事务为单位,多个事务依次顺序执行,前一个事务对数据库的访问操作执行结束后,再去处理下一个事务对数据库的访问操作。串行执行能保证事务的正确执行。

②并发执行:以事务为单位,按一定的调度策略同时执行。③并发调度的可串行化:事务的并发执行并不能保证事务的正确性,因此需要采用一定的技术,使得在并发执行时像串行执行一样(正确),这种执行称为并发调度的可串行化。【例6-1】

假设有两个事务T1和T2,初始值A=10,B=10。两事务分别包含如下所示的操作,试分析执行的结果。T1:READ(A)

T2:READ(B)

A:=A−5B:=B−5WRITE(A)

WRITE(B)

READ(B)

B:=B+5WRITE(B)3.并发调度的可串行化与两段锁协议现在是68页\一共有84页\编辑于星期一(a)串行执行之一

(b)串行执行之二

c)可串行化

(d)不可串行化 图6-18几种调度方案现在是69页\一共有84页\编辑于星期一图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(c)的执行结果为A=5,B=10,所以是可串行化调度,但是图6-18(d)的执行结果为A=5,B=15,不等价于任一个串行调度,所以是一个不可串行化调度,其结果是不正确的。为了保证并发操作的正确性,DBMS的并发控制机制必须提供一定的手段来保证调度是可串行化的。两段锁(Two-PhaseLocking,简称2PL)协议就是保证并发调度可串行性的封锁协议。现在是70页\一共有84页\编辑于星期一(2)两段锁协议。所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加锁和解锁。第一阶段是申请并获得锁,也称为扩展阶段。第二阶段是释放所有原申请获得的锁,也称为收缩阶段。如图6-19所示是遵守两段锁协议的序列。图6-19遵守两段锁协议的封锁序列

结论:所有两段锁协议的事务,其并发执行的结果一定是正确的。现在是71页\一共有84页\编辑于星期一表6-15活锁实例时

间事务T1事务T2事务T3事务T4t0LOCKRt1…LOCKRt2WAITLOCKRt3UNLOCKRWAITWAITLOCKRt4…WAITLOCKRWAITt5WAITWAITt6WAITUNLOCKRWAITt7WAITLOCKRt8WAIT解决活锁最有效的方法是采用“先来先服务”的控制策略。6.3.4封锁出现的问题和解决方法1.活锁

当某个事务请求对某一数据进行排它性封锁时,由于其他事务对该数据的操作而使这个事务处于永久等待状态,这种状态称为活锁。现在是72页\一共有84页\编辑于星期一2.死锁

所谓死锁即事务之间对锁的循环等待。也就是说,多个事务申请不同的锁,申请者均拥有一部分锁,而它又在等待另外事务所拥有的锁,这样相互等待,从而造成它们都无法继续执行,如表6-16所示。表6-16死锁实例时

间事务T1事务T2t0LOCR1t1…LOCKR2t2…t3LOCKR2t4WAIT—t5WAITLOCKR1t6WAITWAITt7WAITWAIT现在是73页\一共有84页\编辑于星期一(1)预防死锁的方法①一次封锁法一次封锁法是指每个事务一次性地申请它所需要的全部锁,对一个事务来说,要么获得所需的全部锁,要么一个锁也不占有。这样,一个事务不会既等待其他事务,又被其他事务等待,从而不会出现循环等待。②顺序封锁法顺序封锁法是指将数据对象按序编号,在申请时,要求按序请求,这样只有请求低序号数据对象的锁的事务等待占有高序号数据对象的锁的事务,而不可能出现相反的等待,因而不可能发生循环等待。(2)诊断与解除死锁的方法。

超时法②等待图法现在是74页\一共有84页\编辑于星期一封锁粒度指封锁的单位。根据对数据的不同处理,封锁的对象可以是这样一些逻辑单元:字段、记录、表、数据库等,封锁的数据对象的大小叫封锁粒度。封锁粒度越小,系统中能够被封锁的对象就越多,并发度越高,但封锁机构复杂,系统开销也就越大。封锁粒度越大,系统中能够被封锁的对象就越少,并发度越低,封锁机构越简单,相应系统开销也就越小。6.3.5封锁粒度现在是75页\一共有84页\编辑于星期一1.SQLServer的空间管理及锁的级别锁是为防止其他事务访问指定的资源,实现并发控制的主要手段。要加快事务的处理速度并缩短事务的等待时间,就要使事务锁定的资源最小。(1)行和行级锁。行是可以锁定的最小空间资源。行级锁是指事务操作过程中,锁定一行或若干行数据。行级锁占用的数据资源最少,并避免了数据被占用但不使用的现象,因而是最优锁。(2)页和页级锁。在SQLServer中,除行外的最小数据单位是页。一个页有8KB,所有的数据、日志和索引都放在页上。为了管理方便,表中的行数据必须在同一页上,不允许跨页存放。页级锁是指在事务的操作过程中,无论事务处理多少数据,每一次都锁定一页。6.3.6SQLServer2000的并发控制机制现在是76页\一共有84页\编辑于星期一(3)簇和簇级锁。页之上的空间管理单位是簇,一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论