数据库系统原理教程(第五章)清华大学.ppt_第1页
数据库系统原理教程(第五章)清华大学.ppt_第2页
数据库系统原理教程(第五章)清华大学.ppt_第3页
数据库系统原理教程(第五章)清华大学.ppt_第4页
数据库系统原理教程(第五章)清华大学.ppt_第5页
已阅读5页,还剩331页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 数据库安全,5.1 安全性 5.2 完整性 5.3 并发控制 5.4 恢复 5.5 数据库复制与数据库镜像,第5章 数据库安全,5.1 安全性 5.2 完整性 5.3 并发控制 5.4 恢复 5.5 数据库复制与数据库镜像,5.1 安全性,问题的提出 数据库的一大特点是数据可以共享 但数据共享必然带来数据库的安全性问题 数据库系统中的数据共享不能是无条件的共享 例:军事秘密、 国家机密、 新产品实验数据、 市场需求分析、市场营销策略、销售计划、 客户档案、 医疗档案、 银行储蓄数据,安全性(续),数据库中数据的共享是在DBMS统一的严格的控制之下的共享,即只允许有合法使用权限的用户访问

2、允许他存取的数据 数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一,安全性(续),什么是数据库的安全性 数据库的安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。 什么是数据的保密 数据保密是指用户合法地访问到机密数据后能否对这些数据保密。 通过制订法律道德准则和政策法规来保证。,5.1 安全性,5.1.1 安全性控制的一般方法 5.1.2 Oracle数据库的安全性措施,5.1 安全性,5.1.1 安全性控制的一般方法 5.1.2 Oracle数据库的安全性措施,5.1.1 安全性控制的一般方法,非法使用数据库的情况 用户编写一段合法的程序绕过DBMS及其

3、授权机制,通过操作系统直接存取、修改或备份数据库中的数据; 直接或编写应用程序执行非授权操作;,数据库安全性控制概述(续),通过多次合法查询数据库从中推导出一些保密数据 例:某数据库应用系统禁止查询单个人的工资,但允许查任意一组人的平均工资。用户甲想了解张三的工资,于是他: 首先查询包括张三在内的一组人的平均工资 然后查用自己替换张三后这组人的平均工资 从而推导出张三的工资 破坏安全性的行为可能是无意的,故意的,恶意的。,数据库安全性控制概述(续),方法:,用户标识 和鉴定,存取控制 审计 视图,操作系统 安全保护,密码存储,计算机系统中的安全模型,数据库安全性控制概述(续),数据库安全性控制

