文章目录
- 前言
- 数据库安全保护的内容
- 5.1 数据库的安全性
- 5.2 完整性控制
- 5.2.1 数据库完整性的含义
- 5.2.2 完整性规则的组成
- 5.2.3 完整性约束条件的分类
- 5.2.4 数据完整性的实施
- 5.3 并发控制与封锁
- 5.3.1 数据库并发性的含义
- 5.3.2 事务
- 5.3.3 并发操作与数据的不一致性
- 5.3.4 封锁
- 5.4 数据库恢复
- 5.4.1 数据库恢复的含义
- 5.4.2 数据库恢复的原理及其实现技术
- 5.4.3 数据库的故障和恢复策略
- 总结
- 参考资料
- 作者的话
前言
《数据库原理及应用教程(第4版 | 微课版)》第5章:“数据库安全保护”的学习提纲。
数据库安全保护的内容
- 安全性控制
- 完整性控制
- 并发性控制
- 数据库恢复
5.1 数据库的安全性
安全性措施:
- 用户标识和鉴定
- 用户存取权限控制
- 定义视图
- 数据加密
- 审计
SQL Server 2012的安全模型1:
- 第一层:服务器安全管理(服务器级别)
- 第二层:数据库安全管理(数据库级别)
- 第三层:数据库对象安全管理(数据库对象级别)
SQL Server 2012的安全模型2:
- 用户:用户账号(服务器级别),数据库账号(数据库级别)
- 角色:服务器角色(服务器级别),数据库角色(数据库级别)
- 权限:系统权限(数据库级别),对象权限(数据库对象级别)
5.2 完整性控制
5.2.1 数据库完整性的含义
- 正确性:数据的值和型对应合法。如年龄是数字型,只能用数字值表示
- 有效性:数据在定义的有效范围。如月份只能用正整数1-12表示
- 相容性:表示同一对象的多个数据相同。如一般一个人只有一个性别
5.2.2 完整性规则的组成
完整性规则的组成:
- 触发条件
- 约束条件
- 违约响应
完整性规则的表示:五元组(D,O,A,C,P)
- D(Data):约束作用的数据对象:二维表,行,列
- O(Operation):触发完整性检查的数据库操作:立即执行(针对一条语句),延迟执行(针对一个事务)
- A(Assertion):数据对象必须满足的语义约束,即规则描述
- C(Condition):选择A作用的数据对象值的谓词
- P(Procedure):违反完整性规则时触发执行的操作过程
完整性规则表示的示例:
- D:学号
- O:增加或修改D(学号)时执行检查
- A:D(学号)不能为空
- C:选择A(D(学号)不能为空)作用于学生表/所有行
- P:拒绝执行O(增加或修改)操作
5.2.3 完整性约束条件的分类
依据对象:
- 值(数据内)约束:数据类型约束,数据格式约束,取值范围约束,空值约束
- 结构(数据间)约束:函数依赖约束,实体完整性约束,参照完整性约束,统计约束
统计约束:规定某个属性值与一个关系多个元组的统计值之间必须满足某种约束条件。如部门主管的奖金不能低于部门奖金的平均值
依据对象的状态:
- 静态约束:值(数据内)约束,结构(数据间)约束
- 动态约束:如年份只能增加
5.2.4 数据完整性的实施
SQL Server 2012的实施形式:
- 声明式:定义时确定数据完整性
- 程序式:编写程序确定数据完整性
方法:
- 约束
- 默认值
- 规则
- 存储过程
- 触发器
5.3 并发控制与封锁
5.3.1 数据库并发性的含义
保持数据的一致性。
5.3.2 事务
特征:ACID
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
5.3.3 并发操作与数据的不一致性
类型:
- 丢失更新:多事务读同数据,先后写数据,后事务数据覆盖前事务数据(先写后写)
- 污读:先事务写数据,后事务读数据,先事务撤销写数据操作,后事务读到过期/错误数据(先写后读)
- 不可重读:先事务读数据,后事务写数据,先事务读到过期/错误数据(先读后写)
5.3.4 封锁
类型:
- 排他型/写/X型:加X锁后,不能再加其他锁
- 共享型/读/S型:加S锁后,只能加S锁
封锁协议:
- 一级封锁协议:事务在修改数据对象之前必须对其加X锁,直到事务结束。可以解决丢失更新问题
- 二级封锁协议:在一级封锁协议的基础上,另外加上事务在读取数据之前必须先对其加S锁,读完后释放S锁。可以解决丢失更新和污读问题
- 三级封锁协议:在一级封锁协议的基础上,另外加上事务在读取数据之前必须先对其加S锁,读完后并不释放S锁,而直到事务结束才释放。可以解决丢失更新、污读和不可重读
问题
封锁协议总结:
- 一级封锁协议:加X锁后,不能再加X锁
- 二级封锁协议:加X锁后,不能再加X锁;加X锁后,不能再加S锁
- 三级封锁协议:加X锁后,不能再加X锁;加X锁后,不能再加S锁;加S锁后,只能加S锁
活锁:
- 概念:当某个事物请求对某一数据进行排他性封锁时,由于其他事务对该数据的操作而使这个事务处于永久等待状态
- 示例:事务1封锁并处理数据,事务2和3请求封锁数据,事务1解锁数据后由事务3封锁并处理数据,则事务2一直处于请求封锁数据的等待状态
- 解决方式:先来先服务策略
死锁:
- 概念:在同时处于等待状态的两个或多个事务中,其中的每一个在它能够进行之前,都等待着某个数据,而这个数据已被它们中的某个事务所封锁
- 示例:事务1封锁并处理数据a,事务2封锁并处理数据b。事务1请求封锁数据b,因为事务2未解封锁数据b而一直处于请求封锁数据的等待状态;事务2请求封锁数据a,因为事务1未解封锁数据a而一直处于请求封锁数据的等待状态
死锁产生的条件:
- 互斥
- 不可剥夺
- 请求保持
- 循环等待
死锁预防的方法:
- 一次加锁法
- 顺序加锁法
对于数据库,死锁预防的开销大,不太适合。
死锁诊断的方法:事务信/依赖图
死锁解除的方法:撤销死锁的某个或某些事务
关于“死锁”的详细内容可参见:“操作系统”专栏的“‘进程与线程’学习提纲”博客。
5.4 数据库恢复
5.4.1 数据库恢复的含义
恢复损失的数据。
5.4.2 数据库恢复的原理及其实现技术
数据库恢复的原理:数据冗余
恢复系统功能的类型:
- 生成冗余数据:预防故障
- 冗余重建:解决故障
生成冗余数据功能的技术:
- 登记日志文件
日志的先写原则:先写日志后操作数据
- 数据转储
数据转储的类型:
依据方式:海量转储,增量转储
依据状态:静态转储,动态转储
5.4.3 数据库的故障和恢复策略
故障的类型和恢复的策略:
- 事务故障:事务撤销
- 系统故障:未提交的事务进行事务撤销,已提交的事务进行事务重做
- 介质故障:数据转储和登记日志文件恢复
总结
《数据库原理及应用教程(第4版 | 微课版)》第5章:“数据库安全保护”的学习提纲。
参考资料
- 《数据库原理及应用教程(第4版 | 微课版)》主编:陈志泊;副主编:许福,韩慧;编著:崔晓晖,路贺俊,阮豫红
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获