




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 五 章 数据库安全保护,数据库系统中的数据是由DBMS统一进行管理和控制的。 为了适应和满足数据共享的环境和要求,DBMS要保证整个系统的正常运转,防止数据意外丢失和不一致数据的产生,以及当数据库遭受破坏后能迅速地恢复正常,这就是数据库的安全保护。 DBMS对数据库的安全保护功能是通过四方面实现的,即安全性控制、完整性控制、并发性控制和数据库恢复。,第 五 章 数据库安全保护,5.1 数据库安全性 5.2 完整性控制 5.3 并发控制 5.4 数据库的恢复,5.1 数据库安全性,数据库的安全性是指保护数据库,以防止非法使用所造成数据的泄露、更改或破坏。 安全性控制的一般方法 对有意的非法活动可采用加密存、取数据的方法控制; 对有意的非法操作可使用用户身份验证、限制操作权来控制; 对无意的损坏可采用提高系统的可靠性和数据备份等方法来控制。,5.1 数据库安全性,图5-1 计算机系统的安全控制模型,5.1 数据库安全性,根据图5.1的安全模型,当用户进入数据库系统时,系统首先根据输入的用户标识进行身份的鉴定,只有合法的用户才准许进入系统。 对已进入系统的用户,DBMS还要验证此用户是否具有操作权,有操作权才能进行操作。 DBMS是建立在操作系统之上的,在操作系统一级设有相应的保护措施,比如设置文件的访问权限。 数据可以通过加密的形式存储到数据库中,5.1 数据库安全性,一. 用户身份验证 用一个用户名或用户标识符来标明用户的身份,系统以此来鉴别用户的合法性。如果正确,则可进入下一步的核实,否则,不能使用计算机。 用户标识符是用户公开的标识,它不足以成为鉴别用户身份的凭证。为了进一步核实用户身份,常采用用户名与口令(Password)相结合的方法,系统通过核对口令判别用户身份的真伪。 系统有一张用户口令表,为每个用户保持一个记录,包括用户名和口令两部分数据。 用户先输入用户名,然后系统要求用户输入口令。 为了保密,用户在终端上输入的口令不显示在屏幕上。 系统核对口令以鉴别用户身份。,5.1 数据库安全性,一. 用户身份验证,通过用户名和口令来鉴定用户的方法简单易行,但该方法在使用时,由于用户名和口令的产生和使用比较简单,也容易被窃取,因此还可采用更复杂的方法。,例如,每个用户都预先约定好一个过程或者函数,鉴别用户身份时,系统提供一个随机数,用户根据自己预先约定的计算过程或者函数进行计算,系统根据计算结果辨别用户身份的合法性。 例如,让用户记住一个表达式,如T=X+2Y,系统告诉用户X=1,Y=2,如果用户回答T=5,则证实了该用户的身份。 当然,这是一个简单的例子,在实际使用中,还可以设计复杂的表达式,以使安全性更好。系统每次提供不同的X,Y值,其他人可能看到的是X、Y的值,但不能推算出确切的变换公式T。,5.1 数据库安全性,二. 用户操作权限管理,1.权限的种类 对数据库管理系统进行维护的权限 对数据库中的对象和数据进行操作的权限 对数据库对象的权限,包括创建、删除和修改数据库对象 对数据库数据的操作权,包括对表、视图数据的增、删、改、查权 2.数据库用户的分类 (1)数据库系统管理员:具有一切权限。 (2)数据库对象拥有者:对其所拥有的对象具有一切权限。 (3)普通用户:只具有对数据库数据的增、删、改、查权。,5.2 完整性控制,一. 数据库完整性的含义 数据库的完整性是指保护数据库中数据的正确性、有效性和相容 性,防止错误的数据进入数据库造成无效操作。,有关完整性的含义在第一章中已作简要介绍。 比如年龄属于数值型数据,只能含0,1,9,不能含字母或 特殊符号; 月份只能用112之间的正整数表示; 表示同一事实的两个数据应相同,否则就不相容,如一个人 不能有两个学号。,显然,维护数据库的完整性非常重要,数据库中的数据是否具备 完整性关系到数据能否真实地反映现实世界。,5.2 完整性控制,数据库的完整性和安全性是数据库保护的两个不同的方面。 安全性是保护数据库,以防止非法使用所造成数据的泄露、更改或破坏,安全性措施的防范对象是非法用户和非法操作; 完整性是防止合法用户使用数据库时向数据库中加入不符合语义的数据,完整性措施的防范对象是不合语义的数据。 但从数据库的安全保护角度来讲,安全性和完整性又是密切相关的。,5.2 完整性控制,二. 完整性规则的组成 为了实现完整性控制,数据库管理员应向DBMS提出一组完整性规则,来检查数据库中的数据,看其是否满足语义约束。 这些语义约束构成了数据库的完整性规则,这组规则作为DBMS控制数据完整性的依据。 它定义了何时检查、检查什么、查出错误又怎样处理等事项。 具体地说,完整性规则主要由以下三部分构成: 1 触发条件:规定系统什么时候使用规则检查数据; 2 约束条件:规定系统检查用户发出的操作请求违背了什么样的完整性约束条件; 3 违约响应:规定系统如果发现用户的操作请求违背了完整性约束条件,应该采取一定的动作来保证数据的完整性,即违约时要做的事情。,5.2 完整性控制,关系模型的完整性包括实体完整性,参照完整性和用户定义完整性。 对于违反实体完整性和用户定义完整性规则的操作一般都是采用拒绝执行的方式进行处理。 而对于违反参照完整性的操作,并不都是简单的拒绝执行,一般在接受这个操作的同时,执行一些附加的操作,以保证数据库的状态仍然是正确的。 例如:在删除被参照关系中的元组时,应该将参照关系中所有的外码值与被参照关系中要删除元组主码值相对应的元组一起删除。 比如,要删除S关系中SNO=S1的元组,而SC关系中又有两个SNO=S1的元组。 这时根据应用环境的语义,因为当一个学生毕业或退学后,他的个人记录从S关系中删除,选课记录也应随之从SC表中删除,所以应该将SC关系中两个SNO=S1的元组一起删除。,5.2 完整性控制,数据完整性的实现一般是在服务器端完成的 服务器端实现数据完整性的方法: 在定义表的时候声明数据完整性 在服务器端编写触发器实现数据完整性 一旦进入系统,就开始执行数据完整性规则。 其主要优点是违约由系统来处理,而不是由用户处理。 数据库系统的整个完整性控制都是围绕着完整性约束条件进行的,从这个角度来看,完整性约束条件是完整性控制机制的核心。,5.2 完整性控制,三. 完整性约束条件的作用对象,完整性约束条件的作用对象可以是表、元组和列。,1.列级约束:即对数据类型、数据格式、取值范围等进行规定。 对数据类型的约束,包括数据的类型、长度、单位和精度等。 例如,规定学生姓名的数据类型应为字符型,长度为8。 对数据格式的约束。 例如,规定出生日期的数据格式为YY.MM.DD。 对取值范围的约束。 例如,月份的取值范围为112,日期131 对空值的约束。空值表示未定义或未知的值,它与零值 空格不同。有的列值允许空值,有的则不允许。 例如,学号和课程号不可以为空值,但成绩可以为空值,5.2 完整性控制,三. 完整性约束条件的作用对象,2.元组约束 元组的约束是元组中各个字段之间的联系的约束,如:开始日期小于结束日期,职工的最低工资不能低于规定的最低保障金等。 3.关系约束 关系约束是指若干元组之间、关系之间的联系的约束。比如学号的取值不能重复也不能取空值,学生修课表中的学号的取值受学生表中的学号取值的约束等 。,5.3 并发控制,每个用户在存取数据库中的数据时,可能是串行执行,即每个时刻只有一个用户程序运行,也可能是多个用户并行地存取数据库。 数据库的最大特点之一就是数据资源是共享的,串行执行意味着一个用户在运行程序时,其他用户程序必须等到这个用户程序结束才能对数据库进行存取,这样如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间将处于闲置状态。,因此,为了充分利用数据库资源,很多时候数据库用户都是对 数据库系统并行存取数据,这样就会发生多个用户并发存取同一 数据块的情况,如果对并发操作不加控制可能会产生不正确的数 据,破坏数据的完整性,并发控制就是解决这类问题,以保持数 据库中数据的一致性,即在任何一个时刻数据库都将以相同的形式 给用户提供数据。,5.3 并发控制,一. 事务(Transaction),事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元. 一个事务可以是一组SQL语句、一条SQL语句或整个程序,一个应用程序可以包括多个事务。 一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。 例如:对于一个转帐活动:A帐户转帐给B帐户n元钱,这个活动包含两个动作: 第一个动作:A帐户 n 第二个动作:B帐户 n,1. 事务的定义,5.3 并发控制,事务的开始与结束可以由用户显式控制。如果用户没有显式地定义事务,则由DBMS按照缺省规定自动划分事务。 在SQL语言中,定义事务的语句有三条: BEGIN TRANSACTION:表示事务的开始; COMMIT(提交):表示事务的正常结束,即此时事务中所有操作都会保存到物理数据库中,成为永久操作 ROLLBACK(回滚):表示事务的异常结束,在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的更新操作全部撤销,再回滚到事务开始时的状态。,例: BEGIN TRANSACTION UPDATE 支付表 SET 帐户总额 帐户总额 n WHERE 帐户名 A UPDATE 支付表 SET 帐户总额 帐户总额 n WHERE 帐户名 B COMMIT,5.3 并发控制,2. 事务的特征 事务是由有限的数据操作序列组成,但并不是任意的数据操作序列都能成为事务,为了保护数据的完整性,一般要求事务具有以下四个特征: 原子性(Atomic):是指一个事务是一个不可分割的工作单位,事务在执行时,应该遵守“要么不做,要么全做”的原则,即不允许事务部分的完成。 一致性(Consistency):是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。例如前面的转帐如果只执行其中一个操作,则数据库处于不一致状态,帐务会出现问题。也就是说,两个操作要么全做,要么全不做,否则就不能成为事务。,5.3 并发控制,2. 事务的特征,隔离性(Isolation):指数据库中一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。并发控制就是为了保证事务间的隔离性。 持久性(Durability):指一个事务一旦提交,它对数据库中数据的改变就应该是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。,5.3 并发控制,二.并发操作与数据的不一致性,例并发订票操作。假设有两个飞机订票点A和B,如果A和B两个订票点恰巧同时办理同一架航班的飞机订票业务。该航班目前的机票余额数R =10张,A订票点(事务A)卖出6张机票, B订票点(事务B))卖出5张机票,如果正常操作,即事务A执行完毕再执行事务B ,则飞机票时不够的。但是如果按照如下顺序操作,则会有不同的结果: A订票点(事务A)读出航班目前的机票余额数R =10张; B订票点(事务B)读出航班目前的机票余额数R =10张; A订票点卖出6张机票,修改机票余额数R =106=4,把R =4写 回到数据库; B订票点卖出5张机票,修改机票余额数R =105=5,把R =5写 回到数据库;,结果数据库中的票数却只少了5张,得到这种错误的结果是由两个事务 并发操作引起的.,5.3 并发控制,数据库的并发操作导致的数据库不一致性主要 有以下四种:,丢失修改(Lost Update),污读(Dirty Read),不可重读(Unrepeatable Read),产生“幽灵”数据,5.3 并发控制,1丢失修改(Lost Update) 当两个事务T1和T2读入同一数据做修改,并发执行时, T2把T1或T1把T2的修改结果覆盖掉。,5.3 并发控制,2污读(Dirty Read) 事务T1更新了数据R,事务T2读取了更新后的数据R,事务T1由于某种原因被撤消,修改无效,数据R恢复原值。事务T2得到的数据与数据库的内容不一致,这种情况称为“污读”。,5.3 并发控制,3不可重读(Unrepeatable Read) 事务T1读取了数据后,事务T2更新了T1读取的数据,当事务T1再读取数据以进行相同操作时,得到的两次值不一致,这种情况称为“不可重读”。,5.3 并发控制,4. 产生“幽灵”数据 实际属于不可重复读的范畴。指当事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中的部分记录,或者在其中添加了部分记录,则当T1再次按相同条件读取数据时,发现其中莫名其妙地少了(对删除)或多了(对插入)一些记录。这样的数据对T1来说就是“幽灵”数据或称“幻影”数据。,产生上述四类数据不一致性的主要原因就是并发操作破坏了事务的隔离性。 并发控制就是要求DBMS提供并发控制功能以正确的方法调度并发事务,避免并发事务之间的相互干扰造成数据的不一致性,保证数据库的完整性。,5.3 并发控制,三.并发控制措施,并发控制的主要方式是封锁机制,即加锁(Locking)。 加锁就是事务T在对某个数据操作之前,先向系统发出请求,对其加锁。加锁后事务T对其要操作的数据具有了一定的控制权,在事务T释放它的锁之前,其他事务不能操作这些数据。,5.3 并发控制,共享锁(Share Lock,又称读锁,,简称为S锁) 其采用的原理是允许其他用户对同一数据对象进行查询,但不能对该数据对象进行修改。 事务T对数据对象A加了S锁,则事务T可以读A,但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放了A上的S锁。 这就保证了其他事务在T释放R上的S锁之前,只能读取R,而不能再对R作任何修改。,基本的封锁类型有两种:排它锁和共享锁 排它锁(Exclusive Lock,又称写锁,简称为X锁) 其采用的原理是禁止并发操作。 事务T对数据对象A加了X锁,则允许T读取和修改A,但不允许其它事务再对A加任何类型的锁和进行任何操作。,5.3 并发控制,四.封锁协议,封锁可以保证合理的进行并发控制,保证数据的一致性。 在封锁时,要考虑一定的封锁规则,例如,何时开始封锁、封锁多长时间、何时释放等,这些封锁规则称为封锁协议。 对封锁方式规定不同的规则,就形成了各种不同的封锁协议。 封锁协议在不同程序上对正确控制并发操作提供了一定的保证。 上面讲述过的并发操作所带来的丢失更新、污读和不可重读等数据不一致性问题,可以通过三级封锁协议在不同程度上给予解决。,5.3 并发控制,1一级封锁协议 规则是:事务T在修改数据对象之前必须对其加X锁,直到事务结束时才释放锁。 一级封锁协议可以防止丢失修改。 一级封锁协议只有当修改数据时才进行加锁,如果只是读取数据并不加锁,所以它不能防止“污读”和“重读”数据。 例:事务T要对A进行修改,因此在读A之前先对A加X锁其它事务必须等待,5.3 并发控制,一级封锁协议举例,5.3 并发控制,2二级封锁协议 规则是:在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。 二级封锁协议除了可以防止丢失修改外,还可以防止读“脏”数据。 在二级封锁协议协议中,由于事务T读完数据即释放S锁,因此,不能保证可重复读数据。,5.3 并发控制,二级封锁协议举例,5.3 并发控制,3三级封锁协议 规则是:在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。 三级封锁协议除了可以防止更新丢失问题和“污读”数据外,还可进一步防止不可重读数据,彻底解决了并发操作所带来的三个不一致性问题。,5.3 并发控制,三级封锁协议举例,5.3 并发控制,总结:,三个封锁协议的主要区别在于:什么操作需要申请封锁,以及何时释放锁。,5.3 并发控制,五.死锁,图68,封锁技术可有效解决并行操作的一致性问题,但也可产生新的问题,即死锁问题。 在同时处于等待状态的两个或多个事务中,其中的每一个在它能够进行之前,都等待着某个数据、而这个数据已被它们中的某个事务所封锁,这种状态称为死锁。,5.3 并发控制,例如,事务T1封锁了数据R1,事务T2封锁了数据R2,然后T1又请求封锁R2,由于T2封锁了R2,因此T1等待T2释放R2上的锁,然后T2又请求封锁R1 ,由于T1已经封锁了R1,因此T2也只能等待T1释放R2上的锁,此时T1和T2都在等待对方先释放锁,因而形成死锁。,5.3 并发控制,图68,死锁一旦发生,系统效率将会大大下降,因而要尽量避免死锁的发生。,(1)一次封锁法:每个事务一次将所有要使用的数据全部依次加锁,并要求加锁成功,只要一个加锁不成功,表示本次加锁失败,则应该立即释放所有已加锁成功的数据对象,然后重新开始从头加锁。,预防死锁的方法有多种,常用的方法有两种:,一次加锁法,前面发生死锁的例子,可以通过一次加锁法加以预防。 事务T1启动后,立即对数据R1和R2依次加锁,加锁成功后,执行T1,而事务T2等待。 直到T1执行完后释放R1和R2上的锁,T2继续执行。这样就不会发生死锁。 一次加锁法虽然可以有效地预防死锁的发生,但也存在一些问题。 对某一事务所要使用的全部数据一次性加锁,扩大了封锁的范围,从而降低了系统的并发度。 数据库中的数据是不断变化的,原来不要求封锁的数据,在执行过程中可能会变成封锁对象,所以很难事先精确地确定每个事务所要封锁的数据对象,这样只能在开始扩大封锁范围,将可能要封锁的数据全部加锁,这就进一步降低了并发度,影响了系统的运行效率。,5.3 并发控制,5.3 并发控制,图68,(2)顺序封锁法:是预先对所有可加锁的数据对象规定一个加锁顺序,每个事务都需要按此顺序加锁,在释放时,按逆序进行。 例如对于前面发生的死锁,我们可以规定封锁顺序为R1、R2,事务T1和T2都需要按此顺序加锁。T1先封锁R1,再封锁R2。当T2再请求封锁R1时,因为T1已经对R1加锁,T2只能等待。待T1释放R1后,T2再封锁R1,则不会发生死锁。 顺序加锁法同一次加锁法一样,也存在一些问题。因为事务的封锁请求可以随着事务的执行而动态地决定,所以很难事先确定封锁对象,从而更难确定封锁顺序。即使确定了封锁顺序,随着数据操作的不断变化,维护这些数据的封锁顺序要需要很大的系统开销。,5.3 并发控制,上述两种在操作系统中广泛使用的预防死锁的方法并不很适合数据库的特点。 一般情况下,在数据库系统中,可以允许发生死锁,在死锁发生后可以自动诊断并解除死锁。 数据库系统中诊断死锁的方法与操作系统类似。,如果已经发现死锁,DBA从依赖相同资源的事务中抽出某个事务作为牺牲品,将它撤销,解除它的所有封锁,释放此事务占用的所有数据资源,分配给其他事务,使其他事务得以继续运行下去,这样就有可能消除死锁。 在解除死锁的过程中,抽取牺牲事务的标准是根据系统状态及其应用的实际情况来确定的,通常采用的方法之一是选择一个处理死锁代价最小的事务,将其撤销。 不重要的用户,取消其操作,释放封锁的数据,恢复对数据库所作的改变。,5.4 数据库的恢复,图68,一.数据库备份,数据库备份指定期或不定期地对数据库数据进行复制,可以将数据复制到本地机器上,也可以复制到其它机器上,备份的介质可以是磁带也可以是磁盘。 在制定备份策略时,应考虑如下几个方面: 备份的内容 备份数据库应备份数据库中的表(结构)、数据库用户(包括用户和用户操作权)、用户定义的数据库对象和数据库中的全部数据。而且还应该备份数据库日志等内容。 备份频率 不同的数据库管理系统提供的备份种类不同。通常情况下,数据库每 周备份一次,事务日志每日备份一次。对于一些主要的联机事务处理 数据库,数据库可每日备份一次,事务日志每隔数小时备份一次。,5.4 数据库的恢复,图68,二.数据库恢复的含义 虽然数据库系统中已采取一定的措施,来防止数据库的安全性和完整性的破坏,保证并发事务的正确执行,但数据库中的数据仍然无法保证绝对不遭受破坏,比如计算机系统中硬件的故障、软件的的错误,操作员的失误,恶意的破坏等都有可能发生,这些故障的发生影响数据库数据的正确性,甚至可能破坏数据库,使数据库中的数据全部或部分丢失。 系统必须具有检测故障并把数据库从错误状态中恢复到某一正确状态的功能,这就是数据库的恢复。,5.4 数据库的恢复,图68,三. 恢复策略,(1) 事务故障的恢复 事务故障是指事务在运行到正常结束前被终止,这时恢复子系统可以利用日志文件撤消此事务对数据库已进行的修改。 日志文件是用来记录事务对数据库的更新操作的文件。日志文件内容包括事务标识(标明是哪个事务)、操作类型(插、删或改)、操作前后的数据值等。目的是为数据库的恢复保留详细的数据。 恢复的过程为:反向扫描日志文件并执行相应操作的逆操作事务故障的恢复是由系统自动完成的,对用户是透明的。,数据库运行过程中可能会出现各种各样的故障,这些故障可分为以下三类:事务故障、系统故障和介质故障。根据故障类型的不同,应该采取不同的恢复策略。,5.4 数据库的恢复,图68,(2) 系统故障的恢复 系统故障是指系统在运行过程中,由于某种原因,造成系统停止运转,致使所有正在运行的事务都以非正常方式终止,要求系统重新启动。 引起系统故障的原因可能有:硬件错误如CPU故障、操作系统或DBMS代码错误、突然断电等。 系统故障的恢复是系统在重启时自动完成的,不需用户干预。 恢复过程为:正向扫描日志文件,找出故障发生前已提交的事务,将其重做;同时找出故障发生时未完成的事务,并撤消这些事务。,三.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 法学概论备考方法与试题及答案
- 软件设计师考试的创新思维与试题及答案
- 计算机二级VB掌握要点及试题及答案
- 企业评估法与风险控制分析试题及答案
- 公司战略中的数据管理试题及答案
- 企业管理中的综合风险评估与战略执行试题及答案
- 网络管理员考试互动平台试题及答案
- 2025年可持续战略与风险评估试题及答案
- 2025年软考设计师新考纲及试题及答案解读
- 软件设计师考试应试策略与试题及答案
- 2023年文印服务实施方案
- 2023年医学高级职称-眼科(医学高级)考试冲刺-历年真题演练带答案
- 财务岗位笔试试题附有答案
- 二次供水水箱清洗合同
- 医务科依法执业自查表
- (完整word版)企业对账函模板
- DB42-T 1107-2023 保温装饰板外墙外保温系统工程技术规程
- 领导干部任前谈话记录表
- 普外科常见问答题
- 医疗卫生事业单位面试题型及答题技巧
- 空间信息技术基础与前沿-河南理工大学中国大学mooc课后章节答案期末考试题库2023年
评论
0/150
提交评论