4、的常用方法 用户标识和鉴定 存取控制 视图 审计 密码存储,1. 用户标识与鉴定,用户标识与鉴别(Identification 这样就可以省略十几条GRANT语句。,2.数据库对象的权限,ORACLE可以授权的数据库对象 基本表 视图 序列 同义词 存储过程 函数,数据库对象的权限(续),基本表的安全性级别 表级 行级 列级,数据库对象的权限(续),表级安全性 表的创建者或DBA可以把对表的权限授予其他用户,数据库对象的权限(续),表级权限 ALTER: 修改表定义 DELETE:删除表记录 INDEX: 在表上建索引 INSERT: 向表中插入数据记录 SELECT:查找表中记录 UPDAT

5、E:修改表中的数据 ALL: 上述所有权限,数据库对象的权限(续),表级授权使用GRANTREVOKE语句 例: GRANT SELECT ON SC TO U12;,数据库对象的权限(续),行级安全性 ORACLE行级安全性由视图间接实现,数据库对象的权限(续),例:用户U1只允许用户U12查看自己创建的Student表中有关信息系学生的信息,则首先创建视图信息系学生视图S_IS: CREATE VIEW S_IS AS SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student WHERE Sdept=IS; 然后将关于该视图的SELECT权限授予U12用户

6、: GRANT SELECT ON S_IS TO U12;,数据库对象的权限(续),列级安全性 实现方法 由视图间接实现 直接在基本表上定义,数据库对象的权限(续),列级安全性(续) 借助视图实现列级安全性 CREATE VIEW S_V AS SELECT Sno,Sname FROM Student; GRANT SELECT ON S_V TO U12;,数据库对象的权限(续),列级安全性(续) 直接在基本表上定义列级安全性 例:GRANT UPDATE(Sno,Cno) ON SC TO U12;,数据库对象的权限(续),三级对象的层次结构 表、行、列三级对象自上而下构成一个层次结构

7、 上一级对象的权限制约下一级对象的权限 例:当一个用户拥有了对某个表的UPDATE权 限,即相当于在表的所有列了都拥有了 UPDATE 权限。,数据库对象的权限(续),ORACLE对数据库对象的权限采用分散控制方式 允许具有WITH GRANT OPTION的用户把相应权限或其子集传递授予其他用户 ORACLE不允许循环授权,即授权者不能把权限再授予其授权者或祖先 U1 U2 U3 U4 ,ORACLE的授权与检查机制(续),ORACLE的权限检查机制 ORACLE把所有权限信息记录在数据字典中 当用户进行数据库操作时,ORACLE首先根据数据字典中的权限信息,检查操作的合法性。 在ORACL

8、E中,安全性检查是任何数据库操作的第一步。,三、ORACLE的审计技术,审计分类 审计分类 用户级审计 系统级审计,三、ORACLE的审计技术,审计分类(续) 用户级审计 设置者 任何ORACLE用户 审计对象 用户针对自己创建的数据库表或视图进行审计 审计内容 所有用户对这些表或视图的一切成功和或不成功的访问要求 所有用户对这些表或视图的各类SQL操作,ORACLE的审计技术(续),审计分类(续) 系统级审计 设置者 DBA 审计对象和内容 成功或失败的登录要求 GRANT和REVOKE操作 其他数据库级权限下的操作,ORACLE的审计技术(续),审计设置 可以自由设置 是否使用审计 对哪些

9、表进行审计 对哪些操作进行审计,ORACLE的审计技术(续),审计设置(续) 设置方法 AUDIT:设置审计功能 例: AUDIT ALTER,UPDATE ON SC; NOAUDIT:取消审计功能 例: NOAUDIT ALL ON SC;,ORACLE的审计技术(续),与审计功能有关的数据字典表 SYS.TABLES:审计设置 SYS.AUDIT_TRAIL:审计内容,四、用户定义的安全性措施,用数据库级触发器定义用户级安全性 例:规定只能在工作时间内更新Student表 可以定义如下触发器:,用户定义的安全性措施(续),CREATE OR REPLACE TRIGGER secure_

10、student BEFORE INSERT OR UPDATE OR DELETE ON Student BEGIN IF (TO_CHAR(sysdate,DY) IN (SAT,SUN) OR (TO_NUMBER(sysdate,HH24) NOT BETWEEN 8 AND 17) THEN RAISE_APPLICATION_ERROR(-20506, You may only change data during normal business hours.) END IF; END;,用户定义的安全性措施(续),触发器一经定义后,将存放在数据字典中 用户每次对Student表执行

11、INSERT、UPDATE或DELETE操作时都会自动触发该触发器,由系统检查当时的系统时间,如果是周六或周日,或者不是8点至17点,系统会拒绝执行用户的更新操作,并提示出错信息。,用户定义的安全性措施(续),利用触发器进一步细化审计规则,使审计操作的粒度更细,第5章 数据库安全,5.1 安全性 5.2 完整性 5.3 并发控制 5.4 恢复 5.5 数据库复制与数据库镜像,5.2 完整性,什么是数据库的完整性 数据库的完整性是指数据的正确性和相容性,防止不合语义的数据进入数据库。 例: 学生的年龄必须是整数,取值范围为14-29; 学生的性别只能是男或女; 学生的学号一定是唯一的; 学生所在

12、的系必须是学校开设的系; 数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。,完整性(续),完整性控制机制 1.完整性约束条件定义机制 2.完整性检查机制 3.违约反应,完整性(续),完整性控制机制(续) 1.完整性约束条件定义机制 完整性约束条件是数据模型的一个重要组成部分,它约束了数据库中数据的语义。 DBMS应提供手段让用户根据现实世界的语义定义数据库的完整性约束条件,并把它们作为模式的一部分存入数据库中。,完整性(续),完整性控制机制(续) 2.完整性检查机制 检查用户发出的操作请求是否违背了完整性约束条件。,完整性(续),完整性控制机制(

13、续) 3.违约反应 如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。,5.2 完整性,5.2.1 完整性约束条件 5.2.2 完整性控制 5.2.3 Oracle的完整性,5.2 完整性,5.2.1 完整性约束条件 5.2.2 完整性控制 5.2.3 Oracle的完整性,5.2.1 完整性约束条件,整个完整性控制都是围绕完整性约束条件进行的,从这个角度说,完整性约束条件是完整性控制机制的核心。,完整性约束条件(续),完整性约束条件作用的对象 对象 列 对属性的取值类型、范围、精度等的约束条件 元组 对元组中各个属性列间的联系的约束 关系 对若干元组间、关

14、系集合上以及关系之间的联系的约束,完整性约束条件(续),完整性约束条件作用的对象(续) 对象的状态 静态 对静态对象的约束是反映数据库状态合理性的约束 这是最重要的一类完整性约束 动态 对动态对象的约束是反映数据库状态变迁的约束,完整性约束条件(续),完整性约束条件分类 六类完整性约束条件 静态列级约束 静态元组约束 静态关系约束 动态列级约束 动态元组约束 动态关系约束,完整性约束条件(续),对象状态 动态列级约束 动态元组约束 动态关系约束 动态 静态列级约束 静态元组约束 静态关系约束 静态 列 元组 关系 对象粒度,完整性约束条件(续),1. 静态列级约束 静态列级约束是对一个列的取值

15、域的说明,这是最常见最简单同时也最容易实现的一类完整性约束,完整性约束条件(续),五类静态列级约束 1) 对数据类型的约束,包括数据的类型、长度、单位、精度等 例:规定学生姓名的数据类型应为字符型,长度为8。 2) 对数据格式的约束 例:规定学号的格式为前两位表示入学年份,后四位为顺序编号。出生日期的格式为YY.MM.DD。,完整性约束条件(续),3) 对取值范围或取值集合的约束 例:规定成绩的取值范围为0-100,年龄的取值范围为14-29,性别的取值集合为男,女。 4) 对空值的约束 空值表示未定义或未知的值,它与零值和空格不同。有的列允许空值,有的则不允许。例如规定成绩可以为空值。 5)

