资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第5章 数据库保护,2,概要,数据库系统中的数据是由DBMS统一进行管理和控制的。为了适应和满足数据共享的环境和要求,DBMS要保证整个系统的正常运转,防止数据意外丢失和不一致数据的产生,以及当数据库遭受破坏后能迅速地恢复正常,这就是数据库的安全保护。DBMS对数据库的安全保护功能是通过四方面实现的,即安全性控制、完整性控制、并发性控制和数据库恢复。本篇就是从这四方面来介绍数据库的安全保护功能:要求掌握安全性、完整性、并发性和数据库恢复的含义,掌握这四方面分别实现安全保护功能的方法。,3,含义:指保护数据库,以防止非法使用所造成数据的泄露、更改或破坏。,5.1 数据库安全性,4,在计算机系统中,安全措施是一级一级层层设置的,安全控制模型如图5.1所示。 图5.1 安全控制模型,5.1.1 安全性控制的一般方法,5,一、用户标识和鉴定1用户名或用户标识符2用户名与口令二、用户存取权限控制授权(Authorization)。这些授权定义经过编译后以一张授权表的形式存放在数据字典中。授权表主要有三个属性,用户标识、数据对象和操作类型。,6,三、定义视图四、数据加密(Data Encryption)一种是替换方法,该方法使用密钥(Encryption Key)将明文中的每一个字符转换为密文中的一个字符。另一种是转换方法,该方法将明文中的字符按不同的顺序重新排列。,7,五、审计(Audit)审计功能是一种监视措施,跟踪记录有关数据的访问活动。审计追踪把用户对数据库的所有操作自动记录下来,存放在一个特殊文件上中,即审计日志(Audit Log)中。记录的内容一般包括:操作类型,如修改、查询等;操作终端标识与操作者标识;操作日期和时间;,8,含义: 指保护数据库中数据的正确性、有效性和相容性,防止错误的数据进入数据库造成无效操作。,5.2 数据库完整性,9,为了实现完整性控制,数据库管理员应向DBMS提出一组完整性规则,来检查数据库中的数据,看其是否满足语义约束。这些语义约束构成了数据库的完整性规则,这组规则作为DBMS控制数据完整性的依据。它定义了何时检查、检查什么、查出错误又怎样处理等事项。具体地说,完整性规则主要由以下三部分构成:1 触发条件:规定系统什么时候使用规则检查数据;2 约束条件:规定系统检查用户发出的操作请求违背了什么样的完整性约束条件;3 违约响应:规定系统如果发现用户的操作请求违背了完整性约束条件,应该采取一定的动作来保证数据的完整性,即违约时要做的事情。,5.2.1 完整性规则的组成,10,完整性规则从执行时间上可分为立即执行约束(Immediate Constraints)和延迟执行约束(Deferred Constrainsts)。立即执行约束是指在执行用户事务过程中,某一条语句执行完成后,系统立即对此数据进行完整性约束条件检查。延迟执行约束是指在整个事务执行结束后,再对约束条件进行完整性检查,结果正确后才能提交。,11,一条完整性规则可以用一个五元组(D,O,A,C,P)来形式化地表示。其中:D(data):代表约束作用的数据对象;O(operation):代表触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则; A(assertion):代表数据对象必须满足的语义约束,这是规则的主体;C(condition):代表选择A作用的数据对象值的谓词;P(procdure):代表违反完整性规则时触发执行的操作过程。,12,例如,对于“学号不能为空”的这条完整性约束,D:代表约束作用的数据对象为SNO属性;O(operation):当用户插入或修改数据时需要检查该完整性规则;A(assertion):SNO不能为空;C(condition):A可作用于所有记录的SNO属性;P(procdure):拒绝执行用户请求。,13,关系模型的完整性包括实体完整性,参照完整性和用户定义完整性。对于违反实体完整性和用户定义完整性规则的操作一般都是采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单的拒绝执行,一般在接受这个操作的同时,执行一些附加的操作,以保证数据库的状态仍然是正确的。例如在删除被参照关系中的元组时,应该将参照关系中所有的外码值与被参照关系中要删除元组主码值相对应的元组一起删除。比如,要删除S关系中SNO=S1的元组,而SC关系中又有两个SNO=S1的元组。这时根据应用环境的语义,因为当一个学生毕业或退学后,他的个人记录从S关系中删除,选课记录也应随之从SC表中删除,所以应该将SC关系中两个SNO=S1的元组一起删除。,14,这些完整性规则都由DBMS提供的语句进行描述,经过编译后存放在数据字典中。一旦进入系统,就开始执行该组规则。其主要优点是违约由系统来处理,而不是由用户处理。另外,规则集中在数据字典中,而不是散布在各应用程序之中,易于从整体上理解和修改,效率较高。数据库系统的整个完整性控制都是围绕着完整性约束条件进行的,从这个角度来看,完整性约束条件是完整性控制机制的核心。,15,一、从约束条件使用的对象分为值的约束和结构的约束1值的约束:即对数据类型、数据格式、取值范围等进行规定。(1)对数据类型的约束,包括数据的类型、长度、单位和精度等。例如,规定学生姓名的数据类型应为字符型,长度为8。(2)对数据格式的约束。例如,规定出生日期的数据格式为YY.MM.DD。(3)对取值范围的约束。例如,月份的取值范围为112,日期131。(4)对空值的约束。空值表示未定义或未知的值,它与零值和空格不同。有的列值允许空值,有的则不允许。例如,学号和课程号不可以为空值,但成绩可以为空值。,5.2.2 完整性约束条件的分类,16,2结构约束:即对数据之间联系的约束。数据库中同一关系的不同属性之间,应满足一定的约束条件,同时,不同关系的属性之间也有联系,也应满足一定的约束条件。常见的结构约束有如下四种:(1)函数依赖约束:说明了同一关系中不同属性之间应满足的约束条件。如:2NF,3NF,BCNF这些不同的范式应满足不同的约束条件。大部分函数依赖约束都是隐含在关系模式结构中的,特别是对于规范化程度较高的关系模式,都是由模式来保持函数依赖的。,17,(2)实体完整性约束:说明了关系键的属性列必须唯一,其值不能为空或部分为空。(3)参照完整性约束:说明了不同关系的属性之间的约束条件,即外部键的值应能够在参照关系的主键值中找到或取空值。(4)统计约束,规定某个属性值与一个关系多个元组的统计值之间必须满足某种约束条件。例如,规定系主任的奖金不得高于该系的平均奖金的40%。,不得低于该系的平均奖金的20%。这里该系平均奖金的值就是一个统计计算值。其中,实体完整性约束和参照完整性约束是关系模型的两个极其重要的约束,被称为关系的两个不变性。统计约束实现起来开销很大。,18,二、从约束对象的状态分为静态约束和动态约束1静态约束静态约束是指对数据库每一个确定状态所应满足的约束条件,是反映数据库状态合理性的约束,这是最重要的一类完整性约束。上面介绍的值的约束和结构的约束均属于静态约束。2动态约束动态约束是指数据库从一种状态转变为另一种状态时,新旧值之间所应满足的约束条件,动态约束反映的是数据库状态变迁的约束。例如,学生年龄在更改时只能增长,职工工资在调整时不得低于其原来的工资。,19,一、定义事务是用户定义的一组数据库操作序列,这组操作要么全做,要么全不做,是不可分割的工作单位。一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按照缺省规定自动划分事务。二、开始和结束的标志 开始: begin transaction 结束: commit 提交 rollback 回滚,5.3 事务,20,三、四个特性(ACID)1原子性(Atomic)2一致性(Consistency)3隔离性(Isolation)4持久性(Durability),21,下面是一个事务的例子,从帐号A转移资金额R到帐号B:BEGIN TRANSACTION READ A AA-R IF A0/* A 款不足*/ THEN BEGIN DISPLAY “A款不足”ROLLBACK ENDELSE /* 拨款 */ BEGIN BB+R DISPLAY “拨款完成” COMMIT END,22,5.4.1 数据库并发操作一、并发操作的含义二、并发操作与数据的不一致性例1并发取款操作。假设存款余额R=1000元,甲事务T1取走存款100元,乙事务T2取走存款200元,如果正常操作,即甲事务T1执行完毕再执行乙事务T2,存款余额更新后应该是700元。但是如果按照如下顺序操作,则会有不同的结果:甲事务T1读取存款余额R =1000元;乙事务T2读取存款余额R =1000元;甲事务T1取走存款100元,修改存款余额R =R 100=900,把R =900写回到数据库;乙事务T2取走存款200元,修改存款余额R =R 200=800,把R =800写回到数据库。得到这种错误的结果是由甲乙两个事务并发操作引起的,5.4 并发操作,23,数据库的并发操作导致的数据库不一致性:1丢失更新(Lost Update),表 丢失更新问题,24,2脏读(Dirty Read),表5.1 脏读问题,25,3不可重读(Unrepeatable Read),表5.2 不可重读问题,产生上述三类数据不一致性的主要原因就是并发操作破坏了事务的隔离性。,26,实现并发控制的主要方法:封锁(Lock)一、 封锁类型(Lock Type)所谓封锁就是当一个事务在对某个数据对象(可以是数据项、记录、数据集、以至整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的正确性和一致性。,5.4.2 封锁,27,基本的封锁类型有两种:排它锁和共享锁。 1排它锁(Exclusive Lock)排它锁又称写锁,简称为X锁当事务T对某个数据对象R实现X封锁后,其他事务要等T解除X封锁以后,才能对R进行封锁。这就保证了其他事务在T释放R上的锁之前,不能再对R进行操作。2共享锁(Share Lock)共享锁又称读锁,,简称为S锁当事务T对某个数据对象R实现S封锁后,其他事务只能对R加S锁,而不能加X锁,直到T释放R上的S锁。这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。,28,封锁可以保证合理的进行并发控制,保证数据的一致性。在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。封锁协议在不同程序上对正确控制并发操作提供了一定的保证。并发操作所带来的丢失更新、污读和不可重读等到数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决。,5.4.3 封锁协议(Lock Protocol),29,一级封锁协议的内容是:事务T在修改数据对象之前必须对其加X锁,直到事务结束。具体地说,就是任何企图更新记录R的事务必须先执行“XLOCK R”操作,以获得对该记录进行寻址的能力并对它取得X封锁。如果未获准“X 封锁”,那么这个事务进入等待状态,一直到获准“X封锁”,该事务才继续做下去。该事务规定事务在更新记录R时必须获得排它性封锁,使得两个同时要求更新R的并行事务之一必须在一个事务更新操作执行完成之后才能获得X封锁,这样就避免了两个事务读到同一个R值而先后更新时所发生的丢失更新问题。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号