《数据库安全保护》PPT课件.ppt_第1页
《数据库安全保护》PPT课件.ppt_第2页
《数据库安全保护》PPT课件.ppt_第3页
《数据库安全保护》PPT课件.ppt_第4页
《数据库安全保护》PPT课件.ppt_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

*1 本章内容 数据库的完整性 6.2 并发控制 6.3 数据库的安全性 6.1 数据库的恢复 6.4 v本章介绍 数据共享是数据库的基本性能要求,多用户共享数据库 时,必然有合法用户合法使用、合法用户非法使用以及非 法用户非法使用数据的问题,要保证合法用户合法使用数 据库及数据共享的安全性,就需要对数据库实施保护。 数据库的保护技术主要有数据库的安全性、完整性、并 发控制及恢复4方面内容。 第六章 数据库安全保护(续) 数据库的安全性 6.1 6.1.1 计算机系统的安全性 计算机系统安全性的含义 : 计算机系统安全性就是指计算机系统建立和采取的各种安全保护措施, 以保护计算机系统中的硬件、软件等资源,不因各种有意无意的原因而遭到 破坏、泄密或拒绝正常使用,使计算机系统的全部资源能保持其正常状态。 安全性问题有许多方面 : 计算机系统的安全性不仅涉及到计算机系统本身的技术问题、管理问题 ,还涉及法学、犯罪学、心理学等问题,其内容包括计算机安全理论与策略 、计算机安全技术、安全管理、安全评价、安全产品,以及计算机犯罪与侦 察、计算机安全法律等。概括起来,计算机系统的安全性问题可分为技术安 全类、管理安全类和政策法律类三大类。 数据库安全性的含义 : 数据库的安全性是指保护数据库以防止非法使用所造 成的数据泄露、更改或破坏。 安全性问题包括 : (1)法律、社会和伦理方面时问题。 (2)政策方面的问题。 (3)硬件控制方面的问题。 (4)物理控制方面的问题。 (5)运行方面的问题。 (6)操作系统安全性方面的问题。 (7)数据库系统本身的安全性方面的问题。 6.1.2 数据库的安全性 安全控制模型控制位置 安全性控制就是指要尽可能地杜绝所有可能的数据库 非法访问。 用户 DBMS DB OS 用户标识和鉴定访问控制 定义视图数据加密和审计 6.1.3 安全性控制的一般方法 安全性控制的一般方法 用户标识和鉴定 用户存取权限控制 定义视图 数据加密 审计(Audit) 用户标识和鉴定是由系统提供一定的方式让用户标识自己 的名字或身份,系统内部记录着所有合法用户的标识,每 次用户要求进入系统时,由系统将用户提供的身份标识与 系统内部记录的合法用户标识进行核实,通过鉴定后才提 供机器的使用权。 用户标识和鉴定的方法 (1)用一个用户名或用户标识符来标明用户的身份,系统以此来鉴 别用户的合法性。 (2)用户标识符是用户公开的标识,它不足以成为鉴别用户身份的 凭证。 (3)通过用户名和口令来鉴定用户的方法简单易行,但该方法在使 用时,由于用户名和口令的产生和使用比较简单,也容易被窃 取,因此还可采用更复杂的方法如函数和计算过程。 1用户标识和鉴定 用户存取权限指的是不同的用户对于不同的数据对象 允许执行的操作权限。 在数据库系统中,定义用户存取权限称为授权 。 这些授权定义经过编译后以一张授权表的形式存放在 数据字典中。 2存取权限控制 存取权限由两个要素组成:数据对象和操作类型。 定义一个用户的存取权限就是要定义该用户可以在 哪些数据对象上进行哪些类型的操作。 DBA特权用户-GRANT REVOKE- 其他用户 数 据 对 象操 作 类 型 模式 模式建立、修改、检索 外模式建立、修改、检索 内模式建立、修改、检索 数据 表 查找、插入、修改、 删除 属性列 查找、插入、修改、 删除 表6-1 关系数据库系统中的存取权限 用户标识数据对象操作类型用户标识数据对象操作类型 USER1关系SALLUSER3关系SCINSERT USER2关系CSELECT USER2关系SCUPDATE 表6-2 授权表的例子(1) 对于一个授权表,衡量授权机制的一个重要指标就是 授权粒度。授权粒度就是可以定义的数据对象的范围。 授权定义中粒度越细,授权子系统就越灵活。 如表6-2所示是一个授权粒度很粗的表,它只能对整个 关系授权,如用户USER1拥有对关系S的一切权限;用户 USER2拥有对关系C的SELECT权限以及对关系SC的UPDATE权 限;用户USER3只可以向关系SC中插入新记录。 用户标识数据对象操作类型用户标识数据对象操作类型 USER1关系SALLUSER3关系SCINSERT USER2列C.CNOSELECT USER2列SC.SCOREUPDATE 表6-3 授权表的例子(2) 如表6-3所示是一个授权粒度较为精细的表,它可以精确到关系 的某一属性。用户USER1拥有对关系S的一切权限;用户USER2只能查 询关系C的CNO属性和修改关系SC的SCORE属性;用户USER3可以向关 系SC中插入新记录。 在关系数据库系统中,可以为不同的用户定义不同的视图 ,通过视图机制把要保密的数据对无权操作的用户隐藏起来, 从而自动地为数据提供一定程度的安全保护。 在实际应用中,通常将视图机制与授权机制结合起来使用 :首先用视图机制屏蔽一部分保密数据,然后在视图上再进一 步定义存取权限。 3定义视图 例如,限制USER1只能对数学系的学生进行操作。一种方法是 通过授权语句对USER1授权,另一种简单的方法就是先建立数 学系学生的视图,然后在该视图上定义存取权限。 加密的基本思想是根据一定的算法将原始数据(明文 )变换为不可直接识别的格式(密文),从而使得不知道 解密算法的人无法获得数据的内容。 加密方法主要有两种: 4数据加密 (1)信息替换方法。该方法使用密钥将明文中的每一个 字符转换为密文中的字符。 (2)信息置换方法。该方法仅将明文的字符按不同的顺 序重新排列。 单独使用这两种方法的任意一种都是不够安全的,但是 将这两种方法结合起来就能达到相当高的安全程度。 审计功能是一种监视措施,它跟踪记录有关数据的访 问活动。 审计追踪把用户对数据库的所有操作自动记录下来, 存放在一个特殊文件中,即审计日志中。 记录的内容一般包括:操作类型(如修改、查询等 ),操作终端标识与操作者标识,操作日期和时间, 操作所涉及到的相关数据(如基本表、视图、记录、 属性等),数据的前象和后象等。 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个等级。较高安全等级提供的安全保护包含较 低等级的所有保护要求,同时提供更多、更完善的保护能 力。 6.1.4 数据库的安全标准 1)D级安全标准 D级安全标准为无安全保护的系统。 2)C1级安全标准 满足C1级安全标准的系统必须具有如下功能: (1)身份标识与身份鉴别。 (2)数据完整性。 (3)存取控制。 C1级安全标准的核心是存取控制,适合于单机工作 方式。 v1TCSEC/TDI标准 3)C2级安全标准 (1)满足C1级安全标准的全部功能。 (2)审计。 C2级安全标准的核心是审计,适合于单机工作方式 ,目前国内所使用的系统一部分符合该标准。满足C2标 准的数据库系统有Oracle 7 及以上版本系统、Sybase 公司的Sybase SQL Server 11.0.6、微软公司的 MS SQL Server 2000等。 4)B1级安全标准 (1)满足C2级安全标准的全部功能。 (2)存取控制。 B1级安全标准的核心是存取控制,适合于网络工作方式,目 前国内所使用的系统基本不符合该标准,而在国际上,有部分 系统符合这一标准。满足B1标准的数据库系统有Oracle公司的 Trusted Oracle 7、Sybase公司的Secure SQL Server version 11.0.6等。 凡符合B1级安全标准的数据库系统称为安全数据库系统或可 信数据库系统。 5)B2级安全标准 (1)满足B1级安全标准的全部功能。 (2)具有隐蔽通道。 (3)具有数据库安全的形式化。 B2级安全标准的核心是隐蔽通道与形式化,适合于网络工作 方式,目前国内外均尚无符合这一标准的系统,其主要的难点 是数据库安全的形式化表示。 6)B3级安全标准 (1)满足B2级安全标准的全部功能。 (2)访问监控器。 B3级安全标准的核心是访问监控器,适合于网络工作 方式,目前国内外均尚无符合这一标准的系统。 7)A1级安全标准 (1)满足B3级安全标准的全部功能。 (2)具有较高的形式化要求。 此级标准的安全级别最高,应具有完善的形式化要求 。目前尚无法实现,仅仅是一种理想化的等级。 我国标准分为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-5 TCSEC标准与我国标准的对比 数据库建立之后,数据的安全性最为重要。SQL Server 2000提供了一套设计完善、操作简单的安全管理机制。 图6-2 SQL Server 2000 的安全体系结构 6.1.5 SQL Server 2000的安全性控制 1SQL Server 2000的安全体系结构 用户要访问数据库,需经过以下步骤: (1)具有登录账户。在这个前提条件下,才有可能进入SQL Server 2000系统。 (2)数据库服务器的登录账户,才具有数据库服务器的连接权或登 录权。SQL Server 2000只有在验证了指定的登录账户有效后,才能完 成连接。这种对登录账户的验证称为身份验证模式。 (3)当一个登录者登录数据库服务器后,并不等于对其中的数据库 具有访问权限,还必须由数据库所有者或管理员授权,使该登录者成为 某一个数据库的用户。 (4)作为某个数据库的用户,对数据库对象的访问权限也必须被授 予,这些权限包括SELECT、UPDATE、INSERT、DELETE等。这种用户访问 数据库权限的设置是通过用户账号来实现的。 Windows身份验证模式利用了用户安全性和账号管理机制, 用户只需使用Windows的用户名和密码,通过Windows的身份验 证,就可以连接到SQL Server,登录SQL Server 2000时不再进 行身份验证,从而实现SQL Server 与Windows登录的安全集成 。因此,也称这种模式为安全验证模式。 混合身份验证模式,即Windows身份验证模式和SQL Server 身份验证模式的混合,表示SQL Server 接受Windows授权用户 和SQL授权用户。在这种模式下,用户必须输入有效的SQL Server登录账号及口令,因为SQL Server要用这两部分内容来 验证用户的身份。 v 2SQL Server 2000的身份验证模式 1)设置 SQL Server身份验证模式的步骤 (1)在企业管理器下展开服务器组,右击要设置的数据库服务器 名称,在下拉菜单中选择“属性”命令,如图6-3所示。 (2)在弹出的“SQL Server属性(配置)”对话框中,选择“安 全性”选项卡,如图6-4所示,在此选项卡中有一个“安全性”栏, 可根据需要选择所需的身份验证模式。 图6-3 服务器属性查看 图6-4 “SQL Server属性(配置)”对话框 v 2SQL Server 2000的身份验证模式(续1) 2)通过企业管理器设置Windows身份验证模式登录账号的步骤 (1)创建Windows系统的账号。以管理员身份登录Window XP,选择“开始 ”“设置”“控制面板”“管理工具”“计算机管理”命令,在“计算 机管理”窗口中展开“本地用户和组”,右击“用户”选项,在下拉菜单中选择 “新用户”命令,如图6-5所示。 (2)在“新用户”对话框中输入用户名、密码和确认密码后,单击“创建” 按钮,创建一个系统账号。重复上面过程可以继续创建用户,如果不再创建可单 击“关闭”按钮, 图6-5 创建新用户 图6-6 “新用户”对话框 v 2SQL Server 2000的身份验证模式(续2) (3)进入SQL Server 2000的企业管理器,展开服务器组,选择要操作的服务 器,展开“安全性”选项,右击“登录”选项,在下拉菜单中选择“新建登录” 命令,如图6-7所示。 (4)在新建登录属性对话框中有“常规”、“服务器角色”和“数据库访问 ”选项卡。打开“常规”选项卡,单击“名称”文本框右侧的“”按钮,在弹 出的用户列表中选择用户名后依次单击“添加”、“确定”按钮,将用户名添加 到“名称”文本框中;在“身份验证”属性中选择“Windows身份验证”,在“ 安全性访问”中选择“允许访问”,然后单击“确定”按钮实现将Windows账号 添加到SQL Server 2000中,如图6-8所示。 图6-7 新建登录向导 图6-8 登录属性设置 3)在混合模式下创建SQL Server登录账号的步骤 在Windows XP或Windows 2003系统中,应将SQL Server 2000数据库服务器的验证模式设置为混合模式 。其步骤如下。 (1)在企业管理器中选择要设置的数据库服务器, 展开“安全性”选项,右击“登录”选项,在下拉菜单 中选择“新建登录”命令。 (2)在弹出的新建登录窗口中,输入用户名称,选 择验证方式为“SQL Server身份验证”,输入密码并确 认新密码,连续两次单击“确定”按钮,创建一个SQL Server登录账号。 v 2SQL Server 2000的身份验证模式(续3) 数据库的安全管理主要是对数据库用户的合法性和操作权限 的管理,包括数据库系统登录用户管理、数据库用户管理、数据 库系统角色管理以及数据库访问权限的管理。 1)数据库系统登录用户管理 SQL Server在安装时,会自动创建一个登录用户sa,即系统管 理员。该用户可以执行所有的操作,是超级用户。几乎所有的创 建用户和授权的工作都由sa来完成,除非他将授权工作转授给专 门的权限管理人员。 在企业管理器下展开Microsoft SQL Serve服务器组,选择要 操作的服务器,展开“安全性”选项,右击“登录”选项,在下 拉菜单中选择“新建登录”命令,如图6-7所示。在该对话框中输 入登录用户名、选择身份验证模式、选择登录到SQL Server之后 要连接的默认数据库,最后单击“确定”按钮,关闭“新建登录 ”对话框。这时,在企业管理器的“登录”面板中可以看到新建 的登录用户。 3SQL Server的安全管理 2)数据库用户管理 数据库用户是指具有合法身份的数据库使用者, 其作用范围局限于其所属的数据库,必须对应到登录 用户。登录用户只有成为数据库用户后才能访问数据 库,数据库用户可以与登录用户同名,也可以不同名 。例如,登录用户sa自动与每一个数据库用户dbo相 关联。 SQL Server数据库中有两个特殊的用户:Dbo和 Guest。Dbo是数据库对象拥有者;Guest是一个公共 用户,主要是将没有自己的用户账号的SQL Server登 录者作为默认的用户,从而使该登录者能够访问具有 Guest用户的数据库。 3SQL Server的安全管理(续1) 在企业管理器中创建新的数据库用户的步骤如下: (1)在企业管理器中,展开服务器组,再展开服务器。 (2)展开“数据库”文件夹,打开要创建用户的数据库。 (3)右击“用户”选项,从快捷菜单中选择“新建数据库 用户”命令,弹出“数据库用户属性新建用户”对话框, 如图6-9所示。 图6-9 “数据库用户属性新建用户”对话框 (4)在“登录名”下拉列表框中选择一个登录账号,在 “用户名”文本框中输入数据库用户名,在“数据库角色成 员”列表中为该用户选择数据库角色。 (5)单击“确定”按钮,完成数据库用户的创建。创建 数据库用户后,可设置其权限。 (6)查看数据库用户。在企业管理器中,展开要查看用户 的数据库,单击“用户”,则右侧窗口中将显示当前数据库 的所有用户信息。 (7)删除数据库用户。在右面的窗格中右击想要删除的数 据库用户,在弹出的快捷菜单中选择“删除”命令,则会从 当前数据库中删除该数据库用户。 3)数据库系统角色管理 具有相同权限的一组用户称为角色,数据库系统角色管 理包括服务器角色管理和数据库角色管理。 (1)服务器角色管理。 服务器角色是指根据SQL Server的管理任务,以及与 这些任务相对的重要性等级来把具有SQL Server 管理职 能的用户划分成不同的用户组。每一组所具有的管理SQL Server的权限已被预定义在服务器范围内,且不能修改 ,所以也称为固定服务器角色。例如,具有Sysadmin角 色的用户在SQL Server中可以执行任何管理性工作,任 何企图对其权限进行修改的操作,都将会失败。 3SQL Server的安全管理(续2) SQL Server 共有7种固定服务器角色,其具体含义如表6-6所示。 服务器角色含 义 系统管理员(Sysadmin)拥有SQL Server所有的权限许可 服务器管理员( Serveradmin) 管理SQL Server 服务器端的设置 安装管理员(Setupadmin) 增加和删除连接服务器、建立数据库复制、管理 扩展存储过程 安全管理员( Securityadmin) 管理和审核SQL Server系统登录 进程管理员(Processadmin ) 管理SQL Server系统进程 数据库创建者(Dbcreator ) 创建数据库,并对数据库进行修改 磁盘管理员(Diskadmin)管理磁盘文件 表6-6 服务器角色表 在企业管理器下将一个用户添加为服务器角色成员的步骤 在企业管理器下,登录数据库服务器,选择某一登录 账号后单击右键,在下拉菜单中选择“属性”命令。 在“登录属性”对话框中选择“服务器角色”选项卡 ,如图6-10所示,单击“确定”按钮,将一个用户添加为服 务器角色成员。 图6-10 “服务器角色”选项卡 数据库角色对应于单个数据库,分为固定数据库角色和用户自定义的 数据库角色。 固定数据库角色。 SQL Server提供了9个常用的固定数据库角色,其具体含义如下表所 示。 (2)数据库角色管理。 预定义的数据库角色含 义 db_owner数据库的所有者,可以对所有拥有的数据库执行任何操作 db_accessadmin可以增加或删除数据库用户、工作组和角色 db_datareader查看来自数据库的所有用户表的全部数据 db_datawriter增加、修改和删除全部表中的数据,但不能进行SELECT操作 db_addladmin增加、删除和修改数据库中任何对象 db_securityadmin执行语句和对象权限管理 db_backupoperator备份和恢复数据库 db_denydatareader不能对数据库中任何表执行SELECT操作 db_denydatawriter不能对数据库中任何表执行增加、修改和删除数据操作 表6-7 固定数据库角色表 在企业管理器中,打开要操作的数据库文件夹,右击“ 角色”文件夹,在弹出的菜单中选择“新建数据库角色”命 令,打开“数据库角色属性新建角色”对话框,如图6-11 所示。在该对话框中可完成3种操作:在“名称”文本框中 输入新角色名;在用户栏中增加或移去角色中的用户;确定 数据库角色的类型。单击“确定”按钮可完成设置。 图6-11 “新建数据库角色新建角色”对话框 用户自定义的数据库角色。 用户自定义的数据库角色有两种类型:标准角色和应用程序角色 。 权限管理分为语句权限管理和对象权限管理。 语句权限是指用户是否具有权限来执行某一语句,这些语 句通常是一些具有管理性的操作,如CREATE DATABASE、CREATE TABLE等。 对象权限是指用户能否在数据库的表、视图、存储过程中 执行SELECT(查询)、UPDATE(修改)、INSERT(插入)、 DELETE(删除)、EXECUT(调用过程)等操作,如果用户想对 某一对象进行操作,必须具有相应的操作权限。 无论是语句权限还是对象权限,都可以使用Transact-SQL的 DCL,即GRANT和REVOKE语句实现其管理。 4SQL Server的权限管理 1)使用企业管理器管理语句权限的步骤 (1)展开一个SQL服务器和相应的数据库文件夹,右击指定的数据库文件夹 ,在弹出的快捷菜单中,选择“属性”命令,如图6-12所示。随后,出现数据 库属性对话框。 (2)在数据库属性对话框中,选择“权限”选项卡,出现管理数据库语句权 限的对话框,如图6-13所示。在对话框的列表栏中,单击表中的复选框,可分 别对各用户或角色授予、撤销和废除数据库的语句操作权限。复选框有3种状态 :“”表示授予权限;“”表示废除权限;空白表示撤销权限。 图6-12 数据库的弹出菜单 图6-13 管理数据库语句权限的对话框 (3)完成后单击“确定”按钮。 4SQL Server的权限管理 2)使用企业管理器管理对象权限 对象权限的管理可以通过两种方法实现:一种是通过对象管 理其用户及操作权;另一种是通过用户管理对应的数据库对象 及操作权。具体使用哪种方法要视管理的方便性来决定。 (1)通过对象授予、撤销和废除用户权限。 如果要一次为多个用户(角色)授予、撤销和废除对某一个 数据库对象的权限,应采用通过对象的方法实现。具体操作步 骤如下: 展开SQL服务器、数据库文件夹和数据库,选中其中一个 数据库对象,如选中教学数据库中的表文件夹中的表,单击鼠 标右键。 在弹出的菜单中选择“所有任务”“管理权限”命令, 如图6-14所示,弹出一个对象权限对话框,如图6-15所示。 4SQL Server的权限管理(续) 图6-14 选择“管理权限”命令 图6-15 对象权限对话框 在对象权限对话框中有两个单选按钮,若选中“列出全部用户用户定 义的数据库角色”单选按钮,则在下面的权限表中列出所有的数据库用户和角 色;若选中“仅列出对此对象具有权限的用户用户定义的数据库角色”单选 按钮,则在下面的权限表中列出具有本对象操作权的数据库用户和角色。 对话框下面是数据库用户和角色所对应的权限表,表中权限用复选框表 示。在表中可以对各用户或角色的各种对象操作权(SELECT、INSERT、UPDATE 、DELETE、EXEC和DRI)进行授予或撤销。 完成后,单击“确定”按钮。 (2)通过用户或角色授予、撤销和废除对象权限。 如果要为一个用户或角色同时授予、撤销或者废除多个数据库对象的使用 权限,则可以通过用户或角色的方法进行。例如,要对教学数据库中的 rolesl角色进行授权操作,可执行下列操作。 展开一个SQL服务器和数据库文件夹,单击用户或角色文件夹。在细节 窗口中找到要选择的用户或角色,本例为角色中的rolesl角色,用鼠标右键 单击该角色,在弹出的菜单中选择“属性”命令,出现如图6-16所示的“数 据库角色属性教学”对话框。 图6-16 “数据库角色属性教学”对话框 在该对话框中,若选中“列出全部对象”单选按钮 ,则会在下面的权限表中列出全部数据库对象;若选中“ 仅列出该角色具有权限的对象”单选按钮,则下面的权限 表中只列出该角色有操作权的对象。显然,要进行授权操 作时应选前者,进行撤销或废除权限操作时选后者。 在对话框中的权限列表中,对每个对象进行授予、 撤销和废除权限的操作。在权限表中,权限SELECT、 INSERT、UPDATE等安排在列中,每个对象的操作权用一行 表示,单击单元格可改变其状态。 完成后,单击“确定”按钮。 v数据库完整性的含义 数据库的完整性是指保护数据库中数据的正确性、有 效性和相容性,防止错误的数据进入数据库造成无效 操作。 数据库的完整性是指防止合法用户使用数据库时向数 据库中加入不符合语义的数据。完整性措施的防范对 象是不合语义的数据。 数据库的完整性 6.2 完整性约束条件是完整性控制机制的核心。 从约束条件使用的对象的粒度分 静态约束 数据库处于确定状态时,数据对象应满足的约束条件; 动态约束 数据库从一种状态转变为另一种状态时,新旧值之间应满足的约束条件 列级约束 元组级约束 表级约束 6.2.1 完整性约束条件的类型 从约束条件使用的对象的状态分 综上所述,可以将完整性约束条件分为以下6类。 静态列级约束是对一个列的取值域的说明,即对数据类型、数据格式、 取值范围和空值等进行规定。 (1)对数据类型的约束,包括数据的类型、长度、单位和精 度等。 (2)对数据格式的约束。 (3)对取值范围的约束。 (4)对空值的约束。 (5) 其他约束 1.静态列级约束 6.2.1 完整性约束条件的类型(续) 2.静态元组级约束 静态元组级约束是各个列之间的约束关系。 3静态表级约束 表中各个元组之间或若干关系之间存在的联系或约束。 (1)函数依赖约束。说明了同一关系中不同属性之间应满足的约束条件 (2)统计约束。规定某属性值与一个关系多个元组的统计值之间必须满 足某种约束条件。 4动态列级约束 修改列定义或列值时必须满足的约束条件,它包括以下两方面: (1)修改列定义时的约束。 (2)修改列值时的约束。 修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束 条件。 5动态元组级约束 6动态表级约束 修改元组的值时,元组中字段组或字段间需要满足某种约束。 加在关系变化时的限制条件。 6.2.2 完整性控制机制的功能 DBMS的完整性控制机制应当具有以下3种功能。 (1)定义功能。 允许用户定义所有的完整性约束条件。 (2)检查功能。 检查用户发出的操作请求是否违背了完整性约束条件。 (3)保护功能。 如果发现用户的操作请求违背了完整性约束条件,则采取一定的保护动 作来保证数据的完整性。 完整性规则从执行时间上可分为立即执行约束(Immediate Constraints)和延迟执行约束(Deferred Constraints)。 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:拒绝执行用户的请求。 6.2.4 SQL Server 2000的数据完整性控制 在SQL Server中,可以通过各种约束、缺省、规则、触发器 、存储过程等数据库对象来保证数据的完整性。 1)约束 (1)主关键字(PRIMARY KEY)约束。能够保证指定列的实体完整性 ,该约束可以应用于一列或多列,应用于多列时,被定义为表级约束。 (2)外部关键字(FOREIGN KEY)约束。为表中一列或多列数据提供 参照完整性。实施FOREIGN KEY约束时,要求在被参照表中定义PRIMARY KEY约束或UNIQUE约束。 (3)唯一(UNIQUE)约束。能够保证一列或多列的实体完整性。对于 实施UNIQUE约束的列,不允许有任意两行具有相同的索引值。SQL Server允许在每张表上建立多个UNIQUE约束。 (4)检查(CHECK)约束。限制输入到一列或多列的可能值,从而保 证SQL Server数据厍中数据的值域完整性。 (5)默认值(DEFAULT)约束。使用此约束时,如果用户在插入数据 操作时没有显式地为该列提供数据,系统就将默认值赋给该列。 2)缺省 缺省是一种数据库对象,与默认值约束的作用类似,在 INSERT语句中为指定数据列设置缺省值。缺省对象只适用于受 INSERT语句影响的行。 创建缺省对象使用CREATE DEFAULT语句,该语句只能在当前 数据库中创建缺省对象。对每一个用户来说,在同一个数据库 中所创建的缺省对象名称必须唯一。创建缺省后,必须将它与 列或用户定义数据类型关联起来才能使其发挥作用。使用DROP DEFAULT语句删除指定的缺省对象。 3)规则 规则是对输入到列中的数据所实施的完整性约束条件,指定 插入到列中的可能值。规则可以被关联到一列或几列,以及用 户定义的数据类型。创建规则使用CREATE RULE语句,删除规则 使用DROP RULE语句。 4)触发器 触发器是一种高功能、高开支的数据完整性方法,具有 INSERT、UPDATE和DELETE 3种类型,分别针对数据插入 、数据更新和数据删除3种情况。 触发器的用途是维护行级数据的完整性,不能返回结果 集。与CHECK约束相比,触发器能强制实现更加复杂的数 据完整性、执行操作或级联操作、实现多行数据间的完 整性约束、维护非正规化的数据等。 触发器是一个特殊的存储过程。在创建触发器时,通过 CREATE TRIGGER语句定义触发器对应的表、执行的事件 和触发器的指令。当发生事件后,会引发触发器执行, 通过执行其指令,保证数据完整性。 数据库并发性的含义 为了充分利用数据库资源,很多时候数据库用户都是 对数据库系统并行存取数据,这样就会发生多个用户 并发存取同一数据块的情况,如果对并发操作不加控 制可能会产生不正确的数据,破坏数据的完整性。 并发控制就是解决这类问题,以保持数据库中数据的 一致性,即在任何一个时刻数据库都将以相同的形式 给用户提供数据。 并发控制 6.3 6.3.1 事务的基本概念 事务是数据库系统中执行的一个工作单位,它是由用 户定义的一组操作序列。 一个事务可以是一组SQL语句、一条SQL语句或整个程 序,一个应用程序可以包括多个事务。 定义事务的语句有三条: BEGIN TRANSACTION COMMIT ROLLBACK 1事务的特性 事务的开始 事务的提交 事务的回滚 (1)原子性。 一个事务是一个不可分割的工作单位,事务在执行时, 应该遵守“要么不做,要么全做”的原则,即不允许完成部 分的事务。即使因为故障而使事务未能完成,它执行的部分 结果也将被取消。 事务的原子性是对事务最基本的要求。 (2)一致性。 事务执行的结果必须是使数据库从一个一致性状态转变 到另一个一致性状态。 2事务的特性 (3)隔离性。 如果多个事务并发地执行,应像各个事务独立地执 行一样,一个事务的执行不能被其他事务干扰,即一个 事务内部的操作及使用的数据对并发的其他事务是隔离 的。 并发控制就是为了保证事务间的隔离性。 (4)持久性。 持久性也称永久性(Permanence),指一个事务一 旦提交,它对数据库中数据的改变就应该是持久的,即 使系统发生故障也不应该对其有任何影响。 持久性的意义在于保证数据库具有可恢复性。 例如 飞机机票订票系统 。假设机票余额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 并发操作引发的问题 两个事务T1和T2读入同一数据,并发执行修改操作时,会出现事务T2 提交的结果破坏了事务T1提交的结果,导致T1的修改结果丢失的问题, 如表6-8所示。 表6-8 丢失修改 执 行 顺 序事务T1数据库中R的值事务T2 t0100 t1从数据库读R=100 t2从数据库读R=100 t3执行R=R1 t4执行R=R1 t5写回R=99 t699写回R=99 1丢失修改 事务T1修改某一数据R,并将修改结果写回到磁盘,事务T2读取了修改后的数 据R,但事务T1由于某种原因撤销了所有的操作,这样被事务T1修改过的数据R又 恢复为原值,这时,事务T2得到的数据与数据库中的数据不一致,是不正确的数 据,这种情况称为读“脏”数据,如表6-9所示。 表6-9 读“脏”数据示例 执 行 顺 序事务T1数据库中R的值事务T2 t0 100 t1从数据库读R=100 t2R=R1 t3写回R=99 t499从数据库读R=99 t5ROLLBACK T6100 2读“脏”数据 事务T1读取了数据R后,事务T2读取并更新了数据R,当事务T1再读取数据 R以进行核对时,得到的读取值不一致,这种情况称为不可重读,如表6-10所示 。 表6-10 不可重复读示例 执 行 顺 序事务T1数据库中R的值事务T2 t0100 t1 从数据库读 R=100 t2 从数据库读 R=100 t3执行R=R1 t4写回R=99 t5从数据库读R=9999 3不可重读 产生“幻影”数据属于不可重读的范畴。事务T1按一定条件从数 据库中读取了某些数据R后,事务T2删除了其中的部分记录,或者在 其中插入了一些记录,当事务T1再次按相同条件读取数据R时,发现 某些记录消失了(删除)或多了(插入)一些记录。这样的数据对事 务T1来说就是“幻影”数据,或称“幽灵”数据。 分析:产生上述4个问题是由于违反了事务ACID中的4项原则,特 别是事务的隔离性原则。为了保证事务并发执行的正确性,必须要有 一定的控制手段保障在事务并发执行中一个事务的执行不受其他事务 的影响,避免造成数据的不一致。 4产生“幻影”数据 封锁的含义 所谓封锁就是当一个事务在对某个数据对象(可以是 数据项、记录、数据集以至整个数据库)进行操作之前, 必须获得相应的锁,以保证数据操作的正确性和一致性。 6.3.3 封锁及封锁协议 封锁类型有两种 排他锁 排它型封锁又称写封锁,简称为X封锁,它采用的原理是禁 止并发操作。 共享锁 共享封锁又称读封锁,简称为S锁,它采用的原理是允许其他 用户对同一数据对象进行查询,但不能对该数据对象进行修改 。 1锁的类型 排他锁与共享锁的控制方式可用图6-17表示。 图6-17 封锁类型的相容矩阵 T2 T1 XS XNNY SNYY YYY 其中,Y=Yes,表示相容的请求;N=No,表示不相容的请求。 在上述封锁类型的相容矩阵中,最左边一列表示事务T1已经获 得的数据对象上的锁的类型,其中横线“”表示没有加锁;最 上面一行表示事务T2对同一数据对象发出的封锁请求。事务T2的 封锁请求能否被满足用矩阵中的Y或N表示,Y表示事务T2的封锁 请求与事务T1已持有的锁相容,封锁请求可以满足;N表示事务T2 的封锁请求与事务T1已持有的锁冲突,请求被拒绝。 上面讲述过的并发操作所带来的丢失修改、读“脏”数据 和不可重读等数据不一致性问题,可以通过三级封锁协议 在不同程度上给予解决 : 一级封锁协议 事务T在修改数据对象之前必须对其加X锁,直到事务结束。 二级封锁协议 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对 其加S锁,读完后释放S锁。 三级封锁协议 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对 其加S锁,读完后并不释放S锁,而直到事务T结束才释放。 2封锁协议 表6-11 使用一级封锁协议防止丢失修改 执 行 顺 序事务T1数据库中R的值事务T2 t0XLOCK R100 t1从数据库读R=100 t2XLOCK R(失败) t3执行R=R1WAIT t4写回R=99WAIT t5UNLOCK X99WAIT t6 XLOCK R(重做成功 ) t7从数据库读R=99 t8执行R=R1 t9写回R=98 t1098UNLOCK X 表6-12 使用二级封锁协议防止读“脏”数据 执 行 顺 序事务T1数据库中R的值事务T2 t0XLOCK R100 t1从数据库读R=100 t2执行R=R1 t3写回 R=9999 t4SLOCK R(失败) t5WAIT t6ROLLBACK100WAIT t7UNLOCK RWAIT t8 SLOCK R(重做成功 ) T9从数据库中读R=100 T10UNLOCK S 执 行 顺 序事务T1数据库中R的值事务T2 t0100 t1SLOCK R t2 从数据库中读 R=100 t3XLOCK R t4WAIT t5读R=100WAIT t6UNLOCK SWAIT t7XLOCK R t8读R=100 t9R=R1 t10写回R=99 t11UNLOCK X 表6-13 使用三级封锁协议防止不可重读 (1)并发调度的可串行化。 串行执行:以事务为单位,多个事务依次顺序执行,前 一个事务对数据库的访问操作执行结束后,再去处理下一个事 务对数据库的访问操作。串行执行能保证事务的正确执行。 并发执行:以事务为单位,按一定的调度策略同时执行 。 并发调度的可串行化:事务的并发执行并不能保证事务 的正确性,因此需要采用一定的技术,使得在并发执行时像串 行执行一样(正确),这种执行称为并发调度的可串行化。 【例6-1】 假设有两个事务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(c)的执行结果为A=5,B=10,所以是可串行化调度 ,但是图6-18(d)的执行结果为A=5,B=15,不等价于任一 个串行调度,所以是一个不可串行化调度,其结果是不正确 的。 为了保证并发操作的正确性,DBMS的并发控制机制必须提 供一定的手段来保证调度是可串行化的。 两段锁(Two-Phase Locking,简称2PL)协议就是保证并 发调度可串行性的封锁协议。 (2)两段锁协议。 所谓两段锁协议是指所有事务必须分两个阶段对数据项进行加 锁和解锁。 第一阶段是申请并获得锁,也称为扩展阶段。 第二阶段是释放所有原申请获得的锁,也称为收缩阶段。 如图6-19所示是遵守两段锁协议的序列。 图6-19 遵守两段锁协议的封锁序列 结论:所有两段锁协议的事务,其并发执行的结果一定是正 确的。 表6-15 活锁实例 时 间事务T1事务T2事务T3事务T4 t0LOCK R t1LOCK R t2WAITLOCK R t3UNLOCK RWAITWAITLOCK R t4WAITLOCK RWAIT t5WAITWAIT t6WAITUNLOCK RWAIT t7WAITLOCK R t8WAIT 解决活锁最有效的方法是采用“先来先服务”的控制策略。 6.3.4 封锁出现的问题和解决方法 1活锁 当某个事务请求对某一数据进行排它性封锁时,由于其他 事务对该数据的操作而使这个事务处于永久等待状态,这种状 态称为活锁。 2死锁 所谓死锁即事务之间对锁的循环等待。也就是说,多个事务申 请不同的锁,申请者均拥有一部分锁,而它又在等待另外事务所拥有 的锁,这样相互等待,从而造成它们都无法继续执行,如表6-16所示 。 表6-16 死锁实例 时 间事务T1事务T2 t0LOC R1 t1LOCK R2 t2 t3LOCK R2 t4WAIT t5WAITLOCK R1 t6WAITWAIT t7WAITWAIT (1) 预防死锁的方法 一次封锁法 一次封锁法是指每个事务一次性地申请它所需要的全部锁,对 一个事务来说,要么获得所需的全部锁,要么一个锁也不占有。这样 ,一个事务不会既等待其他事务,又被其他事务等待,从而不会出现 循环等待。 顺序封锁法 顺序封锁法是指将数据对象按序编号,在申请时,要求按序请 求,这样只有请求低序号数据对象的锁的事务等待占有高序号数据对 象的锁的事务,而不可能出现相反的等待,因而不可能发生循环等待 。 (2)诊断与解除死锁的方法。 超时法 等待图法 封锁粒度指封锁的单位。 根据对数据的不同处理,封锁的对象可以是这样一些逻辑 单元:字段、记录、表、数据库等,封锁的数据对象的大 小叫封锁粒度。 封锁粒度越小,系统中能够被封锁的对象就越多,并发度 越高,但封锁机构复杂,系统开销也就越大。 封锁粒度越大,系统中能够被封锁的对象就越少,并发度 越低,封锁机构越简单,相应系统开销也就越小。 6.3.5 封锁粒度 1SQL Server的空间管理及锁的级别 锁是为防止其他事务访问指定的资源,实现并发控制的主要手段。 要加快事务的处理速度并缩短事务的等待时间,就要使事务锁定的资源 最小。 (1)行和行级锁。 行是可以锁定的最小空间资源。行级锁是指事务操作过程中,锁定 一行或若干行数据。行级锁占用的数据资源最少,并避免了数据被占用 但不使用的现象,因而是最优锁。 (2)页和页级锁。 在SQL Server中,除行外的最小数据单位是页。一个页有8KB,所 有的数据、日志和索引都放在页上。为了管理方便,表中的行数据必须 在同一页上,不允许跨页存放。 页级锁是指在事务的操作过程中,无论事务处理多少数据,每一次 都锁定一页。 6.3.6 SQL Server 2000的并发控制机制 (3)簇和簇级锁。 页之上的空

温馨提示

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

评论

0/150

提交评论