16、 其他约束 例:关于列的排序说明,组合列等。,完整性约束条件(续),2. 静态元组约束 静态元组约束就是规定组成一个元组的各个列之间的约束关系。 例:订货关系中包含发货量、订货量等列, 发货量不得超过订货量 教师关系中包含职称、工资等列, 教授的工资不得低于700元 静态元组约束只局限在单个元组上,完整性约束条件(续),3. 静态关系约束 在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束 常见静态关系约束 1) 实体完整性约束 2) 参照完整性约束 3) 函数依赖约束 4) 统计约束,完整性约束条件(续),函数依赖约束 大部分函数依赖约束都是隐含在关系模式结构中的,特别是规范化程

17、度较高的关系模式(例如3NF或BCNF),都由模式来保持函数依赖。 但是在实际应用中,为了不使信息过于分离,常常不过分地追求规范化。,完整性约束条件(续),函数依赖约束(续) 这样在关系的字段间就可以存在一些函数依赖需要显式地表示出来。 例:在学生课程教师关系SJT(S,J,T)中存在如下的函数依赖(S,J)T, TJ),将(S,J)作为主码,还需要显式地表示TJ这个函数依赖。,完整性约束条件(续),统计约束 定义某个字段值与一个关系多个元组的统计值之间的约束关系 例:规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。本部门职工的平均工资值是一个统计计算值。

18、,完整性约束条件(续),4. 动态列级约束 动态列级约束是修改列定义或列值时应满足的约束条件,完整性约束条件(续),常见动态列级约束 1) 修改列定义时的约束 例:规定将原来允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。 2) 修改列值时的约束 修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。 例:职工工资调整不得低于其原来工资,学生年龄只能增长,完整性约束条件(续),5. 动态元组约束 动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。 例: 职工工资调整不得低于其原来工资+工龄*1.5,完整性约束条件(续),6.

19、动态关系约束 动态关系约束是加在关系变化前后状态上的限制条件 例:事务一致性、原子性等约束条件,完整性约束条件(续),完整性约束条件小结,5.2 完整性,5.2.1 完整性约束条件 5.2.2 完整性控制 5.2.3 Oracle的完整性,5.2.2 完整性控制,一、DBMS的完整性控制机制 二、关系系统三类完整性的实现 三、参照完整性的实现,一、DBMS的完整性控制机制,DBMS的完整性控制机制的主要功能 1. 定义功能 2. 检查功能 3. 违约反应,DBMS的完整性控制机制(续),1. 定义功能 一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。,DBMS的完整性控制机制(续)

20、,2. 检查功能 立即执行的约束(Immediate constraints) 检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查,我们称这类约束为立即执行的约束 延迟执行的约束(Deferred constrainsts) 在某些情况下,完整性检查需要延迟到整个事务执行结束后再进行,我们称这类约束为延迟执行的约束,DBMS的完整性控制机制(续),例:银行数据库中“借贷总金额应平衡”的约束 就应该是延迟执行的约束 从账号A转一笔钱到账号B为一个事务,从账号A转出去钱后账就不平了,必须等转入账号B后账才能重新平衡,这时才能进行完整性检查。,DBMS的完整性控制机制(续),3. 违约反应

