一、数据库的安全性
数据库的安全性是指保护数据库以防止不合法使用造成的数据库泄露、更改或破坏,包含计算机系统的安全和数据库系统的安全
-
用户标识与鉴定
用户标识是让用户标识自己的身份,系统记录所有合法用户的标识,以便于在用户登录系统是对身份标识进行鉴定 -
访问控制
访问控制是按照用户身份基期所归属的某项定义组来限制用户对某些信息的访问
定义用户权限:将用户权限定以后登记到数据字典中,形成授权规则
合法权限检查:当用户发出数据存储操作的请求后,数据库管理系统查找数据字典,根据安全规则进行合法权限检测 -
安全审计
审计功能是数据库管理系统达到 C2 以上安全级别必不可少的一项指标。审计功能就是把用户对数据库的所有操作自动记录下来放到审计日志中:- 审计常用于审查可以活动
- 审计用于监视和收集关于指定数据库活动的数据
-
加密
对敏感数据进行加密存储是防止数据泄露的有效手段,一个好的数据库加密系统应该满足如下要求:- 足够的加密强度
- 加密后的数据库存储量没有明显增加
- 加密解密速度足够快
- 加解密对数据库的合法用户操作透明
- 灵活的密钥管理机制即密钥存储安全
二、数据库的完整性
数据库的完整性是指数据的正确性和相容性,或者说完整性是防止数据库中存在不正确的数据
- 完整性约束条件:
完整性约束条件是完整性控制的核心,通常可以分为以下六类:
- 静态列级约束:对一个列的取之于进行约束
- 静态元组约束:规定一个元组的各个列之间的约束
- 静态关系约束:规定一个关系的各个元组之间或若干关系之间的约束
- 动态列级约束:规定修改列定义或列值时应该满足的约束
- 动态元组约束:规定修改谋远祖的值时新旧值之间应该满足的约束
- 动态关系约束:规定关系发生变化时,新旧关系状态之间的约束
三、事务管理
事务Transaction,是指作为一个基本工作单元执行的一系列SQL语句的操作,要么完全地执行,要么完全地都不执行
- 事务的四大特性 ACID
-
原子性(Atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 -
一致性(Consistency)
数据库总是从一个一致性的状态转换到另一个一致性的状态。 -
隔离性(Isolation)
一个事务所做的修改在最终提交以前,对其他事务是不可见的 -
持久性(Durability)
一旦事务提交,则其所做的修改会永久保存到数据库
-
四、并发操作
并发操作是指在多用户共享的系统中,多个用户同时对同一数据进行操作的情况
-
封锁类型
- 排它锁(X锁)
排它锁
又称为写锁(eXclusive lock,简记为X锁),若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁 - 共享锁(S锁)
共享锁
又称为读锁(Share Lock,简记为S锁),其他用户可以并发读取数据,但任何事务都不能获取数据上的排他锁,直到已释放所有共享锁
- 排它锁(X锁)
-
活锁与死锁
- 活锁(livelock)
活锁
指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试—失败—尝试—失败的过程。处于活锁的实体是在不断的改变状态,活锁有可能自行解开 - 死锁(deadlock)
死锁
是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程
- 活锁(livelock)
五、数据备份与恢复
数据库的关键技术在于建立冗余数据,即备份数据,从而保证在系统出现故障后能够及时使数据库恢复到故障前的正确状态
-
故障分类
- 事务故障:运算溢出、并发事务发生死锁而被选中撤销该事务
- 系统故障:系统故障称为软故障,是造成系统停止运行,必须重启的情况
- 介质故障:也称为硬故障,如磁盘损坏、磁头碰撞、瞬时强磁干扰
-
备份分类
- 完全备份:可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份
- 差异备份:备份上一次完全备份后发生变化的所有文件。差异备份指备份只备份有标记的内容,备份后不标记为已备份文件。差异备份所需时间短,占用空间少,可以每天执行
- 增量备份: 针对上一次备份而言的(不论哪种备份),备份上一次备份后所有发生变化的文件。它只备份有标记的选中的文件,备份后会清楚标记。占用时间少但是恢复时间长,可每天备份
- 按需备份:根据临时需要,有选择地进行数据备份
-
恢复措施
事务故障恢复
1. 反向扫描日志文件,查找事务的更新操作
2. 对该事务的更新操作执行逆操作,将日志记录更新前的值写入数据库
3. 继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
4. 直到读到该事务的开始标记,事务故障就恢复完成
系统故障恢复
1. 正向扫描日志文件,找出故障发生前已经提交的事务,将事务标识记入重做队列。同时找出故障发生时尚未完成的事务,将其事务标识记入撤销队列
2. 反向扫描日志,对每个撤销事务的更新执行逆操作
3. 正向扫描日志,对每个重做事务执行日志文件登记的操作
介质故障的恢复
1. 装入最新的数据库后备份
2. 装入相应的日志文件副本,重做已完成的事务