数据库保护机制ZNew.ppt_第1页
数据库保护机制ZNew.ppt_第2页
数据库保护机制ZNew.ppt_第3页
数据库保护机制ZNew.ppt_第4页
数据库保护机制ZNew.ppt_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

1 第6章数据库保护机制 完整性控制安全性控制并发控制数据库恢复 本章主要内容 2 第6章数据库保护机制 数据库中存放着大量的有价值的信息 因此采用怎样行之有效的措施保护数据库是非常重要的 比如 保护数据库数据的正确性 有效性 保护数据库安全性 保护数据库既使是出现各种故障 也能对其进行有效地恢复等等 3 6 1数据库的完整性 数据库的完整性指数据的正确性和有效性 数据库的完整性是为了防止数据库中存在不符合语义的数据 防止错误信息的输入和输出 即所谓 垃圾进垃圾出 所造成的无效操作和错误结果 数据库是否具备完整性关系到数据库系统能否真实地反映现实世界 因此维护数据库完整性是非常重要的 4 6 1数据库的完整性 数据库的完整性是由DBMS的完整性控制子系统实现的 其主要功能为 1 完整性检查功能 检查用户发出的操作请求是否违背了完整性约束条件 2 应对操作 如果发现用户操作违背了完整性规则 为保证数据的完整性而采取的动作 如撤销用户操作 5 6 1 1完整性规则 完整性规则是指附加在数据库数据上的语义约束条件 每一条完整性规则包括3个部分 1 触发条件 确定什么操作使用规则进行检查 2 约束条件 确定要检查什么样的错误 3 应对措施 确定如果查出错误该怎么处理 完整性规则作用的对象可以是关系 元组和列 6 6 1 2SQLServer的完整性 本节介绍SQLServer的完整性控制策略 SQLServer数据完整性有四种类型 实体完整性 域完整性 参照完整性 用户定义完整性 7 1 实体完整性构成主键的主属性不能取空值 体现为 UNIQUE唯一性约束 不允许为null PRIMARYKEY约束 不允许为null 例 CREATETABLE选课 学号CHAR 6 PRIMARYKEY 学号 课号 或CREATETABLE学生 学号CHAR 6 UNIQUE 6 1 2SQLServer的完整性 8 2 域完整性属性列 字段 满足的约束条件 体现为 1 对数据类型的约束 包括数据的类型 长度 单位 精度等 2 对数据格式的约束例 规定学号的前两位表示入学年份 中间两位表示系的编号 后四位班级和序号 xxxxxxxx 出生日期 YY MM DD 6 1 2SQLServer的完整性 9 3 对取值范围或取值集合的约束 例如 规定成绩的取值范围为0 100 域级check子句 4 对空值的约束 有的列允许取空值 有的列不允许取空值 5 设置默认值default约束 6 1 2SQLServer的完整性 10 3 参照完整性 外键完整性 两个表之间满足的参照 引用 关系的约束 即 外键表中外键的取值参照主键表中主键的值 体现为 CREATETABLE选课 FOREIGNKEY 学号 REFERENCES学生 学号 ONDELETECASCADE NOACTIONONUPDATECASCADE NOACTION 6 1 2SQLServer的完整性 说明 CASCADE 级联 NOACTION 受限 默认 11 4 用户定义完整性用户定义完整性是针对应用业务需要而定义的完整性约束条件 体现为 1 表定义语句中的CHECK子句 2 触发器 3 规则 下节介绍 6 1 2SQLServer的完整性 12 6 1 3使用规则和触发器实现完整性 一般不是很复杂的完整性约束都是在createtable语句中定义 更复杂的完整性实现要用触发器和规则 定义表时没有定义的约束 可以在以后通过创建触发器和规则来实现 check约束优先于触发器约束和规则约束执行 13 1 使用规则实现完整性规则是独立于表的单独定义 存储的数据库对象 CREATERULE规则名AS约束表达式 规则中可以是能用于WHERE子句中的任何表达式 如 创建规则 6 1 3使用规则和触发器实现完整性 14 Birthday 1980 01 01 AND Birthday GETDATE gradeIN a A B b C c D d codeLIKE a z 0 9 例1创建sno rule规则 使得学号只能是6位数字字符 CREATERULEsno ruleAS snoLIKE 0 9 0 9 0 9 0 9 0 9 0 9 6 1 3使用规则和触发器实现完整性 15 规则的绑定创建好规则后 规则只是存储在数据库中的对象并没有发生作用 只有将规则绑定到相应表的属性列 才能实现完整性约束 用存储过程sp bindrule绑定规则 语法格式 sp bindrule规则名 对象名 例2将规则sno rule绑定到学生表的学号属性列上 sp bindrulesno rule 学生 学号 6 1 3使用规则和触发器实现完整性 16 规则的松绑规则绑定后 可以解除 即松绑 用存储过程sp unbindrule为规则松绑 语法格式 sp unbindrule 对象名 例3解除规则sno rule在学生表的学号属性列上的绑定 sp unbindrule 学生 学号 6 1 3使用规则和触发器实现完整性 17 删除规则DROPRULE规则名1 规则2 注意 在删除规则前 必须先将其从约束对象上解除 6 1 3使用规则和触发器实现完整性 18 2 使用触发器实现完整性前面介绍的一些约束机制 属于被动的约束机制 在检查出对数据库的操作违反约束后 只能做些比较简单的动作 比如拒绝操作 如果我们需要产生比规则更为复杂的限制 希望在某个操作后 系统能自动根据条件转去执行各种操作 甚至执行与原操作无关的操作 那么可以用触发器机制来实现 第5章已经介绍过触发器建立和使用 这里我们再进一步举例说明 6 1 3使用规则和触发器实现完整性 19 6 2安全性控制 6 2 1安全性概述1 数据库安全性的定义数据库安全性是指保护数据库以防止不合法的使用造成的数据泄露 更改或破坏 所有计算机系统都有安全性问题 由于数据库中存放大量有用信息 从而使安全性问题更为突出 系统安全性保护措施是否有效是数据库系统的主要性能指标之一 20 图6 1典型的多用户数据库应用系统环境 数据库系统的安全性依赖于其所在的计算机和网络环境的安全性 见下图 21 6 2 2数据库安全性控制的一般方法 1 用户标识与鉴定用户标识与鉴别是DBMS提供的最外层安全性保护措施 用户只有通过鉴定后才被获得系统最外层的权限 用户标识与鉴定的方法很多 常用的有 1 身份认证 是系统为用户定义的用户名 指用户标识 用户ID 用户账号 2 口令 往往与身份认证一起使用 22 3 随机运算认证 指非固定口令认证 即用户每次的口令都不一样 鉴别时系统提供一个随机数 用户根据预先约定好的计算过程或函数进行计算 得到口令 2 存取控制用户通过身份鉴别并不意味着他可以任意使用数据库 用户究竟能否使用数据 使用哪些数据 如何使用数据等问题需要进一步由存取控制来确定 6 2 2数据库安全性控制的一般方法 23 存取控制又称授权控制 其作用是保证有数据访问资格的用户在授权范围内使用数据 并让未被授权的用户无法接近数据 存取控制机制主要包括两部分 1 定义用户权限 并将用户权限登记到数据字典中 用户权限是指不同用户对于不同数据对象允许执行的操作权限 系统必须提供适当语言定义用户权限 这些定义经过编译后存放在数据字典中 被称为授权规则 6 2 2数据库安全性控制的一般方法 24 2 合法权限检查 每个用户发出存取数据库的操作请求后 DBMS查找数据字典 根据授权规则进行合法权限检查 若用户的操作请求超出了定义的权限 系统将拒绝执行此操作 用户权限定义和合法性检查机制一起组成了DBMS的安全性子系统 6 2 2数据库安全性控制的一般方法 25 3 视图机制视图把用户可以使用的数据定义在视图中 这样用户就不能使用视图定义外的其他数据 从而保证了数据库安全性 6 2 2数据库安全性控制的一般方法 26 4 审计 Audit 审记功能就是把用户对数据库的所有操作自动记录下来放入审记日志中 DBA可以利用审记跟踪的信息 重现导致数据库现有状况的一系列事件 找出非法存取数据的人 时间和内容等 审记通常是很费时间和空间的 所有DBMS往往都将其作为可选功能 允许DBA根据应用对安全性的要求 灵活地打开或关闭审记功能 审记功能一般主要用于安全性要求较高的部门 6 2 2数据库安全性控制的一般方法 27 5 数据加密对于高度机密数据 例如金融财务数据 军事数据等等 除以上安全措施外 还可以采用数据加密技术 数据加密是防止数据库中数据在存储和传输中泄露的有效手段 加密的基本思想是 根据一定的算法将原始数据 明文 变换为不可直接识别的格式 密文 从而使不知道加密方法的人无法获知数据的内容 6 2 2数据库安全性控制的一般方法 28 加密方法分为两类 6 2 2数据库安全性控制的一般方法 加密方法涉及要素 加密密钥 好比密码 解密密钥和算法 加密时 用加密算法根据明文和加密密钥生成密文 解密时 用解密算法对密文和解密密钥进行运算得到明文 29 6 2 3SQLSeerver的安全性控制 SQLServer2000有3个等级的安全验证 30 6 2 3 1SQLServer安全验证 SQLServer安全验证是根据用户登录SQLServer时提供的登录名和密码验证用户是否可以连接SQLServer SQLServer安全身份验证机制提供两种模式 Windows验证模式和混合验证模式 31 1 Windows身份验证模式Windows验证利用Windows操作系统本身验证用户合法性的能力 允许用户通过Windows用户帐户连接到SQLServer 使用这种模式 用户只能使用Windows验证登录 不能使用SQLServer验证登录 6 2 3 1SQLServer安全验证 32 2 混合验证模式使用这种验证模式 用户可以使用Windows验证或者SQLServer验证连接到SQLServer 登录时两者中选择一种 6 2 3 1SQLServer安全验证 33 SQLServer把设定的用户名身份信息 比如登录名和密码 存在Master数据库的表sysxlogins中 SQLServer有一个特殊的内置登录名 sa SystemAdministrator 系统管理员 拥有在SQLServer上的一切权限 BUILTIN Administrator是另一个内置登录名 这是SQLServer为WindowsNT 基于NT的 系统管理员设置的默认登录名 也拥有SQLServer上一切权限 6 2 3 1SQLServer安全验证 34 在SQLServer上管理用户身份信息主要有两种方法 一是在企业管理器中利用图形界面来管理 另一种是利用SQLServer提供的管理用户身份的存储过程 来管理用户 这些存储过程必须在系统数据库Master中使用 当然要有足够的权限 6 2 3 1SQLServer安全验证 35 6 2 3 1SQLServer安全验证 可视化定义新登录用户 36 1 sp addlogin 创建用户身份信息Execsp addlogin s1 111111 教学数据库 创建一条用户身份信息 登录名s1 密码111111 默认数据库 教学数据库 2 sp droplogin 删除用户身份信息Execsp droplogin s1 删除s1用户身份信息 6 2 3 1SQLServer安全验证 37 3 sp grantlogin 将Windows的用户或用户组添加成SQLServer的登录名 Execsp grantlogin zhujing pc u1 将Windows用户u1添加成SQLServer的登录名 zhujing pc为计算机域名 4 sp denylogin 拒绝某Windows用户 或用户组 连接到SQLServer Execsp denylogin u1 拒绝Windows用户u1连接到SQLServer 6 2 3 1SQLServer安全验证 38 5 sp revokelogin 删除某Windows用户在SQLServer上的用户身份信息 Execsp revokelogin zhujing pc u1 删除Windows用户u1在SQLServer上的身份信息 6 2 3 1SQLServer安全验证 39 6 2 3 2数据库安全验证 用户成功连接到SQLServer后 如果想访问某个数据库 他们还必须在数据库中有账号 否则对该数据库的访问就会遭到拒绝 40 6 2 3 2数据库安全验证 数据库账号与登录名区别 登录名作用范围是整个SQLServer 使用一个登录名可以跟服务器上所有数据库进行交互 数据库账号的作用范围只是一个数据库 它是一个或多个登录名在某个数据库上的映射 数据库账号相关信息存储在各个数据库的sysusers表中 41 数据库账号与登录名关系 同一个登录名可以映射到不同数据库上的不同数据库账号 但在一个数据库上 一个登录名只能有一个映射 多个登录名可以映射到同一个数据库账号 默认情况下 新创建的每个数据库只有一个账号dbo 系统管理员登录名sa默认映射到每个数据库的dbo账号 6 2 3 2数据库安全验证 42 guest账号 一般情况下 数据库账号总跟某个 或某些 登录名之间有映射关系 但是guest账号除外 他不跟特定登录名建立映射关系 那些在数据库中没有对应账号的登录名都映射到guest master和tempdb数据库中必须存在guest账号 其他数据库中可以任意添加或删除guest账号 6 2 3 2数据库安全验证 43 当一个登录名请求访问一个数据库时 SQLServer在该数据库的sysusers表中查找该登录名对应的数据库账号 如果查到 则可以访问该数据库 如果没找到 SQLServer则试图将该登录账号映射成guest数据库账号 如果还失败 那么这个登录名就不能访问该数据库 6 2 3 2数据库安全验证 44 管理数据库账号的核心是管理登录名跟数据库账号之间的映射关系 管理数据库账号可用企业管理器的图形界面 也可以通过系统存储过程进行 1 sp grantdbaccess创建数据库账号 并建立登录名到账号的映射 该存储过程只能对当前数据库使用 例 use教学数据库Execsp grantdbaccess s1 u1 6 2 3 2数据库安全验证 45 说明 如果数据库账号u1不存在 则创建该账号 在数据库中把登录名s1映射到账号u1 第二个参数 数据库账号 可省略 省略时表示它跟第一个参数 登录名 相同 6 2 3 2数据库安全验证 46 2 sp revokedbaccess删除数据库账号 该存储过程只能对当前数据库使用 例 Execsp revokedbaccess s1 u1 删除数据库中的账号u1 在删除任何登录名之前 必须先删除各个数据库中该账号映射的账号 以免留下 孤立 账号 没有任何登录名映射到它 每个数据库的dbo账号都不能删除 6 2 3 2数据库安全验证 47 6 2 3 2数据库对象的安全验证 一个用户通过登录名的映射在一个数据库中拥有账号后就可以访问这个数据库了 但是用户在这个数据库上究竟可以做些什么操作 这要由这个数据库上的权限设置来决定 数据库的权限设置在数据库账号之上 只有CREATEDATABASE语句权限例外 它由sa授权登录名 有效作用范围是单个数据库 权限不能跨越数据库 48 数据库的权限分为两类 语句权限和对象权限 1 语句权限语句权限是指创建数据库和数据库对象以及备份数据库的权限 语句权限针对的是SQL语句的执行 而不是数据库中已经存在的某些对象 表6 1列出了SQLServer中语句权限适用的语句 6 2 3 2数据库对象的安全验证 49 表6 1语句权限适用的语句 6 2 3 2数据库对象的安全验证 50 2 对象权限是指操作数据和执行存储过程的权限 表6 2对象权限适用的对象和操作 51 3 权限管理权限管理可以通过企业管理器进行 也可以用T SQL完成 下面我们简单介绍一下如何用T SQL管理权限 权限管理主要有授权 收回权限和拒绝三类 授权是规定某数据库账号可以执行某个操作 用GRANT语句进行授权操作 6 2 3 2数据库对象的安全验证 52 授权语句 GRANTALL PRIVILEGES 权限1 权限2 ON对象名 TO用户账号1 账号2 6 2 3 2数据库对象的安全验证 例1 授予u1账号创建视图的权限 GRANTCREATEVIEWTOu1 53 例2 授予u1账号对学生表具有insert权限 GRANTINSERTON学生TOu1 例3 把查学生表和修改学生学号的权限授予用户u4 GRANTSELECT UPDATE 学号 ON学生TOu4 6 2 3 2数据库对象的安全验证 54 回收权限语句 REVOKE权限1 ON对象名 FROM用户名 例4 回收u1账号创建视图的权限 REVOKECREATEVIEWFROMu1 6 2 3 2数据库对象的安全验证 回收权限 是撤销某数据库账户在某数据对象上的操作权限 55 拒绝语句 DENY权限1 ON对象名 TO用户名 例4 规定u1账号不能创建视图 DENYCREATEVIEWTOu1 6 2 3 2数据库对象的安全验证 拒绝 是显式地规定某数据库账户不能执行某个操作 56 4 角色用户在SQLServer系统内进行任何操作 必须要有相应的权限 因此为不同用户分配合适的权限是数据库管理员例行公事 然后 如果一个数据库用户太多 如有5000人 要为他们一一分配权限工作量就显得太大 而现实中许多用户权限是相同的 或者大部分的权限只是少数几种情形的组合 为此 SQLServer提供了 角色 以方便权限管理 6 2 3 2数据库对象的安全验证 57 实际工作时 权限管理大多通过角色进行 很少直接对用户 数据库账号 分配权限 角色有三种类型 用户定义的角色固定的数据库角色 SQLServer系统定义 固定的服务器角色 SQLServer系统定义 6 2 3 2数据库对象的安全验证 58 表6 3固定的数据库角色 6 2 3 2数据库对象的安全验证 59 表6 3固定的数据库角色 续 固定的服务器角色 如下表6 4 6 2 3 2数据库对象的安全验证 60 表6 4固定的服务器角色 6 2 3 2数据库对象的安全验证 61 一般情况下用户从多个角色获得的权限是叠加的 如果其中一个角色没有被授予某个权限 或者授予后又回收了 而另一个角色被授予了该权限 则该用户仍然拥有该权限 实际工作中 有时也需要排除某角色的某个操作权限 凡成为该角色的用户 都不能拥有该权限 对此可以用 拒绝 权限管理方法 拒绝 具有最高优先权 用户定义的角色 6 2 3 2数据库对象的安全验证 62 如果某个用户同时是几个角色的成员 如果其中一个角色拒绝了某个权限A 则不管其他角色是否授权了A 该用户都没有A权限 例 用户u是角色A B和C的成员 三个角色权限如表6 5所示 则用户u的权限如表6 6 6 2 3 2数据库对象的安全验证 63 表6 5角色A B和C的权限 6 2 3 2数据库对象的安全验证 64 表6 6用户u的权限 6 2 3 2数据库对象的安全验证 65 过了一段时间后 需要对权限调整 调整后三个角色的权限如表6 7所示 则调整后用户U的权限如表6 8 表6 7角色A B和C的权限 6 2 3 2数据库对象的安全验证 66 表6 8调整后用户u的权限 O表示权限被撤销 X表示权限被拒绝 6 2 3 2数据库对象的安全验证 67 6 3并发控制 数据库是一个共享资源 从理论上讲 对数据库中数据进行存取的用户数目可以是任意多 让多个用户程序并行地存取数据库 可以提高数据库系统的利用率 但这样可能出现多个用户程序并发地访问同一数据资源的情况 对此并发不加控制 就会破坏数据的一致性 所以 必须对并发操作加以控制 以正确顺序方式调度并发操作 68 6 3 1事务 1 事务 Transaction 事务是用户定义的一个数据库操作序列 这些操作要么全做要么全不做 是一个不可分割的整体 在RDB中 一个事务可以是一个SQL语句 或一组SQL语句或整个程序 但事务与程序是不同的概念 一个程序中可以包含多个事务 为什么要引入事务的概念呢 让我们来看个例子 69 例如 假设你来到ATM机前进行转帐工作 让机器 把100元从你的活期存款帐户转到定期帐户 你插入信用卡 进行了必要的操作 机器将对银行数据库做两次更新 1 首先从你的活期存款余额取出100元 2 接着将100元转到你的定期存款帐户中 你确信你转帐的钱已经在你的定期存款帐户 若100元从你的活期存款帐户刚刚转出后 突然停电 你的定期帐户中又没得到这笔钱 怎么办 你的钱丢失了 6 3 1事务 70 事务定义 事务可由用户使用事务开始和结束语句显式定义 BEGINTRANSACTION 事务开始 COMMIT ROLLBACK 事务结束 EndTRANSACTION事务结束如果用户没有显式定义事务 则由DBMS按缺省规定自动划分事务 6 3 1事务 71 解释 COMMIT 提交 提交事务的所有操作 即 将事务对数据库所做的所有更新写回到物理数据库中去 事务正常结束 ROLLBACK 回滚 在事务运行过程中发生了某种故障 事务不能继续进行 系统将事务中对数据库的所有已完成的操作撤消 使数据库恢复到该事务执行前的状态 6 3 1事务 72 2 事务的特性 1 原子性 Atomicity 一个事务中对数据库的所有操作 是一个不可分割的整体 要么都做 要么都不做 由DBMS的事务管理子系统来实现原子性 2 一致性 Consistency 一个事务独立执行的结果 将保持数据库的一致性 即事务的执行结果必须是使数据库从一个一致状态变到另一个一致状态 完整性控制子系统保证 6 3 1事务 73 3 隔离性 Isolation 在多个事务并发执行时 一个事务的执行不受其他事务干扰 系统应保证这些事务的并发执行与这些事务先后单独执行时的结果一样 隔离性由DBMS的并发控制子系统保证 6 3 1事务 74 4 持续性 Durability 也称持久性 指一个事务一旦提交 它对数据库中数据的改变就应该是永久的 即使以后发生故障 也应保留这个事务的执行结果 持续性由DBMS的恢复子系统保证 上述四个性质简称事务的ACID性质 保证事务的ACID性质是事务处理的重要任务 6 3 1事务 75 事务的ACID性质可能遭到破坏的因素 1 多个事务并发运行时 不同事务的操作交叉执行相互干扰 2 事务在运行过程中被强行中止 由于故障 6 3 1事务 76 并发事务中各操作执行次序称为 调度 串行调度 如果多个事务依次执行 一个事务执行完后再执行另一个事务 则称为事务的串行调度 并发调度 如果并发事务中各操作交叉执行 则称为并发调度 下面通过例子来说明并发操作带来的数据不一致性问题 6 3 2事务的并发执行 77 例如 分析飞机订票系统 假设有这样一系列操作序列 1 甲售票点 甲事务 读出某航班的机票余额A 设A 16 2 乙售票点 乙事务 读出某航班的机票余额A 也为A 16 3 甲售票点卖出一张机票 修改余额A A 1 所以A为15 把A写回数据库 4 乙售票点卖出一张机票 修改余额A A 1 所以A为15 把A写回数据库 6 3 2事务的并发执行 78 结果 卖出两张票而余额只减少1 出现了数据不一致 这种不一致就是由并发操作造成的 因为在并发操作情况下 对甲 乙两个事务的操作序列的调度是随机的 若按上面的调度序列执行 甲事务的修改就丢失了 仔细分析并发操作 可能会产生以下几种不一致 6 3 2事务的并发执行 79 6 3 2事务的并发执行 80 1 丢失更新 LostUpdate 两个事务T1和T2读入同一数据并修改 T2提交的结果破坏了T1提交的结果 导致T1的修改被丢失 2 不一致分析 Non RepeatableRead 不一致分析 不可重复读 是指事务T1读取数据后 事务T2执行更新操作 使T1无法再现前一次读取结果 具体地讲 不一致分析包括三种情况 6 3 2事务的并发执行 81 事务T1读取某一数据后 事务T2对其做了修改 当事务T1再次读该数据时 得到与前一次不同的值 如上例 事务T1按一定条件从数据库中读取了某些数据记录后 事务T2删除了其中部分记录 当T1再次按相同条件读取数据记录时 发现某些记录神秘消失了 事务T1按一定条件从数据库中读取了某些数据记录后 事务T2插入了一些记录 当T1再次按相同条件读取数据记录时 发现多了一些记录 即所谓的 幽灵行 6 3 2事务的并发执行 82 3 读 脏 数据 DirtyRead 读 脏 数据是指事务T1修改某一记录 并将其写回磁盘 事务T2读取同一数据后 T1由于某种原因被撤消 这时T1已修改的数据恢复原值 T2读取到的数据就与数据库中的数据不一致 则T2读到的数据就为 脏 数据 产生上面三种数据不一致的主要原因是并发操作破坏了事务的隔离性 6 3 2事务的并发执行 83 并发控制就是要用正确的方式调度并发操作 使一个用户事务的执行不受其他事务的干扰 从而避免造成数据的不一致性 并发控制的主要技术就是封锁 6 3 2事务的并发执行 84 1 封锁 locking 封锁 就是事务T对某个数据对象操作之前 先向系统申请对其加锁 加锁后事务T就对该数据有了一定的控制权 在事务T释放它的锁之前 其他事务不能更新此数据对象 一 基本封锁有两种 6 3 3数据库的并发控制 85 1 排它锁 EXclusivelock简称X锁 又称写锁 若事务T对数据对象A加上X锁 则只允许T读取和修改A 其他任何事务都不能再对A加任何类型的锁 直到T释放A上的锁 这就保证了其他事务不能再读取和修改A直到事务T释放其上的X锁 6 3 3数据库的并发控制 86 2 共享锁 Sharedlock 简称S锁 又称读锁 若事务T对数据对象A加上S锁 则事务T可以读A但不能修改A 其他事务只能再对A加S锁 而不能加X锁 直到T释放A上的S锁 这就保证了其他事务可以读A 但在T释放A上的S锁之前不能对A做任何修改 排它锁和共享锁的控制方式可以用相容矩阵来表示 6 3 3数据库的并发控制 87 表8 1相容矩阵 一般对并发操作来说 要对某一数据进行操作时 必先对其进行加锁 N 不相容 Y 相容 表示没有加锁或对同一数据无存取要求 6 3 3数据库的并发控制 88 封锁粒度 加锁的数据对象大到关系 数据库 也可以小到记录和属性列 我们称封锁数据对象的大小为封锁粒度 封锁粒度大系统开销小 但降低了系统并发度 封锁粒度小 系统并发度高 但开销也高 所以选择合适的封锁粒度是十分重要的 它影响到系统性能 6 3 3数据库的并发控制 89 2 死锁封锁方法可能引起活锁和死锁 1 活锁如果事务T1封锁了数据R 事务T2又请求封锁R 于是T2等待 T3也请求封锁R 当T1释放了R上的封锁之后系统首先批准了T3的请求 T2仍然等待 然后T4又请求封锁R 当T3释放R上的封锁之后系统又批准了T4的请求 T2有可能永远等待 这就是活锁的情形 如下图所示 6 3 3数据库的并发控制 90 6 3 3数据库的并发控制 91 避免活锁的方法 采用先来先服务的策略 当多个事务请求封锁同一数据对象时 封锁子系统按请求封锁的先后次序对事务排队 数据对象上的锁一旦释放就批准申请队列中第一的事务获得锁 6 3 3数据库的并发控制 92 2 死锁如果事务T1封锁了数据R1 T2封锁了数据R2 然后T1又请求封锁数据R2 T1等待T2释放R2上的锁 T2又请求封锁R1 T2不得不等待T1释放R1上的锁 这样就出现了相互等待对方释放锁才能继续执行下去的情形 这种现象就叫死锁 如下图所示 6 3 3数据库的并发控制 93 6 3 3数据库的并发控制 94 解决死锁问题主要有两类方法 1 死锁预防 采用一定措施来预防死锁发生 通常有两种方法 1 一次封锁法 要求每个事务必须一次将所有要使用的数据全部加锁 否则就不能执行 一次封锁可以有效地防止死锁的发生 但扩大了封锁范围 降低了系统的并发度 6 3 3数据库的并发控制 95 2 顺序封锁法 是预先对数据对象规定一个顺序 所有事务都按照这个顺序实行封锁 顺序封锁法可以有效地防止死锁 但维持数据对象的封锁顺序非常困难 系统消耗大 实现复杂 数据库系统中一般采用死锁诊断与解除的方法 6 3 3数据库的并发控制 96 2 死锁诊断与解除 允许死锁发生 采用一定的手段定期诊断系统中有无死锁 若有就解除它 死锁的诊断一般用超时法和等待图法 1 超时法 如果一个事务的等待时间超过了规定的时限 就认为发生了死锁 6 3 3数据库的并发控制 97 2 等待图法等待图是一个有向图G T U T为结点的集合 每个结点表示正在运行的事务 U为边的集合 每条边表示事务等待情况 若T1等待T2 则T1和T2之间划一条有向边 从T1指向T2 事务等待图动态地反映了所有事务的等待情况 6 3 3数据库的并发控制 98 并发控制子系统周期性地检测事务等待图 如果发现图中有回路 则表示系统中出现死锁 一旦检测到系统存在死锁 就要设法解除 解除死锁方法 选择一个处理死锁代价最小的事务 将其撤消 释放其所持有的所有锁 使其他事务得以继续运行下去 对撤消的事务所执行的数据修改操作必须加以恢复 6 3 3数据库的并发控制 99 6 3 3数据库的并发控制 3 并发调度的可串行化 计算机系统对并发事务中的并发操作的调度是随机的 人们发现 不同的调度会产生不同的结果 哪个结果正确 哪个结果不正确呢 100 如果一个事

温馨提示

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

评论

0/150

提交评论