第六章 数据库完整性和安全性
- 基本内容
-
安全性;完整性;数据库恢复技术;SQL Server的数据恢复机制;
- 完整性
- 实体完整性、参照完整性、用户自定义完整性
- 安全性
- 身份验证
- 权限控制
- 事务日志,审计
- 数据加密
- 数据库恢复
- 冗余技术恢复,数据转储和登记日志
- 检查点恢复,检查点和重启动文件
- 数据库镜像
- 完整性
- 完整性,
-
数据库完整性就是保证数据库中的数据的正确性和一致性,防止数据库中出现不符合要求的数据
- 实现完整性
-
约束、默认、规则、触发器、存储过程
- 违反完整性
- 当操作违反实体和用户自定义完整性时,一般DBMS都拒绝执行操作
- 当操作违反参照完整性时
- 拒绝执行
- 级联执行,将所有表一起更新
- 置空值
- 约束
- 表级约束
-
若干元组间以及关系之间联系的数据约束。例如:选课表中,每个人最多能选 10 门课;学生表中,学生的学号必须唯一;选课表中的学号和课程号必须在学生表和课程表中存在。
- 元组级约束
-
同一个元组属性之间必须满足的约束条件。如学生表中年龄属性的值应该等于当前日期减去出生日期。
- 属性级约束
-
针对列的类型、取值范围、精度、排序等而制定的约束条件。例如:性别只能是‘男’或‘女’。
- 常用约束
- primary key主码,
- foreign key外码,
- (not) null非空
- unique唯一性
- check检查
- 使用时,例如check (sex in (''男,‘女’))
CHECK(SNO LIKE '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')
-
确保学号是八位有效数字,还可以根据特定学院缩小范围
- default默认,例如创建表时设置属性
sex default '男'
- 规则
-
数据库对存储在表的列或用户自定义数据类型中的值的规定和限制 自定义数据类型
sp_addtype int
- 规则只有绑定到列或者用户定义数据类型时才起作用。
- 规则是作为一个独立的数据库对象存在,表中每列或者每个用户定义数据类型只能和一个规则绑定。
- 创建规则
CREATE
**RULE**
rule_name AS condition_expression
- 绑定规则可以通过 sp_bindrule 存储过程实现
exec sp_bindrule 'rule_name','属性列'
-
sp_addtype增加用户自定义变量
- 解除规则
exec sp_unbindrule '属性列'
drop
**rule**
rule_name
- 安全性, @面试
-
安全性是指保护数据库以防不合法的使用造成数据的泄露、更改或破坏,确保只有授权的用户使用数据库中数据和执行操作
-
措施: 数据加密,权限控制,审计日志,身份鉴别
-
@面试
-
安全级别
- A1,B3,B2,B1,C2,C1,D
-
角色
-
每次单独设置用户的权限麻烦,SQL提供了角色的用户分组,将具有相同权限的角色分配到一个组中
-
服务器角色
- 由服务器账户组成的组,根据对服务器的管理任务以及这些任务的相对的重要性等级把具有sql server管理职能的用户划分到服务器角色组
- 固定服务器角色:sysadmin,serveradmin,diskadmin,processadmin,securityadmin,setupadmin,dbcreator和 bulkadmin
-
数据库角色
-
由数据库成员组成的组
- 固定的数据库角色
-
一个用户可以属于同一个数据库中的多个角色
-
创建角色
-
create role role_name
-
为角色添加成员,使用系统存储过程,
-
sp_addrolemember 'role_name'
-
-
授权粒度
-
可以定义的数据对象的范围,如果粒度越细,可以定义的数据对象范围越小,授权系统就越灵活
- 关系数据库中的粒度:数据库、表、列、行
-
授权操作
-
grant 权限名称/角色名称 on 对象 对象名称 to user_name 【with grant option权限可以传递】
-
回收权限
-
revoke 权限名称 on 对象 对象名称 from user_name【cascade | restrict】
-
权限类别
- 对象权限
- 对特定的安全对象(表、视图、列、存储过程、函数)的操作权限
- 如select,update,insert,delete,execute,references。
- 语句权限
- 对数据库的操作权限,通常是一些具有管理性的操作
- 对象权限
-
数据加密
-
审计
-
将用户对数据库的所有操作 记录在审计日志上 ,DBA利用审计日志找出非法存储数据的人、时间、内容
- 系统级审计
-
DBA设置,检测grant和revoke等操作
- 用户级审计
-
检测所有用户对表和视图的访问和操作
- 设置审计功能
-
audit alter,update on table_name;
- 取消审计功能
-
noaudit alter,update on table_name;
-
SQL Server安全功能
- 登录
-
Windows身份登录;混合身份登录
-
安全性控制
- MAC,强制存取控制,对不同用户授予不同级别的许可证
- DAC,自主存取控制,不同用户对不同数据对象有不同的存取权限
-
- 数据库恢复技术
-
冗余技术、检查点恢复技术、镜像恢复技术
- 事务, @面试
-
用户自定义的数据库操作序列,是恢复和并发的基本单位
- 特性,ACID
- 原子性Atomicity
-
要么全做要么全不做
- 一致性Consistency
-
事务执行结果是从一个一致性状态到另一个一致性状态
- 隔离性Isolation
-
事务的执行不受其他事务的干扰
- 持续性Duration
-
一个事务一旦执行成功,那么对数据库的影响是持久性的
- 事务状态
- 活动
-
事务处于执行状态
- 部分提交
-
事务的所有语句都执行完成,但是结果数据还在内存中
- 提交
-
事务执行完成且对数据的修改已经完全写入数据库中,日志信息也保存了执行记录
- 失败
-
事务不能成功执行,必须进行回滚
- 终止
-
事务回滚,数据库恢复到事务执行之前的状态
- 特性,ACID
- 数据库故障
- 系统故障
-
DBMS代码错误;硬件故障;操作员失误;特定类型故障;停电
- Undo未完成的事务,Redo已完成的事务,用队列进行记录
- 事务内部故障
-
事务进入失败状态,即将回滚,往往是非预期的
- 存储设备故障
-
发生概率低但是破坏性极大
- 重装数据库,重做已完成的事务
- 其他原因
- 数据库恢复原理, @面试
-
利用存储在系统特定部分的冗余数据来重建数据库中被破坏的数据 冗余恢复技术、检查点恢复技术、数据库镜像恢复技术
- 冗余恢复技术
-
数据转储和登记日志,通常二者结合使用
- 数据转储
- 静态转储和动态转储
-
- 静态转储
-
在无事务执行时对数据进行转储
- 转储开始时数据库必须处于一致的状态
- 转储期间不允许对数据库进行任何的修改
-
- 动态转储
-
转储操作和用户事务同时进行,不能保护副本数据有效性,需要配合日志文件进行恢复
-
- 增量转储和海量转储
-
每次转储的数据量是全部数据量还是变化的数据量,一般长间隔海量,短间隔增量
- 静态转储和动态转储
- 登记日志
- 登记的日志必须严格按照时间顺序
- 必须先写日志文件再写数据文件
- Redo技术
-
发生故障重做事务
- Undo技术
-
撤销失败的事务对数据的一切option
- 数据转储
- 检查点恢复技术
-
使用Redo和Undo消耗大量时间和资源,日志文件中增加了 检查点记录和重启动文件
- 检查点
-
记录在日志文件中表示数据库是否正常运行的一个标志,记录 所有 当前活动的事务
- 重启动文件
-
记录各个检查点记录在日志文件中的地址
- 恢复步骤
- 从重启动文件中找到最后一个检查点记录
- 得到检查点中所有事务清单,并加入Undo队列中
- 从检查点开始正向扫描事务,遇到完成的事务就加入Redo队列
- 对Undo事务进行Undo处理,对Redo事务进行Redo处理
- 数据库镜像恢复技术
-
建立两个数据库,DBMS自动将数据库变化复制过去,保证两个数据库一致性
- 实际使用中纸赋值关键数据和日志文件
- 镜像数据库也可用于并发访问
- SQL Server数据恢复机制
- 备份方法
- 完全备份
-
海量转储形成备份
- 差异备份
- 事务日志备份
-
必须和完全备份结合使用,来保存每次完全备份之间执行的事务,用于回滚恢复
- 数据库文件或文件组备份
- 恢复方法
- 简单恢复
- 完全恢复
- 大容量日志记录恢复
- 备份方法
- 数据库维护所做工作, @面试
- 数据库转储与恢复,
- 数据库安全性和完整性, ,
- 数据库性能监督、分析、改进
- 数据库重组织和重构造