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

下载本文档

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

文档简介

第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统一的严格的控制之下的共享,即只允许有合法使用权限的用户访问允许他存取的数据数据库系统的安全保护措施是否有效是数据库系统主要的性能指标之一,安全性(续),什么是数据库的安全性数据库的安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。什么是数据的保密数据保密是指用户合法地访问到机密数据后能否对这些数据保密。通过制订法律道德准则和政策法规来保证。,5.1安全性,5.1.1安全性控制的一般方法5.1.2Oracle数据库的安全性措施,5.1安全性,5.1.1安全性控制的一般方法5.1.2Oracle数据库的安全性措施,5.1.1安全性控制的一般方法,非法使用数据库的情况用户编写一段合法的程序绕过DBMS及其授权机制,通过操作系统直接存取、修改或备份数据库中的数据;直接或编写应用程序执行非授权操作;,数据库安全性控制概述(续),通过多次合法查询数据库从中推导出一些保密数据例:某数据库应用系统禁止查询单个人的工资,但允许查任意一组人的平均工资。用户甲想了解张三的工资,于是他:首先查询包括张三在内的一组人的平均工资然后查用自己替换张三后这组人的平均工资从而推导出张三的工资破坏安全性的行为可能是无意的,故意的,恶意的。,数据库安全性控制概述(续),方法:,用户标识和鉴定,存取控制审计视图,操作系统安全保护,密码存储,计算机系统中的安全模型,数据库安全性控制概述(续),数据库安全性控制的常用方法用户标识和鉴定存取控制视图审计密码存储,1.用户标识与鉴定,用户标识与鉴别(Identification这样就可以省略十几条GRANT语句。,2.数据库对象的权限,ORACLE可以授权的数据库对象基本表视图序列同义词存储过程函数,数据库对象的权限(续),基本表的安全性级别表级行级列级,数据库对象的权限(续),表级安全性表的创建者或DBA可以把对表的权限授予其他用户,数据库对象的权限(续),表级权限ALTER:修改表定义DELETE:删除表记录INDEX:在表上建索引INSERT:向表中插入数据记录SELECT:查找表中记录UPDATE:修改表中的数据ALL:上述所有权限,数据库对象的权限(续),表级授权使用GRANTREVOKE语句例:GRANTSELECTONSCTOU12;,数据库对象的权限(续),行级安全性ORACLE行级安全性由视图间接实现,数据库对象的权限(续),例:用户U1只允许用户U12查看自己创建的Student表中有关信息系学生的信息,则首先创建视图信息系学生视图S_IS:CREATEVIEWS_ISASSELECTSno,Sname,Ssex,Sage,SdeptFROMStudentWHERESdept=IS;然后将关于该视图的SELECT权限授予U12用户:GRANTSELECTONS_ISTOU12;,数据库对象的权限(续),列级安全性实现方法由视图间接实现直接在基本表上定义,数据库对象的权限(续),列级安全性(续)借助视图实现列级安全性CREATEVIEWS_VASSELECTSno,SnameFROMStudent;GRANTSELECTONS_VTOU12;,数据库对象的权限(续),列级安全性(续)直接在基本表上定义列级安全性例:GRANTUPDATE(Sno,Cno)ONSCTOU12;,数据库对象的权限(续),三级对象的层次结构表、行、列三级对象自上而下构成一个层次结构上一级对象的权限制约下一级对象的权限例:当一个用户拥有了对某个表的UPDATE权限,即相当于在表的所有列了都拥有了UPDATE权限。,数据库对象的权限(续),ORACLE对数据库对象的权限采用分散控制方式允许具有WITHGRANTOPTION的用户把相应权限或其子集传递授予其他用户ORACLE不允许循环授权,即授权者不能把权限再授予其授权者或祖先U1U2U3U4,ORACLE的授权与检查机制(续),ORACLE的权限检查机制ORACLE把所有权限信息记录在数据字典中当用户进行数据库操作时,ORACLE首先根据数据字典中的权限信息,检查操作的合法性。在ORACLE中,安全性检查是任何数据库操作的第一步。,三、ORACLE的审计技术,审计分类审计分类用户级审计系统级审计,三、ORACLE的审计技术,审计分类(续)用户级审计设置者任何ORACLE用户审计对象用户针对自己创建的数据库表或视图进行审计审计内容所有用户对这些表或视图的一切成功和或不成功的访问要求所有用户对这些表或视图的各类SQL操作,ORACLE的审计技术(续),审计分类(续)系统级审计设置者DBA审计对象和内容成功或失败的登录要求GRANT和REVOKE操作其他数据库级权限下的操作,ORACLE的审计技术(续),审计设置可以自由设置是否使用审计对哪些表进行审计对哪些操作进行审计,ORACLE的审计技术(续),审计设置(续)设置方法AUDIT:设置审计功能例:AUDITALTER,UPDATEONSC;NOAUDIT:取消审计功能例:NOAUDITALLONSC;,ORACLE的审计技术(续),与审计功能有关的数据字典表SYS.TABLES:审计设置SYS.AUDIT_TRAIL:审计内容,四、用户定义的安全性措施,用数据库级触发器定义用户级安全性例:规定只能在工作时间内更新Student表可以定义如下触发器:,用户定义的安全性措施(续),CREATEORREPLACETRIGGERsecure_studentBEFOREINSERTORUPDATEORDELETEONStudentBEGINIF(TO_CHAR(sysdate,DY)IN(SAT,SUN)OR(TO_NUMBER(sysdate,HH24)NOTBETWEEN8AND17)THENRAISE_APPLICATION_ERROR(-20506,Youmayonlychangedataduringnormalbusinesshours.)ENDIF;END;,用户定义的安全性措施(续),触发器一经定义后,将存放在数据字典中用户每次对Student表执行INSERT、UPDATE或DELETE操作时都会自动触发该触发器,由系统检查当时的系统时间,如果是周六或周日,或者不是8点至17点,系统会拒绝执行用户的更新操作,并提示出错信息。,用户定义的安全性措施(续),利用触发器进一步细化审计规则,使审计操作的粒度更细,第5章数据库安全,5.1安全性5.2完整性5.3并发控制5.4恢复5.5数据库复制与数据库镜像,5.2完整性,什么是数据库的完整性数据库的完整性是指数据的正确性和相容性,防止不合语义的数据进入数据库。例:学生的年龄必须是整数,取值范围为14-29;学生的性别只能是男或女;学生的学号一定是唯一的;学生所在的系必须是学校开设的系;数据库是否具备完整性关系到数据库系统能否真实地反映现实世界,因此维护数据库的完整性是非常重要的。,完整性(续),完整性控制机制1.完整性约束条件定义机制2.完整性检查机制3.违约反应,完整性(续),完整性控制机制(续)1.完整性约束条件定义机制完整性约束条件是数据模型的一个重要组成部分,它约束了数据库中数据的语义。DBMS应提供手段让用户根据现实世界的语义定义数据库的完整性约束条件,并把它们作为模式的一部分存入数据库中。,完整性(续),完整性控制机制(续)2.完整性检查机制检查用户发出的操作请求是否违背了完整性约束条件。,完整性(续),完整性控制机制(续)3.违约反应如果发现用户的操作请求使数据违背了完整性约束条件,则采取一定的动作来保证数据的完整性。,5.2完整性,5.2.1完整性约束条件5.2.2完整性控制5.2.3Oracle的完整性,5.2完整性,5.2.1完整性约束条件5.2.2完整性控制5.2.3Oracle的完整性,5.2.1完整性约束条件,整个完整性控制都是围绕完整性约束条件进行的,从这个角度说,完整性约束条件是完整性控制机制的核心。,完整性约束条件(续),完整性约束条件作用的对象对象列对属性的取值类型、范围、精度等的约束条件元组对元组中各个属性列间的联系的约束关系对若干元组间、关系集合上以及关系之间的联系的约束,完整性约束条件(续),完整性约束条件作用的对象(续)对象的状态静态对静态对象的约束是反映数据库状态合理性的约束这是最重要的一类完整性约束动态对动态对象的约束是反映数据库状态变迁的约束,完整性约束条件(续),完整性约束条件分类六类完整性约束条件静态列级约束静态元组约束静态关系约束动态列级约束动态元组约束动态关系约束,完整性约束条件(续),对象状态动态列级约束动态元组约束动态关系约束动态静态列级约束静态元组约束静态关系约束静态列元组关系对象粒度,完整性约束条件(续),1.静态列级约束静态列级约束是对一个列的取值域的说明,这是最常见最简单同时也最容易实现的一类完整性约束,完整性约束条件(续),五类静态列级约束1)对数据类型的约束,包括数据的类型、长度、单位、精度等例:规定学生姓名的数据类型应为字符型,长度为8。2)对数据格式的约束例:规定学号的格式为前两位表示入学年份,后四位为顺序编号。出生日期的格式为YY.MM.DD。,完整性约束条件(续),3)对取值范围或取值集合的约束例:规定成绩的取值范围为0-100,年龄的取值范围为14-29,性别的取值集合为男,女。4)对空值的约束空值表示未定义或未知的值,它与零值和空格不同。有的列允许空值,有的则不允许。例如规定成绩可以为空值。5)其他约束例:关于列的排序说明,组合列等。,完整性约束条件(续),2.静态元组约束静态元组约束就是规定组成一个元组的各个列之间的约束关系。例:订货关系中包含发货量、订货量等列,发货量不得超过订货量教师关系中包含职称、工资等列,教授的工资不得低于700元静态元组约束只局限在单个元组上,完整性约束条件(续),3.静态关系约束在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束常见静态关系约束1)实体完整性约束2)参照完整性约束3)函数依赖约束4)统计约束,完整性约束条件(续),函数依赖约束大部分函数依赖约束都是隐含在关系模式结构中的,特别是规范化程度较高的关系模式(例如3NF或BCNF),都由模式来保持函数依赖。但是在实际应用中,为了不使信息过于分离,常常不过分地追求规范化。,完整性约束条件(续),函数依赖约束(续)这样在关系的字段间就可以存在一些函数依赖需要显式地表示出来。例:在学生课程教师关系SJT(S,J,T)中存在如下的函数依赖(S,J)T,TJ),将(S,J)作为主码,还需要显式地表示TJ这个函数依赖。,完整性约束条件(续),统计约束定义某个字段值与一个关系多个元组的统计值之间的约束关系例:规定部门经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍。本部门职工的平均工资值是一个统计计算值。,完整性约束条件(续),4.动态列级约束动态列级约束是修改列定义或列值时应满足的约束条件,完整性约束条件(续),常见动态列级约束1)修改列定义时的约束例:规定将原来允许空值的列改为不允许空值时,如果该列目前已存在空值,则拒绝这种修改。2)修改列值时的约束修改列值有时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例:职工工资调整不得低于其原来工资,学生年龄只能增长,完整性约束条件(续),5.动态元组约束动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。例:职工工资调整不得低于其原来工资+工龄*1.5,完整性约束条件(续),6.动态关系约束动态关系约束是加在关系变化前后状态上的限制条件例:事务一致性、原子性等约束条件,完整性约束条件(续),完整性约束条件小结,5.2完整性,5.2.1完整性约束条件5.2.2完整性控制5.2.3Oracle的完整性,5.2.2完整性控制,一、DBMS的完整性控制机制二、关系系统三类完整性的实现三、参照完整性的实现,一、DBMS的完整性控制机制,DBMS的完整性控制机制的主要功能1.定义功能2.检查功能3.违约反应,DBMS的完整性控制机制(续),1.定义功能一个完善的完整性控制机制应该允许用户定义各类完整性约束条件。,DBMS的完整性控制机制(续),2.检查功能立即执行的约束(Immediateconstraints)检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查,我们称这类约束为立即执行的约束延迟执行的约束(Deferredconstrainsts)在某些情况下,完整性检查需要延迟到整个事务执行结束后再进行,我们称这类约束为延迟执行的约束,DBMS的完整性控制机制(续),例:银行数据库中“借贷总金额应平衡”的约束就应该是延迟执行的约束从账号A转一笔钱到账号B为一个事务,从账号A转出去钱后账就不平了,必须等转入账号B后账才能重新平衡,这时才能进行完整性检查。,DBMS的完整性控制机制(续),3.违约反应拒绝该操作其他处理方法,DBMS的完整性控制机制(续),完整性规则的形式化表述一条完整性规则可以用一个五元组表示:(D,O,A,C,P)D(Data)约束作用的数据对象;O(Operation)触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查;A(Assertion)数据对象必须满足的断言或语义约束,这是规则的主体;C(Condition)选择A作用的数据对象值的谓词;P(Procedure)违反完整性规则时触发的过程。,DBMS的完整性控制机制(续),例1:在“学号不能为空”的约束中D约束作用的对象为Sno属性O插入或修改Student元组时ASno不能为空C无(A可作用于所有记录的Sno属性)P拒绝执行该操作,DBMS的完整性控制机制(续),例2:在“教授工资不得低于1000元”的约束中D约束作用的对象为工资Sal属性O插入或修改职工元组时ASal不能小于1000C职称=教授(A仅作用于职称=教授的记录)P拒绝执行该操作,二、关系系统三类完整性的实现,目前许多关系数据库系统都提供了定义和检查实体完整性、参照完整性和用户定义的完整性的功能。对于违反实体完整性规则和用户定义的完整性规则的操作一般都是采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时还需要采取另一种方法,即接受这个操作,同时执行一些附加的操作,以保证数据库的状态仍然是正确的。,三、参照完整性的实现,例:职工部门数据库包含职工表EMP和部门表DEPTDEPT关系的主码为部门号DeptnoEMP关系的主码为职工号Empno,外码为部门号Deptno该Deptno与DEPT关系中Deptno相对应称DEPT为被参照关系或目标关系,EMP为参照关系RDBMS实现参照完整性时需要考虑以下4方面:,参照完整性的实现(续),1.外码是否可以接受空值的问题外码是否能够取空值是依赖于应用环境的语义的。在实现参照完整性时,系统除了应该提供定义外码的机制,还应提供定义外码列是否允许空值的机制。,参照完整性的实现(续),例1:在职工部门数据库中,EMP关系包含有外码Deptno,某一元组的这一列若为空值,表示这个职工尚未分配到任何具体的部门工作。这和应用环境的语义是相符的,因此EMP的Deptno列应允许空值。,参照完整性的实现(续),例2:在学生选课数据库中,Student关系为被参照关系,其主码为Sno。SC为参照关系,外码为Sno。若SC的Sno为空值,则表明尚不存在的某个学生,或者某个不知学号的学生,选修了某门课程,其成绩记录在Grade列中。这与学校的应用环境是不相符的,因此SC的Sno列不能取空值。,参照完整性的实现(续),2.删除被参照关系的元组时的问题出现违约操作的情形需要删除被参照关系的某个元组,而参照关系有若干元组的外码值与被删除的被参照关系的主码值相对应,参照完整性的实现(续),2.在被参照关系中删除元组时的问题(续)违约反应:可有三种策略级联删除(CASCADES)受限删除(RESTRICTED)置空值删除(NULLIFIES)这三种处理方法,哪一种是正确的,要依应用环境的语义来定。,参照完整性的实现(续),级联删除将参照关系中所有外码值与被参照关系中要删除元组主码值相对应的元组一起删除。受限删除只有当参照关系中没有任何元组的外码值与要删除的被参照关系的元组的主码值相对应时,系统才执行删除操作,否则拒绝此删除操作。,参照完整性的实现(续),置空值删除删除被参照关系的元组,并将参照关系中所有与被参照关系中被删除元组主码值相等的外码值置为空值。,参照完整性的实现(续),例:要删除Student关系中Sno=950001的元组,而SC关系中有4个元组的Sno都等于950001。级联删除:将SC关系中所有4个Sno=950001的元组一起删除。如果参照关系同时又是另一个关系的被参照关系,则这种删除操作会继续级联下去。受限删除:系统将拒绝执行此删除操作。,参照完整性的实现(续),置空值删除:将SC关系中所有Sno=950001的元组的Sno值置为空值。在学生选课数据库中,显然第一种方法和第二种方法都是对的。第三种方法不符合应用环境语义。,参照完整性的实现(续),3.修改被参照关系中主码的问题两种策略(1)不允许修改主码(2)允许修改主码,参照完整性的实现(续),允许修改主码策略违约操作要修改被参照关系中某些元组的主码值,而参照关系中有些元组的外码值正好等于被参照关系要修改的主码值要修改参照关系中某些元组的主码值,而被参照关系中没有任何元组的外码值等于被参照关系修改后的主码值,参照完整性的实现(续),允许修改主码策略(续)违约反应(1)修改的关系是被参照关系:与删除类似级联修改受限修改置空值修改,参照完整性的实现(续),级联修改修改被参照关系中主码值同时,用相同的方法修改参照关系中相应的外码值。受限修改拒绝此修改操作。只当参照关系中没有任何元组的外码值等于被参照关系中某个元组的主码值时,这个元组的主码值才能被修改。置空值修改修改被参照关系中主码值,同时将参照关系中相应的外码值置为空值。,参照完整性的实现(续),例:学生950001休学一年后复学,这时需要将Student关系中Sno=950001的元组中Sno值改为960123。而SC关系中有4个元组的Sno=950001级联修改:将SC关系中4个Sno=950001元组中的Sno值也改为960123。如果参照关系同时又是另一个关系的被参照关系,则这种修改操作会继续级联下去。,参照完整性的实现(续),受限修改:只有SC中没有任何元组的Sno=950001时,才能修改Student表中Sno=950001的元组的Sno值改为960123。置空值修改:将Student表中Sno=950001的元组的Sno值改为960123。而将S表中所有Sno=950001的元组的Sno值置为空值。在学生选课数据库中只有第一种方法是正确的。,参照完整性的实现(续),允许修改主码策略(续)违约反应(2)修改的关系是参照关系:与插入类似受限修改递归修改,参照完整性的实现(续),结论RDBMS在实现参照完整性时,除了需要向用户提供定义主码、外码的机制外,还需要向用户提供按照自己的应用要求选择处理依赖关系中对应的元组的方法。,5.2完整性,5.2.1完整性约束条件5.2.2完整性控制5.2.3Oracle的完整性,5.2.3Oracle的完整性,一、Oracle中的实体完整性二、Oracle中的参照完整性三、Oracle中用户定义的完整性,一、ORACLE中的实体完整性,ORACLE在CREATETABLE语句中提供了PRIMARYKEY子句,供用户在建表时指定关系的主码列。在列级使用PRIMARYKEY子句在表级使用PRIMARYKEY子句,ORACLE中的实体完整性(续),例1:在学生选课数据库中,要定义Student表的Sno属性为主码CREATETABLEStudent(SnoNUMBER(8),SnameVARCHAR(20),SageNUMBER(20),CONSTRAINTPK_SNOPRIMARYKEY(Sno);或:CREATETABLEStudent(SnoNUMBER(8)PRIMARYKEY,SnameVARCHAR(20),SageNUMBER(20);,ORACLE中的实体完整性(续),例2:要在SC表中定义(Sno,Cno)为主码CREATETABLESC(SnoNUMBER(8),CnoNUMBER(2),GradeNUMBER(2),CONSTRAINTPK_SCPRIMARYKEY(Sno,Cno);,ORACLE中的实体完整性(续),在用PRIMARYKEY语句定义了关系的主码后,每当用户程序对主码列进行更新操作时,系统自动进行完整性检查违约操作使主属性值为空值的操作使主码值在表中不唯一的操作违约反应系统拒绝此操作,从而保证了实体完整性,二、ORACLE中的参照完整性,ORACLE的CREATETABLE语句允许用户定义参照完整性用FOREIGNKEY子句定义哪些列为外码列用REFERENCES子句指明这些外码相应于哪个表的主码用ONDELETECASCADE短语指明在删除被参照关系的元组时,同时删除参照关系中外码值等于被删除的被参照关系的元组中主码值的元组,ORACLE中的参照完整性(续),例1:建立表EMP表CREATETABLEEMP(EmpnoNUMBER(4),EnameVARCHAR(10),JobVERCHAR2(9),MgrNUMBER(4),SalNUMBER(7,2),DeptnoNUMBER(2),CONSTRAINTFK_DEPTNOFOREIGNKEY(Deptno)REFERENCESDEPT(Deptno)ONDELETECASCADE);,ORACLE中的参照完整性(续),或:CREATETABLEEMP(EmpnoNUMBER(4),EnameVARCHAR(10),JobVERCHAR2(9),MgrNUMBER(4),SalNUMBER(7,2),DeptnoNUMBER(2)CONSTRAINTFK_DEPTNOFOREIGNKEYREFERENCESDEPT(Deptno)ONDELETECASCADE);,ORACLE中的参照完整性(续),这时EMP表中外码为Deptno,它相应于DEPT表中的主码Deptno。当要修改DEPT表中的DEPTNO值时,先要检查EMP表中有无元组的Deptno值与之对应若没有,系统接受这个修改操作否则,系统拒绝此操作,ORACLE中的参照完整性(续),当要删除DEPT表中某个元组时,系统要检查EMP表,若找到相应元组即将其随之删除。当要插入EMP表中某个元组时,系统要检查DEPT表,先要检查DEPT表中有无元组的Deptno值与之对应若没有,系统拒绝此插入操作否则,系统接受此操作,三、ORACLE中的用户定义的完整性,ORACLE中定义用户完整性的两类方法用CREATETABLE语句在建表时定义用户完整性约束通过触发器来定义用户的完整性规则,ORACLE中的用户定义的完整性(续),1.用CREATETABLE语句在建表时定义用户完整性约束可定义三类完整性约束列值非空(NOTNULL短语)列值唯一(UNIQUE短语)检查列值是否满足一个布尔表达式(CHECK短语),ORACLE中的用户定义的完整性(续),例1:建立部门表DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码CREATETABLEDEPT(DeptnoNUMBER,DnameVARCHAR(9)CONSTRAINTU1UNIQUE,LocVARCHAR(10),CONSTRAINTPK_DEPTPRIMARYKEY(Deptno);其中CONSTRAINTU1UNIQUE表示约束名为U1,该约束要求Dname列值唯一。,ORACLE中的用户定义的完整性(续),例2:建立学生登记表Student,要求学号在900000至999999之间,年龄29,性别只能是男或女,姓名非空CREATETABLEStudent(SnoNUMBER(5)CONSTRAINTC1CHECK(SnoBETWEEN10000AND99999),SnameVARCHAR(20)CONSTRAINTC2NOTNULL,SageNUMBER(3)CONSTRAINTC3CHECK(Sage29),SsexVARCHAR(2)CONSTRAINTC4CHECK(SsexIN(男,女);,ORACLE中的用户定义的完整性(续),例3:建立职工表EMP,要求每个职工的应发工资不得超过3000元。应发工资实际上就是实发工资列Sal与扣除项Deduct之和。CREATETABLEEMP(EnoNUMBER(4)EnameVARCHAR(10),JobVARCHAR(8),SalNUMBER(7,2),DeductNUMBER(7,2)DeptnoNUMBER(2),CONSTRAINTSC1CHECK(Sal+Deduct=3000);,ORACLE中的用户定义的完整性(续),2.通过触发器来定义用户的完整性规则定义其它的完整性约束时,需要用数据库触发器(Trigger)来实现。数据库触发器是一类靠事件驱动的特殊过程,一旦由某个用户定义,任何用户对该数据的增、删、改操作均由服务器自动激活相应的触发子,在核心层进行集中的完整性控制。定义数据库触发器的语句CREATEORREPLACETRIGGER,ORACLE中的用户定义的完整性(续),例4:为教师表Teacher定义完整性规则“教授的工资不得低于800元,如果低于800元,自动改为800元”,ORACLE中的用户定义的完整性(续),CREATETRIGGERUPDATE_SALBEFOREINSERTORUPDATEOFSal,PosONTeacherFOREACHROWWHEN(:new.Pos=教授)BEGINIF:new.sal800THEN:new.Sal:=800;ENDIF;END;,第5章数据库安全,5.1安全性5.2完整性5.3并发控制5.4恢复5.5数据库复制与数据库镜像,5.3并发控制,多事务执行方式(1)事务串行执行每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行不能充分利用系统资源,发挥数据库共享资源的特点,并发控制(续),多事务执行方式(2)交叉并发方式(interleavedconcurrency)事务的并行执行是这些并行事务的并行操作轮流交叉运行是单处理机系统中的并发方式,能够减少处理机的空闲时间,提高系统的效率,并发控制(续),多事务执行方式(3)同时并发方式(simultaneousconcurrency)多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行最理想的并发方式,但受制于硬件环境,并发控制(续),事务并发执行带来的问题对多用户并发存取同一数据的操作不加控制可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的一致性DBMS必须提供并发控制机制并发控制机制是衡量一个DBMS性能的重要标志之一,5.3并发控制,5.3.1并发控制概述5.3.2并发操作的调度5.3.3封锁5.3.4死锁和活锁5.3.5Oracle的并发控制,5.3并发控制,5.3.1并发控制概述5.3.2并发操作的调度5.3.3封锁5.3.4死锁和活锁5.3.5Oracle的并发控制,5.3.1并发控制概述,1.并发控制的单位事务2.并发操作与数据的不一致性,一、事务,事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务和程序是两个概念在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序一个应用程序通常包含多个事务事务是恢复和并发控制的基本单位,事务(续),定义事务的两种方式显式方式事务的开始由用户显式控制或DBMS自动隐含事务结束由用户显式控制隐式方式当用户没有显式地定义事务时,由DBMS按缺省规定自动划分事务,事务(续),显式定义事务1.事务开始BEGINTRANSACTION,事务(续),显式定义事务(续)2.事务结束(1)COMMIT事务正常结束提交事务的所有操作使事务中所有对数据库的更新永久生效(保存在物理数据库中)。,事务(续),显式定义事务(续)2.事务结束(2)ROLLBACK事务异常终止回滚事务的所有操作在事务运行的过程中发生了某种故障,事务不能继续执行系统将事务中对数据库的所有已完成的更新操作全部撤消,滚回到事务开始时的状态,事务(续),事务的ACID特性:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持续性(Durability),1.原子性,事务是数据库的逻辑工作单位事务中包括的诸操作要么都做,要么都不做,2.一致性,事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性状态:数据库中只包含成功事务提交的结果不一致状态:数据库中包含失败事务的结果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库中,一致性(续),一致性与原子性是密切相关的。例:银行转帐:从帐号A中取出一万元,存入帐号B。定义一个事务,该事务包括两个操作第一个操作是从帐号A中减去一万元第二个操作是向帐号B中加入一万元这两个操作要么全做,要么全不做全做或者全不做,数据库都处于一致性状态。如果只做一个操作则用户逻辑上就会发生错误,少了一万元,这时数据库就处于不一致性状态。,3.隔离性,一个事务的执行不能被其他事务干扰一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。,4.持续性,持续性也称永久性(Permanence)一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。,事务的特性(续),保证事务ACID特性是事务处理的重要任务。破坏事务ACID特性的因素多个事务并行运行时,不同事务的操作交叉执行DBMS必须保证多个事务的交叉运行不影响这些事务ACID特性,特别是原子性和隔离性事务在运行过程中被强行停止DBMS必须保证被强行终止的事务对数据库和其他事务没有任何影响这些就是DBMS中恢复机制和并发控制机制的责任。,二、并发操作与数据的不一致性,什么是数据的不一致性例:飞机订票系统中的一个活动序列:1)甲售票员读出某航班的机票余额A,设A=162)乙售票员读出同一航班的机票余额A,也为163)甲售票点卖出一张机票,修改机票余额AA-1,所以A=15,把A写回数据库4)乙售票点也卖出一张机票,修改机票余额AA-1,所以A=15,把A写回数据库结果:卖出两张机票,但数据库中机票余额只减少1。这种情况称为数据库的不一致性。,并发控制概述(续),产生原因由甲乙两个售票员并发操作引起在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的若按上面的调度序列执行,甲事务的修改就被丢失。因为第4步中乙事务修改A并写回后覆盖了甲事务的修改,并发控制概述(续),并发操作带来的数据不一致性丢失修改(lostupdate)不可重复读(non-repeatableread)读“脏”数据(dirtyread),1.丢失修改,事务1与事务2从数据库中读入同一数据并修改事务2的提交结果破坏了事务1提交的结果导致事务1的修改被丢失。,图三种数据不一致性,(a)丢失修改,2.不可重复读,事务1读取数据之后,事务2执行更新操作从而使事务1无法再现前一次读取结果。,图三种数据不一致性(续),(b)不可重复读,不可重复读(续),三类不可重复读1.读-更新事务1读取某一数据事务2对其做了修改当事务1再次读该数据时,得到与前一次不同的值。,不可重复读(续),三类不可重复读2.读-删除事务1按一定条件从数据库中读取某些数据记录事务2删除了其中部分记录当事务1再次按相同条件读取数据时,发现某些记录神密地消失了。,不可重复读(续),三类不可重复读(续)3.读-插入事务1按一定条件从数据库中读取某些数据记录事务2插入了一些记录当事务1再次按相同条件读取数据时,发现多了一些记录。后两种不可重复读有时也称为幻行现象,3.读“脏”数据,事务1修改某一数据,并将其写回磁盘事务2读取同一数据之后,事务1由于某种原因被撤消,这时事务1已修改过的数据恢复原值事务2读到的数据就与数据库中的数据不一致,是不正确的数据,又称为“脏”数据。,图三种数据不一致性(续),(c)读“脏”数据,5.3并发控制,5.3.1并发控制概述5.3.2并发操作的调度5.3.3封锁5.3.4死锁和活锁5.3.5Oracle的并发控制,5.3.2并发操作的调度,计算机系统对并行事务中并行操作的调度是的随机的,而不同的调度可能会产生不同的结果。将所有事务串行起来的调度策略一定是正确的调度策略。如果一个事务运行过程中没有其他事务在同时运行,也就是说它没有受到其他事务的干扰,那么就可以认为该事务的运行结果是正常的或者预想的,并发操作的调度(续),以不同的顺序串行执行事务也有可能会产生不同的结果,但由于不会将数据库置于不一致状态,所以都可以认为是正确的。几个事务的并行执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同。这种并行调度策略称为可串行化(Serializable)的调度。,并发操作的调度(续),可串行性是并行事务正确性的唯一准则例:现在有两个事务,分别包含下列操作:事务1:读B;A=B+1;写回A;事务2:读A;B=A+1;写回B;假设A的初值为2,B的初值为2。,并发操作的调度(续),对这两个事务的不同调度策略串行执行串行调度策略1串行调度策略2交错执行不可串行化的调度可串行化的调度,(a)串行调度策略,正确的调度,读B2AB1写回A3,读A3BA1写回B4,T1,T2,(b)串行调度策略,正确的调度,读B11AB1写回A12,读A10BA1写回B11,T1,T2,(c)不可串行化的调度,读B2AB1写回A3,读A10BA1写回B11,T1,T2,(c)不可串行化的调度(续),由于其执行结果与(a)、(b)的结果都不同,所以是错误的调度。,(d)可串行化的调度,读B2AB1写回A3,等待等待等待读A3BA1写回B4,T1,T2,(d)可串行化的调度(续),由于其执行结果与串行调度(a)的执行结果相同,所以是正确的调度。,并发操作的调度(续),为了保证并行操作的正确性,DBMS的并行控制机制必须提供一定的手段来保证调度是可串行化的。从理论上讲,在某一事务执行时禁止其他事务执行的调度策略一定是可串行化的调度,这也是最简单的调度策略,但这种方法实际上是不可行的,因为它使用户不能充分共享数据库资源。,并发操作的调度(续),保证并发操作调度正确性的方法封锁方法:两段锁(Two-PhaseLocking,简称2PL)协议时标方法乐观方法,5.3并发控制,5.3.1并发控制概述5.3.2并发操作的调度5.3.3封锁5.3.4死锁和活锁5.3.5Oracle的并发控制,5.3.3封锁,封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务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通常提供了多种类型的封锁。一个事务对某个数据对象加锁后究竟拥有什么样的控制是由封锁的类型决定的。基本封锁类型排它锁(eXclusivelock,简记为X锁)共享锁(Sharelock,简记为S锁),封锁类型(续),排它锁排它锁又称为写锁。若事务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锁都是加在某一个数据对象上的。封锁的对象可以是逻辑单元,也可以是物理单元。例:在关系数据库中,封锁对象可以是:逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库等物理单元:页(数据页或索引页)、块等,封锁粒度(续),封锁对象可以很大也可以很小例:对整个数据库加锁对某个属性值加锁封锁对象的大小称为封锁的粒度(Granularity),封锁粒度(续),封锁粒度与系统的并发度和并发控制的开销密切相关。封锁的粒度越大,系统中能够被封锁的对象就越少,并发度也就越小,但同时系统开销也越小;封锁的粒度越小,并发度越高,但系统开销也就越大。选择封锁粒度时必须同时考虑封锁机构和并发度两个因素,对系统开销与并发度进行权衡,以求得最优的效果。,封锁粒度(续),一般原则需要处理大量元组的用户事务:以关系为封锁单元;需要处理多个关系的大量元组的用户事务:以数据库为封锁单位;只处理少量元组的用户事务:以元组为封锁单位,5.5.3封锁,5.3.3.1封锁类型5.3.3.2封锁粒度5.3.3.3封锁协议,5.3.3.3封锁协议,什么是封锁协议在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(LockingProtocol)。何时申请X锁或S锁持锁时间何时释放对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。,封锁协议(续),一、保证数据一致性的封锁协议二、保证并行调度可串行性的封锁协议两段锁协议,一、保证数据一致性的封锁协议三级封锁协议,三级封锁协议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级封锁协议可防止丢失修改、读脏数据和不可重复读。,图用封锁机制解决三种数据不一致性示例,(b)可重复读,三级封锁协议,三级协议的主要区别什么操作需要申请封锁以及何时释放锁(即持锁时间),三级封锁协议(续),二、两段锁协议,可串行性是并行调度正确性的唯一准则,两段锁(2PL)协议就是为保证并行调度可串行性而提供的封锁协议。两段锁协议的内容1.在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁2.在释放一个封锁之后,事务不再获得任何其他封锁。,两段锁协议(续),“两段”锁的含义事务分为两个阶段第一阶段是获得封锁,也称为扩展阶段;第二阶段是释放封锁,也称为收缩阶段。,两段锁协议(续),例:事务1的封锁序列:SlockA.SlockB.XlockC.UnlockB.UnlockA.UnlockC;事务2的封锁序列:SlockA.UnlockA.SlockB.XlockC.UnlockC.UnlockB;事务1遵守两段锁协议,而事务2不遵守两段协议。,两段锁协议(续),并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可串行化的。所有遵守两段锁协议的事务,其并行执行的结果一定是正确的。事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件。即可串行化的调度中,不一定所有事务都必须符合两段锁协议。,5.3并发控制,5.3.1并发控制概述5.3.2并发操作的调度5.3.3封锁5.3.4死锁和活锁5.3.5Oracle的并发控制,5.3.4死锁和活锁,封锁技术可以有效地解决并行操作的一致性问题,但也带来一些新的问题死锁活锁,一、活锁,什么是活锁,活锁(续),如何避免活锁采用先来先服务的策略当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对这些事务排队该数据对象上的锁一旦释放,首先批准申请队列中第一个事务获得锁。,二、死锁,什么是死锁T1T2,XlockR1.XlockR2等待等待等待.,.XlockR2.XlockR1等待等待.,死锁(续),如何解决死锁解决死锁的两类方法1.死锁的预防2.死锁的诊断与解除,1.死锁的预防,预防死锁为何能解决死锁产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。预防死锁的发生就是要破坏产生死锁的条件。,死锁的预防(续),预防死锁的方法一次封锁法顺序封锁法,(1)一次封锁法,一次封锁法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。一次封锁法存在的问题:降低并发度扩大封锁范围一次就将以后要用到的全部数据加锁,势必扩大了封锁的范围,从而降低了系统的并发度。,一次封锁法(续),难于事先精确确定封锁对象数据库中数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象解决方法:将事务在执行过程中可能要封锁的数据对象全部加锁,这就进一步降低了并发度。,(2)顺序封锁法,顺序封锁法是预先对数据对象规定一个封锁顺

温馨提示

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

评论

0/150

提交评论