数据库原理及应用(十三)安全性、并发、恢复

数据库的安全性

        安全性:防止用户非法使用数据造成的数据泄露、更改或破坏

        数据保密:用户合法的访问到这些数据库能否对这些数据保密(法律法规)

        安全性控制:尽可能的杜绝可能的数据库非法访问

       安全性控制的一般方法

                用户标识和鉴定

                        系统提供的最外层安全保护措施

                        用户名/口令

                        约定好一个计算过程或函数

                                系统提供随机数,用户根据事先约定的算法进行计算

                存取控制

                        功能:用户只能访问其有权存取的数据

                        组成:        定义存取权限、检查存取权限

                        用户权限和合法性检查一同组成了DBMS的安全子系统

                        存取权限:        数据对象、操作类型

用户名数据对象名允许的操作
Zero关系StudentSELECT
Zeta列Sc.SnoALL

                                编译后的授权存放在数据字典

                        存取权限:

                                过程                用户/DBA将授权决定告知系统(GRANT和REVOKE完成)

                                                        DBMS将授权结果存入数据字典

                                                        用户操作请求时,由DBMS根据授权情况决定是否执行请求

                        授权粒度:数据库、表、属性列、行

                DCL存取权限管理

                        授权:

grant SELECT on table Student to U1--将Student的查询权限赋予U1

grant ALL PRIVILEGES on table Student,Course to U2,U3--将两个表的所有权限赋予U2和U3

grant SELECT on table Sc to PUBLIC--将Sc的查询权限赋予所有用户

grant UPDATE(Sname),SELECT on table Student to U4--将查询表和修改学生姓名的权限赋予U4

grant INSERT on table Sc to U5 with grant option--将权限赋予U5并允许其向其他用户授权

                        权限收回:

