1/1数据库系统原理与应用提纲2020-1-9零、数据库安全保护一、概述1.为什么要保护?1)共享!2)非法用户,窃取破坏数据3)非法数据,破坏数据的一致性4)并发操作,破坏数据正确有效5)数据故障,丢失数据2.如何保护?1)非法用户:认证2)非法数据:完整性约束3)并发操作:封锁4)数据恢复:备份+日志文件3.谁来保护?1)DBMS4.通过哪几方面来保护?二、数据库的安全性控制1.概述1)什么是安全?(1)防火、防盗、防震(2)防掉电、防破坏(3)人员审查2)DBMS对数据库的安全保护(1)数据泄漏(2)数据破坏3)OS应该保证DB经DBMS安全访问4)数据库的安全模型2.访问控制(用户的标识和鉴别)1)利用用户信息鉴别(1)Password1.自己容易记忆,别人不易猜出2.由6~16个字符组成3.限定字母和数字的混合4.经常更换密码5.密码输入时不回显6.多次尝试失败封锁7.密码以不可逆法加密保存(2)对暗语1.用户编号N2.系统日期D3.N+D=?2)利用用户物品鉴别(1)物品1.钥匙2.磁卡(2)缺点1.需硬件装置配合2.易丢失和被盗3)利用用户特征鉴别(1)特征1.签名2.虹膜3.声波纹4.指纹(2)优点1.非常可靠(3)缺点1.装置复杂3.存取控制1)作用(1)限制用户的访问范围2)授权(1)定义1.给予用户对数据库一定的访问权限(2)数据库用户1.DBA2.一般数据库用户(3)系统权限(4)对象权限1.授予对某些数据对象进行操作的权限2.可以由DBA授予,也可由数据对象的创建者授予(5)授权命令1.GRANT(1)GRANTUSAGEON*.*TOzhang3@localhostIDENTIFIEDBY'password'(2)GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROPONdb1.*TOzhang3@localhost2.REVOKE(1)REVOKEUPDATE,DELETE,DROPONdb1.*FROMzhang3@localhost(6)实现1.DBMS为每个数据库设立一张授权表3)视图定义(1)EMP(num,name,sex,age,dept,salary,address,telno)(2)EMP1(num,name,dept)4)查询修改(1)修改存取谓词1.加条件2.加终端号3.加系统时钟(2)加条件1.原始表:EMP(num,name,sex,age,dept,salary,address,telno)2.原始查询:SELECT*FROMEMP3.修改查询:SELECT*FROMEMPWHEREdept=’CS’4.数据加密1)原由(1)窃取存储设备(2)通过通讯线路窃听2)方法(1)数据加密存储(2)使用时解密3)缺点(1)增加了系统开销(2)降低了数据库的性能4)场合2/2数据库系统原理与应用提纲2020-1-9(1)只在保密性要求很高时采用5.跟踪审查(审计)1)定义(1)是一种监视措施(2)跟踪记录某些保密数据的访问活动(3)报告有窃密企图的操作(4)由DBA和数据所有者控制2)跟踪审查内容(1)操作类型(2)操作终端标识(3)操作者标识(4)操作日期(5)操作数据(6)数据前象和后象3)作用(1)找出非法操作者(2)恢复数据4)相关命令(1)Audit1.AUDITSELECT,INSERT,DELETE,UPDATEONstudentWHENEVERSUCCESSFUL(2)Noaudit1.NOAUDITALLONstudent三、数据库的完整性控制1.概述1)什么是完整性控制?(1)保护数据库中数据完整(2)正确性(合法性)1.数值型数据只能由数字组成(3)有效性1.数据是否在定义的有效范围2.月份为1~12的整数(4)一致性(相容性)1.表示同一个事实的两个数据应相同(5)防止错误的数据进入数据库造成无效的操作2)安全性和完整性的区别(1)安全性:防止非法用户和非法操作(2)完整性:防止合法用户向数据库中加入不合语义的数据3)如何保证数据的完整性?(1)DBA向DBMS提出一组完整性规则2.完整性规则的组成1)完整性约束条件:规定系统要检查什么样的错误2)触发时机:规定系统什么时候使用规则进行检查3)违约响应:如果出错应该怎么办3.定义完整性约束条件1)数据值的约束(1)规定某属性值的类型和格式1.姓名必须是字符型,长度为82.学号的前两位为入学年份,中间两位为院系编号,后四位为顺序编号(2)规定(组合)属性的取值范围1.职工年龄在18~60之间2.月份在1~12之间(3)对空值的约束1.是否允许空值(4)规定某属性的值的集合必须满足某种统计条件1.规定职工的奖金不得超过该部门平均工资的30%2)结构的约束:对数据之间联系的约束(1)同一关系的不同属性之间应满足一定的约束条件1.函数依赖关系2.实体完整性约束(1)关系键的属性列必须唯一(2)其值不能为空或部分为空(2)不同关系有联系的属性之间也应满足一定的约束条件1.参照完整性约束(1)外部键的值应该能在参照关系的主键值中找到(2)参照完整性规则1.更新方式:级联、限制、忽略2.删除方式:级联、限制、忽略3.插入方式:限制、忽略4.检查完整性控制1)立即执行约束:某一更新语句操作执行完成后,系统立即对此数据进行完整性约束条件检查2)延迟执行约束:在整个事务执行结束后,再对约束条件进行完整性检查,结果正确后才能提交5.执行完整性控制1)拒绝操作四、数据库的并发控制1.概述1)事务(1)定义1.数据库的逻辑工作单位2.用户定义的一组操作序列(2)例子1.一条SQL语句2.一组SQL语句3.整个程序(3)事务定义语句1.BEGINTRANSACTION(1)事务开始2.COMMIT(1)提交事务的所有操作3.ROLLBACK(1)回滚(2)撤消事务中的操作,回滚到事务开始时的状态(4)事务具有的四个特性1.原子性(1)一个事务是一个不可分割的工作单位(2)事务中包括的诸操作要么都做,要么都不做2.一致性(1)事务必须是使数据库从一个一致性状态转换到另一个一致性状态(2)只要成功提交事务,数据库就能处于一致性状态(3)公司划帐例子3.隔离性3/3数据库系统原理与应用提纲2020-1-9(1)一个事务的执行不能被其他事务干扰(2)并发执行的各个事务之间不能互相干扰4.持续性(永久性)(1)成功提交事务对数据的改变应该是永久性的(2)接下来的操作或故障不应该对其有任何影响2)并发操作不一致性的例子(1)并发售票操作1.两地售票点同时发售最后一张车票(2)并发存取款操作3)并发操作不一致性的表现(1)丢失更新(修改)1.一事务的更新破坏了另一事务的更新结果(2)污读(读“脏”数据)1.事务甲更新了数据x2.事务乙读取了更新后的数据x3.事务甲撤消更新,数据x恢复原值(ROLLBACK)4.事务乙得到的数据与数据库内容不一致(3)不能重读1.事务甲读取数据x2.事务乙读取x并更新x/删除了部分记录/插入了一些记录3.事务甲再次读取x以进行校核,得到不一致结果2.并发操作的调度1)串行调度2)串行调度与并发操作(1)一个事务执行时禁止其他事务的执行(2)可串行性是并发事务正确性的唯一准则(3)几个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结论相同3)结论(1)最简单的调度策略(2)不能充分共享数据库资源(3)实际上不可行3.封锁1)目的(1)保证能够正确地调度并发操作2)概念(1)某事务对某个数据操作之前,先对其加锁,其他事务不能更新加锁的数据,直到释放加锁为止3)封锁类型(1)排他式封锁(exclusivelock,X锁,写锁)1.某事务对数据加上排他锁,该事务可读写数据,其他事务不能再对数据加任何类型的锁,也就不能读写该数据,只有等待开锁2.禁止并发操作(2)共享性封锁(sharelock,S锁,读锁)1.允许其他事务对同一数据进行检索(读),但不得对同一数据进行修改操作2.其他事务对加了共享锁的数据可读不可写(3)封锁类型的相容矩阵4)封锁的粒度(1)定义1.封锁的数据目标的大小(2)数据目标1.数据库2.关系(表)3.元组(记录)4.字段(属性)(3)性能衡量1.封锁粒度小,并发度□,封锁机构□,系统开销□2.封锁粒度大,并发度□,封锁机构□,系统开销□(4)实际选择1.事务处理多个关系的大量元组,以□为封锁单位2.事务处理大量元组,以□为封锁单元3.事务处理少量元组,以□为封锁单位5)封锁协议(1)协议内容1.何时申请封锁2.封锁的类型:排他锁、共享锁3.封锁的持续时间(何时释放封锁)(2)三级封锁协议(保证数据一致性)1.一级封锁协议(1)事务在修改数据之前先加排他锁(读数据时不加锁),直到事务结束才释放(2)可防止丢失修改(更新)(3)不能保证可重复读和污读2.二级封锁协议(1)在一级封锁协议之上(2)在读取数据前加共享锁,读完后即释放共享锁(3)可防止丢失更新(4)可进一步防止污读(5)不能保证可重复读3.三级封锁协议(1)在一级封锁协议之上(2)读取数据之前加共享锁,直到事务结束才释放(3)进一步防止了可重复读4.小结(1)区别1.什么操作需要申请封锁2.何时释放锁(封锁持续时间)(2)比较表(3)两段锁协议(保证并行调度可串行性)1.两个阶段(1)扩展阶段,获得封锁1.在对任何数据进行读写操作之前,事务首先要获得对该数据的封锁(2)收缩阶段,释放封锁1.在释放一个封锁之后,事务不再获得任何其他封锁2.例子(1)LOCKA…LOCKB…LOCKC…UNLOCKB…UNLOCKA…UNLOCKC(2)LOCKA…UNLOCKA…LOCKB…LOCKC…UNLOCKC…UNLOCKB3.结论(1)若并行执行的所有事务均遵守两段锁协议,则对这些事务的所有并行调度策略都是可以串行化的(2)所有遵守两段锁协议的事务,其并行执行的结果一定是正确的4.活锁和死锁1)活锁(1)定义1.事务1封锁了数据对象R2.事务2也请求封锁R,于是对待3.事务3也请求封锁R,于是也对待4.事务1解锁后,系统首先批准了事务3,事务2只好等待5.事务4也请求封锁R,于是也对待6.事务3解锁后,系统又批准了事务4,事务2只好又对待4/4数据库系统原理与应用提纲2020-1-97.事务2有可能就这样永远地等待下去……(2)避免活锁1.采用先来先服务的策略(队列)2)死锁(1)定义1.当两个或多个用户都在同时等待对方释放自己希望加锁的数据对象时,其中的每一个都等待对方释放封锁时,就会出现死锁(2)例子1.甲事务打开了A表,同时乙事务打开了B表2.接着甲事务希望打开B表,而乙事务希望打开A表3.形成两事务都在同时等待对方释放自己希望加锁的表(3)形成死锁的条件1.采用了排他式的封锁2.在已经加锁了一个数据的情况下,想继续加锁另一个数据,但却不释放原有的数据3.对加锁的数据不使用,却又不释放给其他程序使用4.允许程序等待其他程序释放数据,加锁请求形成互相等待的状态(4)死锁的防止1.一次加锁法(1)一个事务一启动就对它所要使用的数据目标全部依次加锁,并要求一次加锁成功2.顺序加锁法(1)预先对所有可以加锁的数据目标规定一个加锁顺序(2)每个用户的任何事务都必须严格地按照这个顺序对数据执行加锁(3)在释放时按照反向顺序进行(5)死锁存在的问题1.扩大封锁范围2.数据对象顺序的变化3.无法事先预料(6)解决死锁的办法1.建立事务等待图2.撤消不重要的事务5.小结1)数据库→共享→并发控制2)数据的共享程度愈高,数据的一致性就愈□3)施加的并发控制愈多,数据的共享性就愈□4)施加的并发控制愈多,数据的一致性就愈□5)数据库的并发控制以事务为单位,通常采用封锁机制。6)封锁会带来活锁和死锁问题。五、数据库的恢复1.故障分类1)事务故障(1)输入错误的数据(2)运算溢出(3)违反了某些完整性限制(4)某些应用程序的错误(5)并行事务发生死锁2)系统故障(1)OS代码错误(2)DBMS代码错误