21、 拒绝该操作 其他处理方法,DBMS的完整性控制机制(续),完整性规则的形式化表述 一条完整性规则可以用一个五元组表示: (D,O,A,C,P) D(Data) 约束作用的数据对象; O(Operation) 触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查; A(Assertion) 数据对象必须满足的断言或语义约束,这是规则的主体; C(Condition) 选择A作用的数据对象值的谓词; P(Procedure) 违反完整性规则时触发的过程。,DBMS的完整性控制机制(续),例1:在“学号不能为空”的约束中 D 约束作用的对象为Sno属性

22、 O 插入或修改Student 元组时 A Sno不能为空 C 无(A可作用于所有记录的Sno属性) P 拒绝执行该操作,DBMS的完整性控制机制(续),例2:在“教授工资不得低于1000元”的约束中 D 约束作用的对象为工资Sal属性 O 插入或修改职工元组时 A Sal不能小于1000 C 职称=教授(A仅作用于职称=教授的记录) P 拒绝执行该操作,二、关系系统三类完整性的实现,目前许多关系数据库系统都提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能。 对于违反实体完整性规则和用户定义的完整性规则的操作一般都是采用拒绝执行的方式进行处理。 而对于违反参照完整性的操作,并不都

23、是简单地拒绝执行,有时还需要采取另一种方法,即接受这个操作,同时执行一些附加的操作,以保证数据库的状态仍然是正确的。,三、参照完整性的实现,例:职工部门数据库包含职工表EMP和部门表DEPT DEPT关系的主码为部门号Deptno EMP关系的主码为职工号Empno, 外码为部门号Deptno 该Deptno与DEPT关系中Deptno相对应 称DEPT为被参照关系或目标关系,EMP为参照关系 RDBMS实现参照完整性时需要考虑以下4方面:,参照完整性的实现(续),1. 外码是否可以接受空值的问题 外码是否能够取空值是依赖于应用环境的语义的。 在实现参照完整性时,系统除了应该提供定义外码的机制

24、,还应提供定义外码列是否允许空值的机制。,参照完整性的实现(续),例1:在职工部门数据库中,EMP关系包含有外码Deptno,某一元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作。这和应用环境的语义是相符的,因此EMP的Deptno列应允许空值。,参照完整性的实现(续),例2:在学生选课数据库中, Student关系为被参照关系,其主码为Sno。 SC为参照关系,外码为Sno。 若SC的Sno为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中。这与学校的应用环境是不相符的,因此SC的Sno列不能取空值。,参照完整性的实现(续),2

25、. 删除被参照关系的元组时的问题 出现违约操作的情形 需要删除被参照关系的某个元组,而参照关系有若干元组的外码值与被删除的被参照关系的主码值相对应,参照完整性的实现(续),2. 在被参照关系中删除元组时的问题(续) 违约反应:可有三种策略 级联删除(CASCADES) 受限删除(RESTRICTED) 置空值删除(NULLIFIES) 这三种处理方法,哪一种是正确的,要依应用环境的语义来定。,参照完整性的实现(续),级联删除 将参照关系中所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除。 受限删除 只有当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统

26、才执行删除操作,否则拒绝此删除操作。,参照完整性的实现(续),置空值删除 删除被参照关系的元组,并将参照关系中所有与被参照关系中被删除元组主码值相等的外码值置为空值。,参照完整性的实现(续),例:要删除Student关系中Sno=950001的元组, 而SC关系中有4个元组的Sno都等于950001。 级联删除:将SC关系中所有4个Sno=950001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。 受限删除:系统将拒绝执行此删除操作。,参照完整性的实现(续),置空值删除:将SC关系中所有Sno=950001的元组的Sno值置为空值。 在学生选课数据库

27、中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。,参照完整性的实现(续),3. 修改被参照关系中主码的问题 两种策略 (1)不允许修改主码 (2)允许修改主码,参照完整性的实现(续),允许修改主码策略 违约操作 要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值 要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值,参照完整性的实现(续),允许修改主码策略(续) 违约反应(1) 修改的关系是被参照关系:与删除类似 级联修改 受限修改 置空值修改,参照完整性的实现(续),级联修改 修改

28、被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。 受限修改 拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。 置空值修改 修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。,参照完整性的实现(续),例:学生950001休学一年后复学,这时需要将Student关系中Sno=950001的元组中Sno值改为960123。而SC关系中有4个元组的Sno=950001 级联修改:将SC关系中4个Sno=950001元组中的Sno值也改为960123。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会