revoke UODATE(Sname) on table Student from U4--收回U4的学生姓名修改权限

                        收回权限会收回此用户的转授权对象的权限

                视图

                        视图提供数据独立性、一定程度上起到安全保护功能

                审计

                        系统自动将用户对数据库的所有操作记录在审计日志

                        C2以上安全级别的DBMS必须具有审计功能

                        DBA可以根据安全性需求,打开/关闭审计功能

                        审计技术是预防手段(不同于用户识别和坚定、存取控制、视图等强制性机制

                密码存储

                        数据加密:防止数据库中的数据在存储和传输中失密

                        数据加密一般作为可选特征

数据库的并发控制

        事务是并发控制和恢复的基本单位

        定义事务的两种方式

                显式方式、隐式方式

                显式定义事务

BEGIN TRANSACTION--事务开始
    SQL1
    SQL2
    ...
COMMIT--事务正常结束,提交所有语句
ROLLBACK--事务回文结束,回滚事务的所有操作

        事务的特性

                原子性:事务中的操作要么全部执行、要么全部不执行(不可分)

                一致性:事务执行的结果必定让数据库:一致性状态 --> 一致性状态(不是一个一致)

                隔离性:一个事务的执行不能被其他事务干扰(并发执行的事务之间不能相互干扰)

                持久性:事务提交后对数据库的事务改变是永久的

        事务的并发执行

                串行执行

                        每个时刻只有一个事务运行

                        缺点:不能充分利用资源,不能发挥数据库共享资源的特点

                交叉并发

                        并行的事务轮流交叉运行,是单处理机系统中的并发方式

                同时并发

                        作用于多处理机系统中,可以同时运行多个事务

                事务并发执行带来的问题:破坏事务的隔离性和数据库的一致性,解决此问题要求DBMS必须提供并发控制机制

                        事务并发带来的数据不一致性:     丢失修改(写入的数据被覆盖了)

                                                                                不可重复读(读到的数据被修改/删除/插入了)

                                                                                读“脏”数据(读数据后数据修改被撤销了)

        并发事务的调度

                将所有事物串行起来的策略一定是正确的调度策略

                可串行化的调度,串行的顺序不同时,结果也会不同;但是由于不会让数据库置于不一致状态,故可认为是正确的

                可串行性化是并行事务正确性的唯一准则

                可串行化示例:假设客户端C1发布了事务T1,T2;客户端C2发布了事务T3,T4;试问有多少种可串行化的调度顺序

                        提示:T1必须先于T2,T3必须先于T4

                        1.T1,T2,  T3,T4                T1,T3,T4,T2

                        2.T3,T4,  T1,T2                T3,T1,T2,T4

                        3.T1,T3,T2,T4                  T3,T1,T4,T2

        封锁

                封锁:事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁

                加锁后事务T就该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象

                封锁类型        

                                          排他锁(X锁,写锁)

                                          共享锁(S锁,读锁)

                        排他锁:

                                A加上X锁后,仅T1允许T1对A进行读取和修改

                                A加上X锁后,其他事务不能对A施加任何类型的锁,直到A上的X锁被释放

                        共享锁:

                                A加上S锁后,所有事务(包括T1)仅能对A进行读操作(不允许修改)

                                A加上S锁后,其他事务只能对A施加S锁

                封锁粒度

                        X锁和S锁都可以施加在一个数据对象/逻辑单元,大到整个数据库,小到某个属性

封锁粒度被封锁的对象并发度系统开销

                        选择封锁度时,必须考虑开销并发度

                        封锁粒度的一般原则:        

需求粒度
大量元组关系
多个关系的大量元组数据库
少量元组元组

                封锁协议

                        何时申请X锁或S锁、持锁时间、何时释放

                        三级封锁协议--保证数据一致性

                                一级封锁协议:事物T修改数据前必须对其加X锁,直到事务结束才能释放

                                        防止丢失数据更新,若仅修改则不需要加锁

                                二级封锁协议:一级封锁协议基础上,事务T在读取数据前必须对其加S锁,直到读完释放S锁

                                        防止丢失修改读“脏”数据

                                三级封锁协议:一级封锁协议基础上,事务T在读数据之前必须对其加S锁,直到事务结束才释放

                                        防止丢失修改、读“脏”数据,不可重复读

                        两段封锁协议--保证并行调度可串行性

                                1.在对任何事务进行读、写之前,事务先要获得对该数据的封锁(扩展阶段)

                                2.在释放一个封锁之后,事务不再获得任何其他封锁(收缩阶段)

                                遵守两段锁协议的事务都是可串行化的,执行结果一定是正确

                死锁和活锁

                        活锁:系统使某个事务一直处在等待,永远等不到封锁的机会

                                解决:采用先来先服务的策略

                        死锁:两个事务要求锁定对方的资源,但是其需要获得锁定后才能解除自身锁定,造成无限等待

                                预防:(不可能杜绝死锁)

                                        一次封锁法

                                                要求每个事务一次性将所有要加锁的数据全部加锁,否则就不能执行(降低并发度、难以事先确定封锁对象)

                                        顺序封锁法

                                                预先对数据对象规定一个封锁顺序,所有事务都按照顺序实行封锁(维护成本高,难以实现)

                                诊断与解除:由DBMS定期检测系统中是否存在死锁,如果检测到死锁,就要设法解除

                                        超时法:一个事务等待时间超过了门限,就认为发生了死锁(可能误判)

                                        等待图法:用事务等待图(有向图)动态反映所有事务的等待状态,DBMS定期检测事务等待图,如果发生回路,则说明发生死锁,系统会解除代价最小的一个事务

故障与恢复

        数据库的可恢复性:将数据库从被破坏、不正确的状态恢复到一个正确的状态

                                        各个事务中的操作要么全做、要么全不做

        故障

                事务故障(破坏数据库一致性)

                        某个事务未正常运行至终点

                        常见原因:输入数据有误、运算溢出、违反了完整性约束、程序出错、发生死锁

                系统故障(破坏数据库一致性)

                        整个系统的非正常运行,导致正在运行中的事务全部不正常终止

                        内存中的数据缓冲区信息全部丢失,外部存储设备上的数据不会受影响

                        常见原因:操作系统/DBMS代码错误、操作员误操作、硬件错误、停电

                介质故障(破坏数据库本身)

                        破坏性最大

                        常见原因“磁盘损坏、磁头碰撞、操作员误操作、瞬时强磁场干扰

        恢复

                恢复技术的原理:利用存储在系统其他地方的冗余数据来修复或重建数据库

                恢复技术的关键:1.如何建立冗余数据:数据转储、登记日志文件

                                             2.如何利用冗余数据实施恢复

                数据转储

                                DBA将整个数据库复制到另一个介质上保存起来(后备副本、后援副本)

                                用途:供介质故障的时候使用

                        静态转储:转储时无运行中的事务(转储操作开始时,数据库处于一致性状态)

                                缺点:降低了数据库的可用性

                        动态转储:转储操作与用户事务并发

                                缺点:不能保证副本中数据的正确有效

                                恢复:重装副本+动态转储期间的日志文件恢复

                        海量转储:整个库转储

                        增量转储:只转储上次更新过的数据

                日志文件

                        记录事务对数据库更新操作的文件

                        格式:        1.以记录为单位的日志文件

                                            2.以数据块为单位的日志文件

                        内容:        1.事务开始标记

                                            2.事务结束标记

                                            3.事务所有的更新操作

                        基于记录的日志文件:        事务标识、操作类型、操作对象、更新前的旧值、更新后的新值

                        基于数据块的日志文件:        事务标识、更新前整个数据块的值、更新后整个数据块的值

                        等级原则:严格按照执行次序登记;必须先写日志文件、后写数据库

                恢复策略

                        事务故障的恢复策略

                                由系统撤销(UNDO)此事务修改

                        系统故障恢复

                                撤销故障发生时未完成的事务

                                重做已完成的事务

                        介质故障的恢复

                                利用转储副本和日志文件将数据库恢复

                                1.重装最近转储的数据库副本和相关的日志文件副本

                                2.执行系统提供的恢复命令

        复制

                数据库复制

                        复制提高数据库容错性、主要用于分布式结构的数据库

                        数据库出现故障时,系统利用副本对其进行联机恢复,恢复期间数据库用户可以继续访问数据库副本(副本和主数据库同等地位)

                        数据库复制的方法:对等复制:主副数据库同等地位,可以互相复制

                                                        主/从复制:数据从主数据库复制到从数据库(更新数据只能在主数据库进行、从数据库可以提供用户读取数据。主数据库出现问题时,更新数据库会转移到其中一个副数据库上)

                                                        级联复制:从主数据库复制的数据再次复制到其他数据库

                        要求:     数据库复制必须对用户透明

                                        所以数据库必须保持事务的完整性

                                        系统必须提供控制冲突的方法

                数据库镜像

                        系统自动将整个数据库或其中的关键数据复制到另一个磁盘上,系统自动保证镜像数据与主数据保持一致性

                        出现介质故障时,系统自动利用镜像磁盘数据对数据库进行恢复(不需要关闭系统)                未出现故障时,也可以在一个事务对数据加X锁时提供其他事务的读取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值