第十二章 数据库安全保护
数据库保护包括数据的一致性,并发性控制,安全性,完整性,备份和恢复等内容
12.1 数据库安全性
数据库安全性是指数据库的任何数据都不允许受到恶意的侵害或未经授权的存取或修改
包含3方面:
1.保密性:不允许未经授权的用户存取数据
2.完整性:只允许被授权的用户修改数据
3.可用性:不应该拒绝已授权的用户对数据进行存取
逻辑威胁只要是对未被授权的信息的存取,可分为3类
1.信息泄露
2.非法数据修改
3.拒绝服务
12.1.1 用户标识与鉴别
1.用户名或用户标识
2.口令
12.1.2存取控制
1.自主存取控制(dac)方法
sql中的grant语句,revoke语句
2.强制存取控制(mac)方法
12.1.3数据审计和加密
1.审计
将用户对数据库的所有操作自动记录下来放入审计日志
例:对修改读者信息表结构或更新读者信息表数据操作进行审计
audit alter,update on 读者信息表
例:取消对读者信息表一切的审计
noaudit alter,update on 读者信息表
2.数据加密
通过算法将元素数据(明文,plain text)变换为不可直接识别的格式(密文,cipher text),从而使得不知道解密算法的人无法获得数据内容
12.1.4角色和权限控制
1.角色
定义:是一组权限的集合,可以把若干权限赋予角色,然后将具体的用户加入角色,加入角色的用户就具有了改角色所拥有的权限
角色分类:
1.固定服务器角色
2.数据库角色
2.权限
dbms利用权限控制主体对于安全对象的访问关联性.每个安全对象具备了可以将权限授予主体的关联性.
权限分为2种:
1.系统管理权限,指定用户(或管理员)能够执行的服务器的管理工作
create database,backup database权限
2.对象访问权限,指定用户针对数据库对象能够执行哪些访问操作
select insert update delete
角色管理
(1)创建角色
例:新建一个管理员角色
create role 管理员
(2)角色授权
例:将读者信息表的查询操作权限授予管理员这个角色
grant select on 读者信息表 to 管理员
(3)将管理员角色搜娱用户user1,且user1可以将权限授予其他角色
grant 管理员 to user1 with grant option
(4)将user1d select权限收回
revoke select on table 读者信息表 from user1
(5)删除角色
drop role user1
12.1.5sqlserver的安全机制
1.服务器级别
2.数据库级别
3.架构级别
12.2数据库完整性
数据库的完整性(database integrity)是指数据的正确性与相容性
在关系型数据库中有4类完整性约束,分别为1.实体完整性,2.域完整性,3.参照完整性和4.用户自定义的完整性
其中实体完整性和参照完整性约束条件称为关系的两个不变性
12.2.1.实体完整性
实体完整性(entity integrity)指表中行的完整性,主要用于保证操作的记录非空,唯一且不重复.
要求:每个表有且只有一个主键.每个主键值必须唯一,而且不为空(null)或重复
实现:在create table中用primary key定义
实体完整性的检查和违约处理
用primary key 短语定义了关系的主码后,每当用户程序对基本表插入一条记录或对主码列进行更新时,dbms就会自动按照实体完整性进行检查
1.检查主码值是否唯一,如果不唯一,则拒绝插入或修改
2.检查主码各个属性是否为空,只要有一个为空就拒绝插入或修改
例:将图书类别信息表中的图书类别编号属性组定义为码
create table 图书类别信息表 ( 类别编号 int not null 类别名称 varchar(20) not null, 可借天数 int, primary key (类别编号) )
12.2.2 参照完整性
参照完整性是指当更新,删除,插入如一个表中的数据时,通过参照引用相互关联的另一个表的数据来检查对表的数据操作是否正确
参照完整性通过foreign key 与check约束实现,以主键和外键或外键与唯一件之间的关系为基础
例:定义图书借阅表中的参照完整性
create table 图书借阅信息表 ( 图书编号 varchar(13), 读者编号 varchar(13), 借阅日期 datatime, 归还日期 datatime, 操作员编号 varchar(13), 是否归还 int, 罚款 float, primary key (图书编号,读者编号,借阅日期), foreign key (操作员编号)references 操作员信息表(操作员编号), foreign key (读者编号) references 读者信息表(读者编号) )
参照完整性检查和违约处理
参照完整性将两个表中的相应元组联系起来了.用户在插入,删除和修改的操作会破坏参照完整性,因此必须检查参照完整性,对可能破坏参照完整性的情况,系统可以采用以下策略进行处理
(1)拒绝(no action)执行:不允许该操作执行.
(2)联级(cascade)操作:删除或修改某个元组而造成与参照表不一致时,需要删除或修改参照表中的所有造成不一致的元组
(3)设置空值(set null):删除或修改被参照表的一个元组造成不一致时,需要将参照表中的所有造成不一致的元组的对应的属性设置为空值
12.2.3用户自定义完整性
用户自定义的完整性是使得用户得以定义不属于其他任何完整性分类的特定的业务规则.
属性上的约束条件的定义:在create table中定义属性的同时可以根据应用要求定义属性上的约束条件,即属性值限制,包括以下几种限制
列值非空(not null)
列值唯一(unique)
检查列值是否满足一个布尔表达式(check短语)
12.2.4 sqlserver的完整性
1.使用约束
(1)not null或null约束
(2)primary key约束
(3)foreign key约束
(4)unique约束
(5)check约束
2.使用默认
记录中的每列均必有值,即使该值是null.如果是确定的值就可以用null,如果不希望用空值的列就可以用列定义默认值
注意:
(1)创建default约束时,sqlserver将对表中现有的数据进行完整性验证
(2)表中的每一列上只能定义一个default
(3)default约束只对执行的insert语句起作用
例:将读者信息表的性别字段默认为男.相关语句如下:
alter table 读者信息表 add constraint 默认_性别 default '男' for 性别
例:删除默认_性别约束
drop default 默认_性别
3.使用规则
规则是向后兼容的功能,用于执行一些与check约束的相同功能.使用check约束是限制列值的首选标准方法.check约束比规则更简明.一个列之呢个应用一个规则单可以应用多个check约束
12.3并发控制
12.3.1.事务的概念
事务(transaction)是用户定义的一个数据库操作序列.一个事务内所有语句被作为一个整体,这些操作是一个完整的工作单元,这些操作要么全做要么不做,是不可分割的工作单位.
事物的开始和结束可以由程序员显示控制,或者由dbms按默认规定自动划分事务.
事务的结束标记由两个,虽然事务的开始标记不完全一样但是事务的结束标记都是一样的:一个是正常结束,用commit(提交)表示,另一个是异常结束,用rollback表示.
1.commit的含义
(1)事务正常结束
(2)提交事务的所有操作(读+更新)
(3)事务中所有对数据库的更新永久生效
2.rollback的含义
(1)事务异常终止
(2)事务运行的过程中发生了故障,不能继续运行
(3)回滚事务的所有更新操作
(4)事务回滚到开始时的状态
12.3.2 事务的状态和特性
1.事务的状态从开始到结束有5种
1.活动 active
事务初始状态
2.部分提交 partially committed
最后一个操作执行完毕,但尚未提交数据库的状态
3.失败 failed
由于内部逻辑错误等原因导致事务无法继续执行的状态
4.中止 aborted
由于条件约束等原因放弃执行,数据库恢复到事务执行前的状态
5.提交 committed
事务成功执行完毕的状态
2.事务的特性
为了保持数据库中的数据的一致性,事务应该具有以下4个特性,通常称为acid特质
1.原子性(atomicity) :事务中的所有操作要么做要么全做,要么一个都不做.如果任何操作执行失败,那么其他操作都要撤销
2.一致性(consistency) :事务执行的结果必定是使数据库从一个一致性状态变到另一个一致性状态,即数据库在事务执行前后是一致的
3.隔离性(isolation) :多个事务并发执行的过程中,任何一个事务都不会受其他事务状态和过程影响
4.持久性(durability) :一个事务一旦提交,其对数据库中的数据的改变就是永久性的,即使系统发生故障也不会影响
12.3.3 并发控制概述
事务在执行的过程中需要不同的资源,例如:有时需要cpu,有时需要存取数据,有时需要i/o,有时需要通信.如果事务串行执行,则许多系统资源处于空闲状态.因此为了充分的利用系统资源,发挥数据库共享的特点.数据库允许多个事务并发执行.但事务在并发执行时,彼此之间可能产生相互干扰.
1. 丢失数据修改
2.不可重复读
3.读脏数据
12.3.4封锁与封锁协议
1.封锁
封锁是数据库系统并发控制的常用方法之一.
2.封锁协议
运用x锁和s锁对数据对象加锁时,还需要约定一些规则.如应何时申请x锁或s锁,封锁时间,何时释放,这些规则称为封锁协议
(1)一级封锁协议
(2)二级封锁协议
(3)三级封锁协议
12.3.5 活锁与死锁
1. 活锁
在一个过程中漏掉一个事务的请求,也就是不按时间顺序去响应事务的请求
解决方法:先到先服务
2.死锁
两个事务对于已经处于请求完成阶段,需要释放各自的请求才能结束,但是两个事务都在等待对方的响应
解决方法:
1.采取一定的措施预防死锁的发生
2.允许发生死锁,并采用一定的手段定期诊断系统中有无死锁,若有则将其解除
12.4 数据库维护
12.4.1数据库故障
从数据库恢复角度,可以将数据库故障分为4类
1.事务内部的故障
2.系统故障
3.介质故障
4.计算机病毒
12.4.2 数据库恢复技术
1.数据库备份
完全备份和差异备份.
1.完全备份每次都备份整个数据库或事务日志
例:使用逻辑名test1在'D:\server\2012'中创建一个命名的备份设备,并将图书馆数据库完全备份到该设备
use 图书馆 exec sp_addumpdevice 'disk','test1', 'D:\server\2012\test.bak' backup database 图书馆 to test1
2.差异备份只备份上次备份以来发生的变化的数据库的数据
例:创建临时备份设备并在所创建的临时备份的设备上进行差异备份
backup database 图书馆 to disk = 'd:\server\2012\图书馆' with differential
2.数据库还原
3.数据库的分离和附加
浙公网安备 33010602011771号