已阅读5页,还剩97页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 数据库安全保护,2,5.1 数据库的安全性 5.2 完整性控制 5.3 并发控制与封锁 5.4 数据库的恢复,3,5.1 数据库的安全性,5.1.1 数据库安全性的含义 数据库的安全性是指保护数据库以防止非法使用所造成的数据泄露、更改或破坏。 安全性问题有许多方面 : (1)法律、社会和伦理方面时问题。 (2)物理控制方面的问题。 (3)政策方面的问题。 (4)运行方面的问题。 (5)硬件控制方面的问题。 (6)操作系统安全性方面的问题。 (7)数据库系统本身的安全性方面的问题。,4,5.1.2 安全性控制的一般方法,安全性控制是指要尽可能地杜绝所有可能的数据库非法访问。,图5-1 安全控制模型,5,安全性控制的一般方法 用户标识和鉴定 用户存取权限控制 定义视图 数据加密 审计(Audit),6,用户标识和鉴定 用户标识和鉴定是由系统提供一定的方式让用户标识自己的名字或身份,系统内部记录着所有合法用户的标识,每次用户要求进入系统时,由系统进行核实,通过鉴定后才提供机器的使用权。 用户标识和鉴定的方法 用一个用户名或用户标识符来标明用户的身份,系统以此来鉴别用户的合法性。 如果正确,就可以进入下一步的核实。 用户标识符是用户公开的标识,它不足以成为鉴别用户身份的凭证。 常采用用户名和与口令相结合的方法。 通过用户名和口令来鉴定用户的方法简单易行,但该方法在使用时,由于用户名和口令的产生和使用比较简单,也容易被窃取,因此还可采用更复杂的方法。例如预先约定好一个过程和函数,系统可提供一个随机数,用户可根据函数计算出结果,系统根据结果来辨别用户身份的合法性。,7,授权表,用户标识,数据对象,操作类型,用户存取权限控制 用户存取权限指的是不同的用户对于不同的数据对象允许执行的操作权限。 在数据库系统中,定义用户存取权限称为授权 。 这些授权定义经过编译后以一张授权表的形式存放在数据字典中。,8,关系系统中的存取权限,9,授权粒度越细,授权子系统就越灵活, 能够提供的安全性就越完善。,对于授权表,一个衡量授权机制的重要指标就是授权粒度,即可以定义的数据对象的范围,在关系数据库中,授权粒度包括关系、记录或属性。,衡量授权机制的另一个重要指标就是授权表中允许的 登记项的范围。有些授权表的授权只涉及到数据名 (关系或属性名),而未提到具体的值,有些授权表 提供了与值有关的授权。如表5.3和表5.4,10,3.定义视图 为不同的用户定义不同的视图,可以限制各个用户的访问范围。通过视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,从而自动对数据提供一定程度的安全保护。,11,数据加密 加密的基本思想是根据一定的算法将原始数据加密成为不可直接识别的格式,数据以密文的形式存储和传输。 加密方法: 替换方法,该方法使用密钥将明文中的每一个字符转换为密文中的字符。 转换方法,该方法将明文中的字符按不同的顺序重新排列。 通常将这两种方法结合起来使用,就可以达到相当高的安全程度。,12,审计 审计功能是一种监视措施,它跟踪记录有关数据的访问活动。 审计追踪把用户对数据库的所有操作自动记录下来,存放在一个特殊文件中,即审计日志中。 记录的内容一般包括:操作类型(如修改、查询等),操作终端标识与操作者标识,操作日期和时间,操作所涉及到的相关数据(如基本表、视图、记录、属性等),数据的前象和后象等。,13,使用审计功能会大大增加系统的开销,所以DBMS通常将其作为可选特征,提供相应的操作语句可灵活打开或关闭审计功能。 例如:可使用SQL语句打开对表S的审计功能,对表S的每次成功的查询、增加、删除和修改操作都作审计追踪。 AUDIT SELECT,INSERT,DELETE,UPDATE ON S WHENEVER SUCCESSFUL 要关闭对表S的审计功能可以使用如下语句; NO AUDIT ALL ON S,14,5.1.3 SQL Server2000的数据安全性机制,为了实现安全性,SQL Server 2000对用户的访问进行两个阶段的检验: 身份验证阶段(Authentication):身份验证机制决定了用户能否连接(或登录)到SQL Server 2000服务器。 权限许可确认阶段(Permission Validation):权限许可机制决定了经过了身份验证后的用户连接到SQL Server 2000服务器可以执行的具体操作,包括服务器上的操作和具体的数据库上的操作。,15,1.Windows身份验证模式 :,允许Windows操作系统用户连接到SQL Server。 当使用Windows身份验证模式时,用户必须首先登录到Windows操作系统中,然后再登录到SQL Server。 一般推荐使用Windows验证模式,因为这种安全模式能够与Windows操作系统的安全系统集成在一起,以提供更多的安全功能。,5.1.4 SQL Server2000的身份验证模式,16,2.混合身份验证模式,混合身份验证模式表示SQL Server允许Windows授权用户和SQL授权用户登录到SQL Server数据库服务器。 如果希望允许非Windows操作系统的用户也能登录到SQL Server数据库服务器上,则应该选择混合身份验证模式。 如果在混合身份验证模式下选择使用SQL授权用户登录SQL Server数据库服务器上,则用户必须提供登录名和密码两部分内容。,17,在SQL SERVER身份认证模式下,帐号和密码保存在master数据库的syslogins数据表中,当客户机使用用户帐号和密码连接数据库服务器时,在该表中查询是否有相同的帐号和密码,若有就接受连接。 设置身份验证模式: 1)打开企业管理器,展开“服务器组”文件夹,在服务器中单击右键,在弹出的快捷菜单中选择“编辑SQL SERVER注册属性”命令,在已注册的SQLSERVER属性对话框中设置验证模式。 注意:修改验证模式后,必须首先停止SQL SERVER服务,然后重启该服务,新的设置才能生效。,18,5.1.5 SQL Server的登录账号和服务器角色,在SQL Server中,账号有两种:一种是登录服务器的登录账号(Login Name),另外一种是使用数据库的用户账号(User Name)。 查看服务器的登录账号 方法1:使用Enterprise Manager 进入Enterprise Manager,展开“SQL Server组”,找到所要连接的SQL Server服务器;展开该服务器对应的文件夹,再展开“安全性”文件夹,单击“登录”选项,即可看到系统创建的默认登录账号及已建立的其他登录账号 。,19,其中: BUILTINAdministrators: 表示所有Windows Adiminstrators组中的用户都可以登录到SQL Server。此组中的成员同时也具有SQL Server的系统管理员权限。 sa:SQL Server身份验证模式的系统管理员账户。 方法2:使用存储过程查看登录账号。 EXEC sp_helplogins,20,创建服务器的登录账号 利用Enterprise Manage 展开“安全性”, 单击“登录”节点。 右击内容窗格中的空白处, 从弹出式菜单中选择 “新建登录”命令。 输入登录账号名称, 单击“SQL SERVER” 身份验证,并输入登录密码。然后 在“默认设置”选项组中,选择对应的 数据库,表示该登录账号默认登录到 该数据库中。,21,创建服务器的登录账号 利用存储过程 EXEC sp_addlogin 登录账号名称, 密码, 默认数据库名, 使用的语言 例5-1 建立了一个名称为Mike的登录账号。 EXEC sp_addlogin Mike, m1934, Teach, NULL 例5-2将MIKE登录账号加入到数据库Teach中。 EXEC sp_adduser Mike 更改登录账号的属性 使用存储过程sp_password可改变登录账号的密码 EXEC sp_password 旧密码, 新密码, 登录账号名称 例5-3将Mike账号的密码由原来的m1934改为mike1934. EXEC sp_password m1934,mike1934,Mike,22,使用存储过程sp_addsrvrolemember可以将登录账号加入服务器的角色中 EXEC sp_addsrvrolemember 登录账号, 服务器角色名称 例5-4将登录账号MIKE加入到dbcreator服务器角色中。 EXEC sp_addsrvrolememberMIKE,dbcreator,23,删除登录账号 使用Enterprise Manager 使用存储过程 EXEC sp_droplogin 登录账号 例5-5从数据库Teach中删除MIKE登录账号。 EXEC sp_droplogin MIKE SQL Server的服务器角色 角色(Role)是对权限集中管理的一种机制,将不同的权限组合在一起就形成了一种角色。 服务器角色是执行服务器级管理操作的用户权限的集合。,24,SQL SERVER服务器角色,25,5.1.6 SQL Server的数据库用户账号和数据库角色,数据库的用户账号 用户账号要在特定的数据库内创建,并关联一个登录账号(当一个数据库的用户创建时,必须关联一个登录账号)。 每个登录账号在一个数据库中只能有一个用户账号,但每个登录账号可以在不同的数据库中各有一个用户账号。 注意: master和tempdb数据库中的guest用户账号不能删除,而其他数据库中的guest用户账号可以删除。 登录账号具有对某个数据库的访问权限,并不表示该登录账号对该数据库具有存取的权限。,26,查看数据库的用户账号 方法1:使用企业管理器,展开SQL SERVER 组或服务器,在“数据库”文件夹中,展开某数据库,单击 “用户”选项,则在右窗格中显示出该数据库的所有 用户。,27,创建数据库的用户账号 方法1:使用企业管理器,单击要建立数据库用户的数据库节点,右击“用户”, 在弹出的菜单上选择“新建数据库用户”命令。,28,查看数据库的用户账号 方法2:利用存储过程 EXEC sp_helpuser 创建数据库的用户账号 方法2:使用存储过程 EXEC sp_adduser 登录账号, 用户账号, 所属的数据库角色 例5-7向当前数据库中以登录名ZHANGSAN创建一个名称为ZHANGSAN的用户账号,并将该用户账号设置为db_owner角色。 EXEC sp_adduserZHANGSAN, ZHANGSAN,db_owner,29,设置数据库用户账号的权限,展开“数据库”节点并展开要设置权限的数据库,单击“用户”节点。 在内容窗格中右击要设置权限的数据库用户,从弹出的菜单中选择“所有任务”下的“管理权限”命令 。,授予权限,拒绝权限,收回权限,30,对数据库对象的操作,具体含义如下 SELECT:对表或者视图进行查询。 INSERT:在表或者视图中插入记录。 UPDATE:对表或者视图中的数据进行修改。 DELETE:删除表或者视图中的数据。 EXEC:执行存储过程。 DRI:可对表的外键加以限制,以完成表的参照完整性。,31,删除数据库用户账号 存储过程 EXEC sp_dropuser 用户账号 数据库角色 数据库角色是对数据库对象操作的权限的集合。 数据库角色可分为三种: 固定的标准数据库角色(系统创建的) 应用程序角色 当我们打算让某些用户只能通过特定的应用程序间接地存取数据库中的数据而不是直接地存取数据库数据时,就应该考虑使用应用程序角色。,32,(3)public数据库角色 Public数据库角色是每个数据库最基本的数据库角色,每个用户可以不属于其他9个固定数据库角色,但至少会属于public数据库角色。当在数据库中添加新用户账号时,会自动将新用户账号加入public数据库角色。,33,34,查看数据库角色的属性: 以Teach数据库中的db_owner角色为例: 1)在企业管理器中,展开SQL SERVER组,在数据库文件夹中,展开Teach数据库文件夹,单击“角色”选项,在右侧窗格中显示出该数据库的所有角色。 2)在右侧窗格中,在 “db_owner”角色上单击右键,在快捷菜单中单击“属性”,则弹出了包括在该角色中的数据库用户账号的对话框。 3)单击“添加”按钮可以为该角色添加一个数据库用户;单击“删除”按钮,可从角色中删除被选中的数据库用户。,35,创建新的数据库角色 使用企业管理器 在企业管理器中,展开SQLSERVER组,在“数据库” 文件夹中,展开某一数据库文件夹,然后在“角色”选项上单击右键,在弹出的快捷菜单中选择“新建数据库角色”,在该对话框中输入角色名,在“数据库角色类型”中选择角色类型为标准角色,单击“添加”按钮可向角色中添加成员。单击“确定”。 使用存储过程创建新角色 EXEC sp_addrole 角色名, 拥有者 例5-9在当前数据库中创建一个名为Myrole的角色 EXEC sp_addrole Myrole,dbo,36,删除数据库角色 sp_droprole 角色名 创建数据库应用程序角色 sp_setapprole 应用程序角色名, 密码 用户和角色的权限问题 用户权限继承角色的权限 数据库角色中可以包含多个用户,当用户属于某一数据库角色时,用户对数据库对象的存取权限也继承该角色的权限。,37,用户分属不同角色 如果用户分属于不同的数据库角色,如用户User1既属于角色1,又属于角色2,则用户的权限基本上是以角色1和角色2的并集为准,但只要有一个拒绝,则用户User1的权限就是拒绝的。,38,5.2 完整性控制,5.2.1 数据库完整性的含义 数据库的完整性是指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。 数据库的完整性和安全性是数据库保护的两个不同的方面。数据库的安全性是指保护数据库以防止非法使用所造成数据的泄露、更改或破坏。安全性措施的防范对象是非法用户和非法操作。数据库的完整性是指防止合法用户使用数据库时向数据库中加入不符合语义的数据。完整性措施的防范对象是不合语义的数据。,39,5.2.2 完整性规则的组成,完整性规则主要由以下三部分构成。 (1)触发条件:规定系统什么时候使用规则来检查数据。 (2)约束条件:规定系统检查用户发出的操作请求违背了什么样的完整性约束条件。 (3)违约响应:规定系统如果发现用户发出的操作请求违背了完整性约束条件,应该采取一定的动作来保证数据的完整性,即违约时要做的事情。 完整性规则从执行时间上可分为立即执行约束(Immediate Constraints)和延迟执行约束(Deferred Constraints)。,40,立即执行约束是指在执行用户事务过程中,某一条语句执行完成后,系统立即对此数据进行完整性约束条件检查。延迟执行约束是指在整个事务执行结束后,再对约束条件进行完整性检查,结果正确后才能提交。 如果发现用户操作违背了立即执行约束,则可以拒绝该操作,以保护数据的完整性。如果发现用户操作违背了延迟执行约束,而又不知道是哪个事务破坏了完整性,则只能拒绝整个事务,把数据库恢复到该事务执行前的状态。,41,一条完整性规则可以用一个五元组(D,O,A,C,P)来形式化地表示 D(Data):代表约束作用的数据对象,可以是关系、元组和列三种对象; O(Operation):代表触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即执行还是延迟执行; A(Assertion):代表数据对象必须满足的语义约束,这是规则的主体; C(Condition):代表选择A作用的数据对象值的谓词; P(Procedure):代表违反完整性规则时触发执行的操作过程。,42,完整性约束条件是完整性控制机制的核心。,例如,对于“学号(SNo)不能为空”的这条完整性约束中,D、O、A、C、P的含义分别如下: D:代表约束作用的数据对象为SNo属性; O:当用户插入或修改数据时需要检查该完整性规则; A:SNo不能为空; C:A可作用于所有记录的SNo属性; P:拒绝执行用户请求。,43,5.2.3 完整性约束条件的分类,从约束条件使用的对象分,值的约束和结构的约束 值的约束即对数据类型、数据格式、取值范围和空值等进行规定。 (1)对数据类型的约束,包括数据的类型、长度、单位和精度等。 (2)对数据格式的约束。 (3)对取值范围的约束。 (4)对空值的约束。 结构的约束即对数据之间联系的约束。 (1)函数依赖约束。 (2)实体完整性约束。 (3)参照完整性约束。 (4)统计约束。,44,从约束对象的状态分,静态约束和动态约束 静态约束 静态约束是指对数据库每一个确定状态所应满足的约束条件,是反映数据库状态合理性的约束,这是最重要的一类完整性约束。上面介绍的值的约束和结构的约束均属于静态约束。 动态约束 动态约束是指数据库从一种状态转变为另一种状态时,新旧值之间所应满足的约束条件,动态约束反映的是数据库状态变迁的约束。 例如,学生年龄在更改时只能增长,职工工资在调整时不得低于其原来的工资。,45,5.2.4 数据完整性的实施,声明式数据完整性 声明式数据完整性是将数据所需符合的条件融入到对象的定义中,这样SQL Server会自动确保数据符合事先制定的条件。 声明式数据完整性的特点是: 通过针对表和字段定义声明的约束,可使声明式数据完整性成为数据定义的一部分。 使用约束、默认值与规则实施声明式数据完整性。,46,程序化数据完整性 如果所需符合的条件以及该条件的实施均通过所编写的程序代码完成,则这种形式的数据完整性称为程序化数据完整性。 程序化数据完整性的特点是: 程序化数据完整性可以通过相关的程序语言及工具在客户端或服务器端实施。 SQL Server可以使用存储过程或触发器实施程序化数据完整性。,47,5.2.5 规则,规则(Rule)就是数据库对存储在表中的列或用户自定义数据类型中的值的规定和限制。 规则与其作用的表或用户自定义数据类型是相互独立的,即表或用户自定义对象的删除、修改不会对与之相连的规则产生影响。 创建规则 1)使用企业管理器创建规则 2)使用存储过程创建规则 CREATE RULE rule_name AS condition_expression 注意:condition_expression子句中的表达式 第一个字符必须是符号。 例5-12 创建学生年龄规则。 CREATE RULE age_rule AS age = 18 and age = 50,48,查看规则 使用企业管理器查看规则 用存储过程sp_helptext查看规则 sp_helptext sp_helptext objname = name Name指明对象的名字。可以是规则、默认、触发器等。 规则的绑定与松绑 创建规则后,规则仅仅是一个存在于数据库中的对象,并未发生作用。需要将规则与数据库表或用户自定义对象联系起来,才能达到创建规则的目的。 所谓绑定就是指定规则作用于哪个表的哪一列或哪个用户自定义数据类型。 解除规则与对象的绑定称为“松绑”。,49,规则对已经输入表中的数据不起作用。,用存储过程sp_bindrule绑定规则 sp_bindrule rulename = rule, objname = object_name , futureonly 例5-14 绑定规则age_rule 到S表的字段Age。 EXEC sp_bindrule age_rule, S.Age 用存储过程sp_unbindrule解除规则的绑定 sp_unbindrule objname = object_name ,futureonly 例5-15 解除已绑定到S表的字段Age的规则age_rule。 EXEC sp_unbindrule S.Age,50,用企业管理器管理规则的绑定,51,在删除一个规则前必须先将与其绑定的对象解除绑定。,删除规则 使用DROP RULE命令删除规则 DROP RULE rule_name ,.n 例5-16 删除age_rule规则。 DROP RULE age_rule,52,5.2.6 默认,默认(Default)是向用户输入记录时没有指定具体数据的列中自动插入的数据。 表的一列或一个用户自定义数据类型只能与一个默认绑定。 创建默认 1)使用企业管理器创建默认 2)使用存储过程创建默认 CREATE DEFAULT default_name AS constant_expression 例5-17 创建出生日期默认birthday_defa。 CREATE DEFAULT birthday_defa AS 1978-1-1,53,查看和修改默认 使用sp_helptext存储过程可以查看默认的信息。 例5-18 查看默认birthday_defa。 EXEC sp_helptext birthday_defa 默认的绑定与松绑 用存储过程sp_bindefault 绑定默认 sp_bindefault defname = default, objname = object_name , futureonly 用存储过程sp_unbindefault 解除默认的绑定 sp_unbindefault objname = object_name ,futureonly,54,例5-19 绑定默认birthday_defa到数据表S的Birthday列上。 EXEC sp_bindefault birthday_defa, S.Birthday 例5-20 解除默认birthday_defa与表S的Birthday列的绑定。 EXEC sp_unbindefault S.Birthday 删除默认 使用DROP DEFAULT命令删除默认 DROP DEFAULT default_name ,.n 例5-21 删除学生生日默认birthday_defa。 DROP DEFAULT birthday_defa,在删除一个默认前必须先将与其绑定的对象解除绑定,55,5.3.1 数据库并发性的含义 为了充分利用数据库资源,很多时候数据库用户都是对数据库系统并行存取数据,这样就会发生多个用户并发存取同一数据块的情况,彼此之间就有可能产生相互干扰的情况。如果对并发操作不加控制可能会产生不正确的数据,破坏数据的完整性。 并发控制就是解决这类问题,以保持数据库中数据的一致性,即在任何一个时刻数据库都将以相同的形式给用户提供数据。,5.3 并发控制与封锁,56,事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列。 一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。 定义事务的语句有三条: BEGIN TRANSACTION COMMIT ROLLBACK,5.3.2 事务(Transaction),事务的开始,事务的提交,事务的回滚,57,事务的特征 原子性(Atomicity) 一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”(Nothing or All)的原则,即不允许完成部分的事务。 一致性(Consistency) 事务对数据库的作用是数据库从一个一致状态转变到另一个一致状态。所谓数据库的一致状态是指数据库中的数据满足完整性约束。 隔离性(Isolation) 如果多个事务并发地执行,应像各个事务独立执行一样,一个事务的执行不能被其他事务干扰。 持久性(Durability) 持久性指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。,58,下面是一个事务的例子,即从账号A转移资金额R到账号B BEGIN TRANSATION READ A AA-R IF A0 /*A余额不足*/ THEN BEGIN DISPLAY “A余额不足” ROLLBACK END ELSE BEGIN B B+R,59,DISPLAY “拨款完成” COMMIT END 该事务有两个出口:当A余额不足时,事务以ROLLBACK(撤销)命令结束,即撤销该事务的影响;另一个出口是以COMMIT(提交)命令结束,完成拨款。在COMMIT之前,即在数据库修改过程中,数据可能是不一致的,事务本身也可能被撤销。只有在COMMIT之后,事务对数据库所产生的变化才对其他事务开放,这就可以避免其他事务访问不一致或不存在的数据。,60,5.3.3 并发操作与数据的不一致性,例5-22 并发取款操作。假设存款余额R=1000元,甲事务T1取走存款100元,乙事务T2取走存款200元,如果正常操作,即甲事务T1执行完毕再执行乙事务T2,存款余额更新后应该是700元。但是如果按照如下顺序操作,则会有不同的结果: (1)甲事务T1读取存款余额R=1000元; (2)乙事务T2读取存款余额R=1000元; (3)甲事务T1取走存款100元,修改存款余额R=R-100=900,把R=900写回到数据库; (4)乙事务T2取走存款200元,修改存款余额R=R-200=800,把R=800写回到数据库; 结果两个事务共取走存款300元,而数据库中的存款却只少了200元。得到这种错误的结果是由甲乙两个事务并发操作引起的。,61,数据库的并发操作导致的数据库不一致性主要有以下三种: 丢失更新(Lost Update) 当两个事务T1和T2读入同一数据,并发执行修改操作时,T2把T1或T1把T2的修改结果覆盖掉,造成了数据的丢失更新问题,导致数据的不一致。,62,丢失更新问题,63,污读(Dirty Read ) 事务T1更新了数据R,事务T2读取了更新后的数据R,事务T1由于某种原因被撤销,修改无效,数据R恢复原值。事务T2得到的数据与数据库的内容不一致,这种情况称为“污读”。,64,污读问题,65,不可重复读(Unrepeatable Read) 事务T1读取了数据R,事务T2读取并更新了数据R,当事务T1再读取数据R以进行核对时,得到的两次读取值不一致,这种情况称为“不可重复读”。,66,不可重复读问题,67,产生上述三类数据不一致性的主要原因是并发操作破坏了事务的隔离性。 并发控制就是要求DBMS提供并发控制功能以正确的方式管理并发事务,避免并发事务之间的相互干扰造成数据的不一致性,保证数据库的完整性。,68,5.3.4 封锁,实现并发控制的方法主要有两种:封锁(Lock)技术和时标(Timestamping)技术。通常会使用封锁技术。 封锁类型(Lock Type) 所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。,69,基本的封锁类型有两种 排它型封锁(Exclusive Lock) 排它型封锁又称写封锁,简称为X封锁,它采用的原理是禁止并发操作。当事务T对某个数据对象R实现X封锁后,其他事务要等T解除了X封锁后,才能对R进行封锁。这就保证了其他事务在T 释放R上的封锁之前,不能再对R进行操作。 共享封锁(Share Lock) 共享封锁又称读封锁,简称为S锁,它采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。 当事务T对某个数据对象R实现S封锁后,其他事务只能对R加S锁,而不能加X锁,直到T释放R上的S锁。这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。,70,锁的相容矩阵,封锁协议(Lock Protocol) 封锁可以保证合理地进行并发控制,保证数据的一致性。 在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。,71,上面讲述过的并发操作所带来的丢失更新、污读和不可重读等数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决 : 一级封锁协议 事务T在修改数据对象之前必须对其加X锁,直到事务结束。 一级封锁协议只有修改数据时才进行加锁,如果只是读取数据则并不加锁,所以它不能防止“污读”和“不可重复读” 。,72,无丢失更新问题,73,二级封锁协议 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。 二级封锁协议在读取数据之后,立即释放S锁,所以它仍然不能防止“重复读”数据。,74,无污读问题,75,三级封锁协议 在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。,76,可重复读问题,77,封锁粒度(Lock Granularity) 封锁粒度指封锁的单位。 根据对数据的不同处理,封锁的对象可以是这样一些逻辑单元:字段、记录、表、数据库等,封锁的数据对象的大小叫封锁粒度。 封锁粒度越小,系统中能够被封锁的对象就越多,并发度越高,但封锁机构复杂,系统开销也就越大。 封锁粒度越大,系统中能够被封锁的对象就越少,并发度越低,封锁机构越简单,相应系统开销也就越小。,78,死锁和活锁 活锁(Livelock) 当某个事务请求对某一数据进行排它性封锁时,由于其他事务对该数据的操作而使这个事务处于永久等待状态,这种状态称为活锁。,79,活锁,80,死锁和活锁 死锁(Deadlock) 在同时处于等待状态的两个或多个事务中,其中的每一个在它能够进行之前,都等待着某个数据,而这个数据已被它们中的某个事务所封锁,这种状态称为死锁。 死锁产生的条件 : 互斥条件:一个数据对象一次只能被一个事务所使用,即对数据的封锁采用排它式。 不可抢占条件:一个数据对象只能被占有它的事务所释放,而不能被别的事务强行抢占。 部分分配条件:一个事务已经封锁分给它的数据对象,但仍然要求封锁其他数据。 循环等待条件:允许等待其他事务释放数据对象,系统处于加锁请求相互等待的状态。,81,死锁,82,数据R,T1,T2,事务依赖图,死锁的预防 一次加锁法: 一每个事物必须将所有要使用的数据对象全部依次加锁,并要求加锁成功,只要一个加锁不成功,表示本次加锁失败,则应该立即释放所有加锁成功的数据对象,然后重新开始加锁。 顺序加锁法: 是预先对所有可加锁的数据对象规定一个加锁顺序,每个事务都需要按此顺序加锁,在释放时,按逆序进行。 死锁的诊断与解除 如果在事务依赖图中沿着箭头方向存在一个循环,那么死锁的条件就形成了,系统就会出现死锁。 选择一个处理死锁代价最小的事务,将其撤销以解除死锁。,83,并发调度的可串行性,多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则我们称这种调度为可串行化的调度。 可串行性是并发事务正确性的准则,按这个准则,一个给定的并发调度,当且仅当它是可串行化的时,才认为是正确的调度。,84,可串行化调度,例:设有两个事务,分别包含下列操作: 事务T1:读B;A=B+1;写回A 事务T2:读A;B=A+1;写回B 设A、B的初值均为4, 按T1 T2顺序执行,结果:A5,B6; 按T2 T1顺序执行,结果:A6,B5。 当并发调度时,如果执行的结果是这两者之一,则都是正确的结果。,85,策略1:串行调度,86,策略2:并行调度,不可串行化,可串行化,87,5.4 数据库的恢复,系统必须具有检测故障并把数据从错误状态中恢复到某一正确状态的功能,这就是数据库的恢复。 数据库恢复的基本原理就是利用存储在系统其他地方的冗余数据来修复。 恢复系统应该提供两种类型的功能: 生成冗余数据 对可能发生的故障作某些准备 冗余重建 利用这些冗余数据恢复数据库,登记日志文件,数据转储,88,登记日志文件 日志文件是用来记录事务对数据库的更新操作的文件。 典型的日志文件主要包含以下内容: (1)更新数据库的事务标识(标明是哪个事务); (2)操作的类型(插入、删除或修改); (3)操作对象; (4)更新前数据的旧值(对于插入操作,没有旧值); (5)更新后数据的新值(对于删除操作,没有新值); (6)事务处理中的各个关键时刻(事务的开始、结束及其真正写回的时间)。 先写原则 : (1)至少要等到相应运行记录的撤销部分已经写入日志文件中以后,才允许该事务向物理数据库中写入记录。 (2)直到事务的所有运行记录的撤销和重做两部分都已写入日志文件中以后,才允许事务完成提交处理。,89,为保证数据库是可恢复的,登记日志文件时要求: 登记的次序严格按并行事务执行的时间次序 必须先写日志文件,后写数据库 写日志文件操作:把表示这个修改的日志记录 写到日志文件 写数据库操作:把对数据的修改写到数据库中,90,登记日志文件的原则(续),为什么要先写日志文件 写数据库和写日志文件是两个不同的操作 在这两个操作之间可能发生故障 如果先写了数据库修改,而在日志文件中没有登记下这个修改,则以后就无法恢复这个修改了 如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性,91,数据转储(Data Dump) 数据转储是指定期地将整个数据库复制到多个存储设备(如磁带、磁盘)上保存起来的过程,它是数据库恢复中采用的基本手段。 按照转储方式转储可以分为海量转储和增量转储。 按照转储状态数据转储又可分为静态转储和动态转储。,92,1海量转储与增量转储,海量转储: 每次转储全部数据库 增量转储: 只转储上次转储后更新过的数据 海量转储与增量转储比较 从恢复
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国珍珠香项目投资可行性研究报告
- 中国机印手机刮条项目投资可行性研究报告
- 八上课外古诗词诵读《龟虽寿》《梁甫行》联读公开课一等奖创新教学设计
- 中国理化仪器项目投资可行性研究报告
- 中国三潢酸项目投资可行性研究报告
- 电脑吹干机行业深度研究报告
- 货架堆放用托盘行业深度研究报告
- 中国蛇毒项目投资可行性研究报告
- 中国聚苯保温板项目投资可行性研究报告
- 中国复方百菌清可湿性粉剂项目投资可行性研究报告
- 第01讲 赏析小说形象(知识清单)(全国通.用)解析版-2026年高考语文一轮复习讲练测
- 2025年疾控三基考试试题及答案
- 2025四川乐山市峨边彝族自治县从基层服务项目人员中考核招聘事业单位人员20人备考参考题库及答案解析
- 峨边彝族自治县2025年从基层服务项目人员中考核招聘事业单位工作人员(20人)考试参考题库及答案解析
- 难点解析-人教版八年级物理上册第5章透镜及其应用-凸透镜成像的规律综合测试试题(含详细解析)
- 配电柜销售专业知识培训课件
- 国开2025年秋《心理学》形成性考核练习1-6答案
- 历史校本课程
- 胶粘剂基础知识培训课件
- 人工智能+智能社会社区治理模式创新研究报告
- 2025年秋季学期国家开放大学《中国近现代史纲要》专题测验1-7答案
评论
0/150
提交评论