29、继续级联下去。,参照完整性的实现(续),受限修改:只有SC中没有任何元组的Sno=950001时,才能修改Student表中Sno=950001的元组的Sno值改为960123。 置空值修改:将Student表中Sno=950001的元组的Sno值改为960123。而将S表中所有Sno=950001的元组的Sno值置为空值。 在学生选课数据库中只有第一种方法是正确的。,参照完整性的实现(续),允许修改主码策略(续) 违约反应(2) 修改的关系是参照关系:与插入类似 受限修改 递归修改,参照完整性的实现(续),结论 RDBMS在实现参照完整性时,除了需要向用户提供定义主码、外码的机制外,还需要向

30、用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法。,5.2 完整性,5.2.1 完整性约束条件 5.2.2 完整性控制 5.2.3 Oracle的完整性,5.2.3 Oracle的完整性,一、Oracle中的实体完整性 二、Oracle中的参照完整性 三、Oracle中用户定义的完整性,一、ORACLE中的实体完整性,ORACLE在CREATE TABLE语句中提供了PRIMARY KEY子句,供用户在建表时指定关系的主码列。 在列级使用PRIMARY KEY子句 在表级使用PRIMARY KEY子句,ORACLE中的实体完整性(续),例1:在学生选课数据库中,要定义Student

