浅谈数据库的安全保护
1.数据库的安全性
1.数据库安全性的含义
数据库的安全性是指保护数据库以防止非法使用造成数据泄露,更改、或者破坏。
安全性问题包括
(1)法律、社会、伦理方面的问题。
(2)物理控制方面的问题。
(3)政策反面的问题。
(4)运行方面的问题。
(5)硬件方面的问题。
(6)操作系统安全性方面的问题.
(7)数据库系统本身的安全性方面的问题。
2.安全性控制的一般发方法
用户 DBMS 操作系统 数据库
实际上,如上图,安全性问题不是数据库啊系统独有的,所有计算机系统都存在这个问题。
在计算机系统中,安全措施是一级一级层层设计安全措施的。
1.用户标识和鉴定
数据库系统是不允许一个未经授权的用户对数据库进行操作的。
用户标识和鉴定的方法有多种,为了获得安全性的保障,往往是多种方法并用。
(1)用一个用户名或者用户标识符来表明用户的身份,系统以此来鉴别用户的合法性。
(2)常采用用户名(username)和口令(password)相结合的方法,系统通过和对口令来判断用户身份的真伪。
(3)在鉴别用户的身份时,系统提供一个随机数,用户根据自己预先约定的计算过程或者函数来计算,系统根据计算结果来判断用户身份的合法性。
2.用户存取权限的限制
用户存取权限是不同的用户对于不同的数据对象允许操作的权限。在数据库系统中,每个用户只能访问他有权限访问的数据,并执行有权使用的操作。因此数据库系统必须预先定义用户的存取权限。
存取权限由两部分构成
(1)数据对象
(2)操作类型
在数据库的系统中,定义用户的存取权限称为授权。系统权限是由DBA授予用户的。对象权限是由DBA或者数据库的创建者授予。
3.定义视图
为不同的用户定义不同的视图,可以限制不同用户的访问范围。
通过视图机制将要保密的数据对无权限存取这些数据的用户隐藏起来,从而自动的实现对数据库的一定程度的安全性保护。
但是,视图机制安全性保护不太精细,主要功能在于提供了数据的逻辑独立性
在实际中,视图机制往往与授权机制相结合使用。
4.数据加密
防止数据在数据库中存储和传输中失密的有效手段。
加密的基本思想是,根据一定的算法将原始数据加密成不可直接识别的格式,数据以米文德格式存储和传输。
加密的方法
(1)替换法。使用秘钥将明文中的每一个字符转换成密文中的字符。
(2)转换法。将明文种的字符按照不同的顺序重新排序。
5.审计
审计是一种监视功能,它更总记录有关数据的访问活动。
使用审计功能将用户对数据库的所有操作自动的记录下来,存放在特殊的文件中,即审计日志。
记录的内容一般有
(1)操作类型
(2)操作终端标识
(3)操作者标识
(4)操作时间和日期
(5)操作所涉及的相关数据
(6)数据的前象和后象
使用审计系统,会大大的增加系统的开销。
2.完整性控制
1.数据库完整性含义
数据库的完整性是指保护数据库中的数据的正确性、有效性和相容性防止错误的数据进入数据库造成无效的操作。
2.完整性规则的组成
1.触发条件。规定系统什么时候使用完整性规则来检查数据。
2.约束条件。规定系统检查用户发出的操作请求违背了什么样的完整性约束条件。
3.违约响应。规定系统如果发现用户发出的操作请求违背了完整性约束条件,应该采取一定的动作来保证数据库的完整性,即违约时要做的事。
完整性约束条件从时间上来分类,分为立即执行约束和延迟执行约束
(1)立即执行约束。在执行用户事务过程中,某一条语句执行完毕后,系统立即对数据的完整性进行检查。
(2)延迟执行约束。在整个事务执行结束后,在对约约束条件进行完整性检查,结果正确才能提交。
如果发现用户的操作违背了立即执行约束,则可以拒绝该操作,以保证数据库的完整性。但是如果发现用户的操作违背了延迟性执行约束,而又不知道是事务的哪个操作破坏了完整性,则只能拒绝整个事务,将数据库恢复到该事务执行前的初始状态。
3.完整性约束条件的分类
1.值的约束和结构的约束
1.值的约束
(1)对数据类型的约束
(2)对数据格式的约束
(3)对取值范围的约束
(4)对空值的约束
2.对结构的约束
(1)函数依赖的约束
(2)实体完整性的约束
(3)参照完整性的约束
(4)统计约束
2.静态约束和动态约束
1.静态约束
对数据库的每一个确定转态所应满足的条件,是反映数据库状态的合理性的约束。
2.动态约束
数据库从一种状态转换成另一种状态时,新旧之间应该满足的约束条件,动态约束条件反映的是数据库状态变迁的约束。
3.并发控制与封锁
1.数据库并发的含义
数据库的最大的特点就是数据共享,每个用户在数据库存取数据时可能是串行也可能是并行,即,每个时刻只有一个用户程序在运行,也有可能是多个用户并行的存取数据库。
串行操作意味着其他用户必须等到这个用户结束才能对数据库进行存取操作,如果一个用户涉及到大量数据的输入输出操作,则数据库大部分时间处于闲置的状态。因此,为了充分的利用数据库的资源。很多时候,数据库用户都是对数据库并行存取数据的,这样就会发生对个用户并发的存取同一数据的情况。如果对并发操作不加以控制,可能会产生不正确的数据,破坏数据库的完整性。
2.事务
1.定义
事务是数据库系统中执行的一个工作单位,它是由用户定义的一组操作序列的封装。一个事务可以是一组SQL语句、一条SQL语句或者是整个程序,一个应用程序可以包括多个事务。
2.事务的特征
并不是任意的数据库操作序列都可以成为事务。
事务的特征如下
(1)原子性
一个事务是一个不可分割的工作单位,在事务执行时,要么不做,要么全做,不允许完成部分事务。即使因为故障的原因而使事务未能完成,它执行过的事务也将会被取消。
(2)一致性
事务对数据库的作用是数据库从一个一致状态转变到另一个一致状态。所谓的数据库的一致状态就是指数据库中的数据满足完整性约束条件。
(3)隔离性
如果多个事务并发的执行,应该像多个事务单独的执行一样,一个事务的执行不能被其他事务所干扰。
(4)持久性
持久性是指一个事务一旦被提交它对数据库中数据的改变就是持久的,即使数据库因故障而受到破坏,DBMS也应该能够恢复。
3.并发操作与数据的不一致性
当一数据库中有多个事务并发运行时,如果不加以适当的控制就会产生数据的不一致性。主要有
(1)丢失更新
(2)污读
(3)不可重读
4.封锁
实现并发控制的方法主要有封锁技术和时标技术
1.封锁技术
所谓的封锁技术就是当一个事务在对某个数据对象(可以是数据项、数据记录、数据集或者整个数据库)进行操作之前,必须获得相应的锁,以保证数据操作的一致性和正确性。
基本的封锁类型有排他型封锁和共享型封锁
(1)排他型封锁
又称写封锁,简称X封锁。采用的原理是禁止并发性操作。当事务T对某个数据对象R实现X封锁的后,其他事务要等T解除X封锁之后,才能对R进行封锁。
(2)共享型封锁
又称读封锁,简称S封锁。采用的原理是允许其他事务对同一数据对象进行查询,但是不能对该数据对象进行修改。即当事务T对数据对象R加S封锁的后,其他事务只能对R数据对象加S锁而不能加X锁,直到T释放R上的S锁。
2.封锁协议
封锁协议对封锁方式规定不同的规则。在不同的程度上对正确控制并发操作提供了一定的保证。
三级封锁协议
(1)一级封锁协议
事务T在修改数据对象之前必须对其加X锁,直到事务结束。
(2)二级封锁协议
在一级封锁协议的基础之上另外加上事务T在读取数据R之前必须先对其加S锁,读完后释放S锁。
(3)三级封锁协议
在一级封锁协议的基础之上,另外加上事务T在读数据R之前必须加上S锁,读完后不释放S锁,直到事务T结束之后才释放。
3.封锁粒度
封锁粒度是封锁的单位。根据对数据对象的不同处理,封锁的对象可以是这样的一些逻辑单元:字段,记录,表和数据库等。封锁的数据对象大小称为封锁粒度。
封锁粒度越小,系统中能够被封锁的对象就越多,并发度就越高,但是封锁机构越复杂,系统的开销就越大。相反,封锁粒度越大,系统中能呗封锁的对象就越少,并发度就越低,封锁机构简单,相应系统的开销就小。
4.死锁和活锁
(1)活锁
当某个事物对某一数据进行排他型封锁的时候,由于其他事物对该数据的操作而使得这个事物处于永久等待状态这种状态称为活锁。
避免活锁的简单方法就是采用先来先服务的策略。按照请求封锁的次序对事物排队。
(2)死锁
在同时处于等待状态的两个或者多个事务中,其中的每一个在它能够进行之前,都等待着某个数据,而这个数据已被他们中的某个事物封锁,这种状态称为死锁。
产生死锁的必要条件
a.互斥条件:一个数据对象一次只能被一个事务使用,即多数据封锁采用的是排他方式。
b.不可抢占条件:一个数据对象只能被所占有它的事务所释放,不能被其他事物所释放。
c.部分分配条件:一个事务已经封锁给它的数据对象,但任然要求封锁其他数据
d.循环等待条件“允许等待其他事务释放数据对象,系统处于加锁请求相互等待转态。
死锁的预防
1.一次加锁法。
每个事务必须将所有要用到的数据一次加上锁,并要求加锁成功,只要有一个加锁失败,表示本次加锁失败,并且释放所有加锁成功的数据对象,然后重新开始加锁。
一次加锁扩大了加锁的范围,虽然可以有效地预防死锁,但是降低了系统的并发度。
2.顺序加锁法
预先对所有可加锁的数据对象规定一个加锁顺序,每个事务都需要按照此顺序加锁,在释放的时候按照逆序进行。
4.数据库的恢复
1.数据库恢复的含义
系统必须具有检测故障并且把数据从错误的状态中恢复到某一正确状态的功能,这就是数据库的恢复功能。
2.数据库恢复的原理及其实现的技术
恢复的原理就是利用数据冗余。
数据库中任何被破坏或者不正确的数据都可以利用存储在其他地方的冗余数据来修复。所以数据库恢复系统应该提供两种功能,即冗余数据的生成和冗余重建
1.冗余生成
1.登记日志文件
日志文件是用来登记事务对数据库更新操作的文件。对数据库的每次的修改,都会将被修改项目的旧值和新值写在一个叫做运行日志的文件中,目的是为数据库的恢复保留详细的数据。
日志文件包含的内容
(1)更新数据库事务的标识
(2)操作的类型
(3)操作对象
(4)更新前数据的旧值
(5)更新后数据的新值
(6)事务处理中各个关键的时刻
登记日志的原则
(1)至少要等到相应的运行记录撤销部分已经写入日志文件中以后,才允许改啊事务向物理数据库写入记录。
(2)直到事务所有运行记录的撤销和重做两部分都已经写入日志文件以后,才允许事务完成提交处理。
2.数据转储
数据转储就是定期的将整个数据库复制到多个存储设备(如磁带,磁盘等)保存起来的过程,是数据库恢复过程中采用的基本手段。转储的数据称为后备副本,在数据库遭到破坏的时候,可以利用后备副本对数据库加以有效的恢复。
转储十分耗费时间和资源,不宜频繁的进行。
5.数据库的故障和恢复策略
1.事务故障及其恢复
事务故障表示是由非预期的、不正常的程序结束造成的故障。造成程序非正常结束的原因有
(1)输入数据错误
(2)运算溢出
(3)发生死锁
为了消除该事务对数据库的影响,要利用日志文件中记载的信息强行回滚该事务,将数据库恢复到初始转态。这类恢复操作叫做事务撤销,具体做法
(1)反向扫描日志文件,查找该事务的更新操作
(2)对该事物的执行操作执行反操作。
2.系统故障及其恢复
系统在运行的过程当中,由于某种原因造成系统停转,致使所有正在运行的事物都一非正常的方式进行终止。要求系统重新启动。引起系统故障的原因有
(1)硬件错误
(2)操作系统或者DBMS代码错误
(3)突然断电
……
系统故障对数据库产生的影响
(1)一些未完成的事物对数据库的更新一写入数据库,这样,系统重启之后要强行撤销未完成的事务,清除事务对数据库做的修改。
(2)已提交的事务对数据库的更新结果还保留在缓冲区中,尚未写到磁盘的物理数据库中,这也使得数据库处于不一致的状态中。
因此,在恢复方面,既要撤销所有未完成的事务,还要重做所有已经提交的事务。
(1)正向扫描日志文件,查找尚未提交的事务,将其事务标识计入撤销队列。同时查找已经提交的事务将其事务标识计入重做队列。
(2)对撤销队列中的各个事务进行撤销处理。
(3)对重做队列中的各个事务进行重做处理。
3.介质故障及其恢复
在系统运行的过程中,由于辅助存储器介质受到破坏,使存储在外村中的数据全部丢失或者部分丢失。
这类故障发生的几率小于前两者。
解决方法
(1)装入最新的数据库后备副本使数据库恢复带最近一次转储的可用状态。
(2)装入最新的日志文件副本,根据日志文件中的内容重做已经完成的事务。
封锁粒度是封锁的单位。根据对数据对象不同的处理