31、表的Sno属性为主码 CREATE TABLE Student (Sno NUMBER(8), Sname VARCHAR(20), Sage NUMBER(20), CONSTRAINT PK_SNO PRIMARY KEY (Sno); 或: CREATE TABLE Student (Sno NUMBER(8) PRIMARY KEY , Sname VARCHAR(20), Sage NUMBER(20);,ORACLE中的实体完整性(续),例2:要在SC表中定义(Sno, Cno)为主码 CREATE TABLE SC (Sno NUMBER(8), Cno NUMBER(2), G

32、rade NUMBER(2), CONSTRAINT PK_SC PRIMARY KEY (Sno, Cno);,ORACLE中的实体完整性(续),在用PRIMARY KEY语句定义了关系的主码后,每当用户程序对主码列进行更新操作时,系统自动进行完整性检查 违约操作 使主属性值为空值的操作 使主码值在表中不唯一的操作 违约反应 系统拒绝此操作,从而保证了实体完整性,二、ORACLE中的参照完整性,ORACLE的CREATE TABLE语句允许用户定义参照完整性 用FOREIGN KEY子句定义哪些列为外码列 用REFERENCES子句指明这些外码相应于哪个表的主码 用ON DELETE CAS

33、CADE短语指明在删除被参照关系的元组时,同时删除参照关系中外码值等于被删除的被参照关系的元组中主码值的元组,ORACLE中的参照完整性(续),例1:建立表EMP表 CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2), CONSTRAINT FK_DEPTNO FOREIGN KEY (Deptno) REFERENCES DEPT(Deptno) ON DELETE CASCADE);,ORACLE中的参照

34、完整性(续),或: CREATE TABLE EMP (Empno NUMBER(4), Ename VARCHAR(10), Job VERCHAR2(9), Mgr NUMBER(4), Sal NUMBER(7,2), Deptno NUMBER(2) CONSTRAINT FK_DEPTNO FOREIGN KEY REFERENCES DEPT(Deptno) ON DELETE CASCADE);,ORACLE中的参照完整性(续),这时EMP表中外码为Deptno,它相应于DEPT表中的主码Deptno。 当要修改DEPT表中的DEPTNO值时,先要检查EMP表中有无元组的Dept

35、no值与之对应 若没有,系统接受这个修改操作 否则,系统拒绝此操作,ORACLE中的参照完整性(续),当要删除DEPT表中某个元组时,系统要检查EMP表,若找到相应元组即将其随之删除。 当要插入EMP表中某个元组时,系统要检查DEPT表,先要检查DEPT表中有无元组的Deptno值与之对应 若没有,系统拒绝此插入操作 否则,系统接受此操作,三、ORACLE中的用户定义的完整性,ORACLE中定义用户完整性的两类方法 用CREATE TABLE语句在建表时定义用户完整性约束 通过触发器来定义用户的完整性规则,ORACLE中的用户定义的完整性(续),1. 用CREATE TABLE语句在建表时定义

36、用户完整性约束 可定义三类完整性约束 列值非空(NOT NULL短语) 列值唯一(UNIQUE短语) 检查列值是否满足一个布尔表达式(CHECK短语),ORACLE中的用户定义的完整性(续),例1:建立部门表DEPT,要求部门名称Dname列 取值唯一,部门编号Deptno列为主码 CREATE TABLE DEPT (Deptno NUMBER, Dname VARCHAR(9) CONSTRAINT U1 UNIQUE, Loc VARCHAR(10), CONSTRAINT PK_DEPT PRIMARY KEY (Deptno); 其中 CONSTRAINT U1 UNIQUE 表示约

37、束名为U1, 该约束要求Dname列值唯一。,ORACLE中的用户定义的完整性(续),例2: 建立学生登记表Student,要求学号在 900000至999999之间,年龄29,性别 只能是男或女,姓名非空 CREATE TABLE Student (Sno NUMBER(5) CONSTRAINT C1 CHECK (Sno BETWEEN 10000 AND 99999), Sname VARCHAR(20) CONSTRAINT C2 NOT NULL, Sage NUMBER(3) CONSTRAINT C3 CHECK (Sage 29), Ssex VARCHAR(2) CONST

38、RAINT C4 CHECK (Ssex IN (男, 女);,ORACLE中的用户定义的完整性(续),例3 :建立职工表EMP,要求每个职工的应发工资不得超过3000元。 应发工资实际上就是实发工资列Sal与扣除项Deduct之和。 CREATE TABLE EMP (Eno NUMBER(4) Ename VARCHAR(10), Job VARCHAR(8), Sal NUMBER(7,2), Deduct NUMBER(7,2) Deptno NUMBER(2), CONSTRAINTS C1 CHECK (Sal + Deduct =3000);,ORACLE中的用户定义的完整性(续

39、),2. 通过触发器来定义用户的完整性规则 定义其它的完整性约束时,需要用数据库触发器(Trigger)来实现。 数据库触发器是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发子,在核心层进行集中的完整性控制。 定义数据库触发器的语句 CREATE OR REPLACE TRIGGER,ORACLE中的用户定义的完整性(续),例4: 为教师表Teacher定义完整性规则“教授的工资不得低于800元,如果低于800元,自动改为800元”,ORACLE中的用户定义的完整性(续),CREATE TRIGGER UPDATE_SAL BEFOR

40、E INSERT OR UPDATE OF Sal, Pos ON Teacher FOR EACH ROW WHEN (:new.Pos=教授) BEGIN IF :new.sal800 THEN :new.Sal:=800; END IF; END;,第5章 数据库安全,5.1 安全性 5.2 完整性 5.3 并发控制 5.4 恢复 5.5 数据库复制与数据库镜像,5.3 并发控制,多事务执行方式(1) 事务串行执行 每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行 不能充分利用系统资源,发挥数据库共享资源的特点,并发控制(续),多事务执行方式(2) 交叉并发方式(int

41、erleaved concurrency) 事务的并行执行是这些并行事务的并行操作轮流交叉运行 是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率,并发控制(续),多事务执行方式(3) 同时并发方式(simultaneous concurrency) 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行 最理想的并发方式,但受制于硬件环境,并发控制(续),事务并发执行带来的问题 对多用户并发存取同一数据的操作不加控制可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的一致性 DBMS必须提供并发控制机制 并发控制机制是衡量

42、一个DBMS性能的重要标志之一,5.3 并发控制,5.3.1 并发控制概述 5.3.2 并发操作的调度 5.3.3 封锁 5.3.4 死锁和活锁 5.3.5 Oracle的并发控制,5.3 并发控制,5.3.1 并发控制概述 5.3.2 并发操作的调度 5.3.3 封锁 5.3.4 死锁和活锁 5.3.5 Oracle的并发控制,5.3.1 并发控制概述,1. 并发控制的单位事务 2. 并发操作与数据的不一致性,一、事务,事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务和程序是两个概念 在关系数据库中,一个事务可以是一

43、条SQL语句,一组SQL语句或整个程序 一个应用程序通常包含多个事务 事务是恢复和并发控制的基本单位,事务(续),定义事务的两种方式 显式方式 事务的开始由用户显式控制或DBMS自动隐含 事务结束由用户显式控制 隐式方式 当用户没有显式地定义事务时,由DBMS按缺省规定自动划分事务,事务(续),显式定义事务 1. 事务开始 BEGIN TRANSACTION,事务(续),显式定义事务(续) 2. 事务结束(1) COMMIT 事务正常结束 提交事务的所有操作 使事务中所有对数据库的更新永久生效(保存在物理数据库中)。,事务(续),显式定义事务(续) 2. 事务结束(2) ROLLBACK 事务

44、异常终止 回滚事务的所有操作 在事务运行的过程中发生了某种故障,事务不能继续执行 系统将事务中对数据库的所有已完成的更新操作全部撤消,滚回到事务开始时的状态,事务(续),事务的ACID特性: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持续性(Durability ),1. 原子性,事务是数据库的逻辑工作单位 事务中包括的诸操作要么都做,要么都不做,2. 一致性,事务执行的结果必须是使数据库从一个 一致性状态变到另一个一致性状态。 一致性状态:数据库中只包含成功事务提交的结果 不一致状态:数据库中包含失败事务的结果 数据库系统运行中发生故障,有

45、些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库中,一致性(续),一致性与原子性是密切相关的。 例:银行转帐:从帐号A中取出一万元,存入帐号B。 定义一个事务,该事务包括两个操作 第一个操作是从帐号A中减去一万元 第二个操作是向帐号B中加入一万元 这两个操作要么全做,要么全不做 全做或者全不做,数据库都处于一致性状态。 如果只做一个操作则用户逻辑上就会发生错误,少了一万元,这时数据库就处于不一致性状态。,3. 隔离性,一个事务的执行不能被其他事务干扰 一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。,4. 持续性,持续

46、性也称永久性(Permanence) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。 接下来的其他操作或故障不应该对其执行结果有任何影响。,事务的特性(续),保证事务ACID特性是事务处理的重要任务。 破坏事务ACID特性的因素 多个事务并行运行时,不同事务的操作交叉执行 DBMS必须保证多个事务的交叉运行不影响这些事务ACID特性,特别是原子性和隔离性 事务在运行过程中被强行停止 DBMS必须保证被强行终止的事务对数据库和其他事务没有任何影响 这些就是DBMS中恢复机制和并发控制机制的责任。,二、 并发操作与数据的不一致性,什么是数据的不一致性 例:飞机订票系统中的一个活动序列:

47、 1)甲售票员读出某航班的机票余额A,设A=16 2)乙售票员读出同一航班的机票余额A,也为16 3)甲售票点卖出一张机票,修改机票余额AA-1, 所以A=15,把A写回数据库 4)乙售票点也卖出一张机票,修改机票余额AA-1, 所以A=15,把A写回数据库 结果:卖出两张机票,但数据库中机票余额只减少1。 这种情况称为数据库的不一致性。,并发控制概述(续),产生原因 由甲乙两个售票员并发操作引起 在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的 若按上面的调度序列执行,甲事务的修改就被丢失。因为第4步中乙事务修改A并写回后覆盖了甲事务的修改,并发控制概述(续),并发操作带来的数据不

48、一致性 丢失修改(lost update) 不可重复读(non-repeatable read) 读“脏”数据(dirty read),1. 丢失修改,事务1与事务2从数据库中读入同一数据并修改 事务2的提交结果破坏了事务1提交的结果 导致事务1的修改被丢失。,图 三种数据不一致性,(a) 丢失修改,2. 不可重复读,事务1读取数据 之后,事务2执行更新操作 从而使事务1无法再现前一次读取结果。,图 三种数据不一致性(续),(b) 不可重复读,不可重复读(续),三类不可重复读 1. 读-更新 事务1读取某一数据 事务2对其做了修改 当事务1再次读该数据时,得到与前一次不同的值。,不可重复读(续

49、),三类不可重复读 2. 读-删除 事务1按一定条件从数据库中读取某些数据记录 事务2删除了其中部分记录 当事务1再次按相同条件读取数据时,发现某些记录神密地消失了。,不可重复读(续),三类不可重复读(续) 3. 读-插入 事务1按一定条件从数据库中读取某些数据记录 事务2插入了一些记录 当事务1再次按相同条件读取数据时,发现多了一些记录。 后两种不可重复读有时也称为幻行现象,3. 读“脏”数据,事务1修改某一数据,并将其写回磁盘 事务2读取同一数据 之后,事务1由于某种原因被撤消,这时事务1已修改过的数据恢复原值 事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。,

50、图 三种数据不一致性(续),(c) 读“脏”数据,5.3 并发控制,5.3.1 并发控制概述 5.3.2 并发操作的调度 5.3.3 封锁 5.3.4 死锁和活锁 5.3.5 Oracle的并发控制,5.3.2 并发操作的调度,计算机系统对并行事务中并行操作的调度是的随机的,而不同的调度可能会产生不同的结果。 将所有事务串行起来的调度策略一定是正确的调度策略。 如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的,并发操作的调度(续),以不同的顺序串行执行事务也有可能会产生不同的结果,但由于不会将数据库置于不一致状态,

51、所以都可以认为是正确的。 几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度。,并发操作的调度(续),可串行性是并行事务正确性的唯一准则 例:现在有两个事务,分别包含下列操作: 事务1:读B;A=B+1;写回A; 事务2:读A;B=A+1;写回B; 假设A的初值为2,B的初值为2。,并发操作的调度(续),对这两个事务的不同调度策略 串行执行 串行调度策略1 串行调度策略2 交错执行 不可串行化的调度 可串行化的调度,(a) 串行调度策略,正确的调度,读B2 A B1 写回A3,读A3 B A1 写回B

52、4,T1,T2,(b) 串行调度策略,正确的调度,读B11 A B1 写回A12,读A10 B A1 写回B11,T1,T2,(c) 不可串行化的调度,读B2 A B1 写回A3,读A10 B A1 写回B11,T1,T2,(c) 不可串行化的调度(续),由于其执行结果与(a)、(b)的结果都不同,所以是错误的调度。,(d) 可串行化的调度,读B2 A B1 写回A3,等待 等待 等待 读A3 B A1 写回B4,T1,T2,(d) 可串行化的调度(续),由于其执行结果与串行调度(a)的执行结果相同,所以是正确的调度。,并发操作的调度(续),为了保证并行操作的正确性,DBMS的并行控制机制必须

53、提供一定的手段来保证调度是可串行化的。 从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资源。,并发操作的调度(续),保证并发操作调度正确性的方法 封锁方法:两段锁(Two-Phase Locking,简称2PL)协议 时标方法 乐观方法,5.3 并发控制,5.3.1 并发控制概述 5.3.2 并发操作的调度 5.3.3 封锁 5.3.4 死锁和活锁 5.3.5 Oracle的并发控制,5.3.3 封锁,封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加

54、锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 封锁是实现并发控制的一个非常重要的技术,5.5.3 封锁,5.3.3.1 封锁类型 5.3.3.2 封锁粒度 5.3.3.3 封锁协议,5.5.3 封锁,5.3.3.1 封锁类型 5.3.3.2 封锁粒度 5.3.3.3 封锁协议,5.3.3.1 封锁类型,DBMS通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。 基本封锁类型 排它锁(eXclusive lock,简记为X锁) 共享锁(Share lock,简记为S锁),封锁类型(续),排它锁

55、排它锁又称为写锁。 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。,封锁类型(续),共享锁 共享锁又称为读锁。 若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。,封锁类型(续),5.5.3 封锁,5.3.3.1 封锁类型 5.3.3.2 封锁粒度 5.3.3.3 封锁协议,5.3.3.2 封锁粒度,X锁和S锁都是加在某一个数据对象上的。 封锁的对象可以是逻辑单元,也可以是物理单元。 例:在关系数据库中,封锁对象可以是: 逻辑单元: 属性值、属性值集合、元组、关系、索引项、整个索引、

56、整个数据库等 物理单元:页(数据页或索引页)、块等,封锁粒度(续),封锁对象可以很大也可以很小 例: 对整个数据库加锁 对某个属性值加锁 封锁对象的大小称为封锁的粒度(Granularity),封锁粒度(续),封锁粒度与系统的并发度和并发控制的开销密切相关。 封锁的粒度越大,系统中能够被封锁的对象就越少,并发度也就越小,但同时系统开销也越小; 封锁的粒度越小,并发度越高,但系统开销也就越大。 选择封锁粒度时必须同时考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡,以求得最优的效果。,封锁粒度(续),一般原则 需要处理大量元组的用户事务:以关系为封锁单元; 需要处理多个关系的大量元组的用

57、户事务:以数据库为封锁单位; 只处理少量元组的用户事务:以元组为封锁单位,5.5.3 封锁,5.3.3.1 封锁类型 5.3.3.2 封锁粒度 5.3.3.3 封锁协议,5.3.3.3 封锁协议,什么是封锁协议 在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(Locking Protocol)。 何时申请X锁或S锁 持锁时间 何时释放 对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。,封锁协议(续),一、保证数据一致性的封锁协议 二、保证并行调度可串行性的封锁协议两段锁协议,一、保证数据一致性的封锁协议三级

58、封锁协议,三级封锁协议 1级封锁协议 2级封锁协议 3级封锁协议,1级封锁协议,1级封锁协议 事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。 正常结束(COMMIT) 非正常结束(ROLLBACK) 1级封锁协议可防止丢失修改,并保证事务T是可恢复的。 在1级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。,图 用封锁机制解决三种数据不一致性示例,(a) 没有丢失修改,图 用封锁机制解决三种数据不一致性示例,(a.1) 读“脏”数据,图 用封锁机制解决三种数据不一致性示例,(a.2) 不可重复读,2级封锁协议,2级封锁协议 1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。 2级封锁协议可以防止丢失修改和读“脏”数据。 在2级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。,图 用封锁机制解决三种数据不一致性示例,(c) 不读“脏”数据,图 用封锁机制解决三种数据不一致性示例,(c.1) 不可重复读,3级封锁协议,3级封锁协议 1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。 3级封锁协议可防止丢失修改、读脏数据

温馨提示

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

评论

0/150

提交评论