【云驻共创】华为云数据库之数据库原理及应用课程11、数据库系统控制
前言
本文主要介绍内容如下:
- 事务
- 恢复技术
- 并发控制
- 数据库安全
本文内容目标是可以通过以上技术保障数据库运行过程中的安全性以及数据的准确性。
【云端实践】地址:https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXDX012+Self-paced/about
一、事务
1、什么是事务?
在数据库管理系统中,事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务是数据库管理系统提供的控制数据操作的一种机制,它将一系列的数据库操作组合在一起,作为一个整体进行操作和控制,以便数据库管理系统能够提供数据一致性状态转换的保证。
2、ACID——事务四大特性
原子性(Atomicity)
原子性其实非常好理解,我认为它指的就是一种完整性,就是说任何一个具备原子性的事务只有两种状态:完成操作 和 未操作。原子性保证事务的一切操作要么一起成功要么一起失败。原子性的事务一旦开始就一直运行到结束,它不会被线程调度机制中断。如果遇到强制性中断,就会全部回滚到最初未操作的状态。还有一种说法是“原子操作(atomic operation)是不需要synchronized"。
一致性(Consistency)
这个是数据库事物的核心,它是数据库最基本的特性。这条特性看起来简单,但是理解起来还是比较复杂的。
它的书面定义是:数据库一致性(Database Consistency)是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
它分为两个方面:一致读 和 一致写
一致读:事务读取数据只能从一个状态中读取,不能从2个或者2个以上状态读取。
一致写:事务执行的数据变更只能基于上一个一致的状态,且只能体现在一个状态中。
具体解释请认真参看并理解 知乎 如何理解数据库事务中的一致性的概念?徐志斌的回答
隔离性(Isolation)
多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
事务最复杂问题都是由事务隔离性引起的。完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。
持久性(Durability)
就是说任何执行成功的事务修改后的数据都要保证永久的保存在数据库系统中,能够时刻记录系统的状态,并且保证发生故障后能够恢复。
3、调度
一组事务执行的基本步骤,或者说的读、写、其它控制操作如加锁、解锁的一种执行顺序称为对这组事务的一个调度。事务调度是要保证事务ACID属性。
begin transaction
sql...
...
sql...
commit
end transaction
二、恢复技术
1、事务的故障
事务故障是某事务在运行过程中由于种种原因未运行至正常终止点就天折了,这意味着事务没有达到预期的终点,因此数据库可能处于不正确的状态。
引发事务故障的常见原因
- 输入数据有误;
- 违反了某些完整性限制;
- 某些应用程序出错;
- 并行事务发生死锁。
下面来介绍一个重要概念:死锁
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统
处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
2.事务故障恢复
在不影响其他事务运行的情况下,强行回滚该事务,使得该事务好像根本没有启动一样恢复机制负责管理事务中止,典型的办法是维护一个中止日志(log)。
系统故障是造成系统停止运转的任何事件,使得系统要重新启动。
3.引发系统故障的常见原因
(1)操作系统或DBMS代码错误;
(2)操作员操作失误;
(3)特定类型的硬件错误(如CPU故障) ;
(4)突然停电。
4.系统故障恢复
尚未完成的事务可能结果已经送入数据库,已经完成的事务可能有一部分留在缓存区,尚未写回到物理数据库中。系统重新启动后,恢复子系统需要撤销所有未完成
的事务,还需要重做所有已经提交的事务,以将数据库真正恢复到一致状态。系统故障可以由系统自动恢复,或可以利用基于日志文件的数据恢复技术。
5.介质故障
介质故障是使存储在外存中的数据部分丢失或全部丢失;介质故障比前两类故障的可能性小得多,但破坏性大得多。
引发介质故障的常见原因
(1)硬件故障;
(2)磁盘损坏;
(3)磁头碰撞;
(4)操作系统的某种潜在错误;
(5)瞬时强磁场干扰。
6.介质故障恢复
介质故障将破坏存放在外存的数据库中的部分或全部数据,因此,必须借助DBA的帮助,由DBA一起恢复。
介质故障破坏的是磁盘上的部分(或全部)物理DB,甚至会破坏日志文件,而且也会破坏正在存取的物理数据的所有事务(它与事务故障和系统故障相比,对数据库的破坏性可能最大),最好用后备副本和日志文件进行数据库恢复,也可作数据库镜像进行数据库恢复。
三、并发控制
1.概述
数据库管理系统并发调度所依据的可串行性思想与行为现象,在生活中比比皆是。如飞机航班调度、智能交通的控制问题等,都是用并发调度的思想来解决的。
为什么要进行并发调度
数据库是一个“共享资源”,可供多个用户共享。有时,在同时刻并发运行的事务就可以达到数百个。如果是单处理机系统,事务的并行实际上是这些事务的并行操
作轮流交叉运行,称之为“交叉并发方式”,减少了处理机的空闲时间,提高了系统的效率。如果是多处理机系统,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行,称为“同时并发方式”。
2.串行化调度
串行化(Serialization)是计算机科学中的一个概念,串行化也叫序列化。 并行化与串行化是顺序处理的方式上的不同,如果并发执行的控制完全由操作系统负责,许多调度都是可能的,包括像上述调度那样使数据库处于不一致状态的调度。
SQL规定的隔离性级别如下:
(1)可串行化(Serializable) :通常保证可串行调度。然而,正如我们将要解释的,一些数据库系统对该隔离级别的实现在某种情况下,允许非可串行化执行。
(2)可重复读(Repeatable read) :只允许读取已提交的数据,而且在一个事务两次读取一个数据项期间,其它事务不能更新该数据。但该事务不要求与其它事务可串行化。
例如,当一个事务在查找满足某些条件的数据时,他可以找到一个已提交事务插入的一些数据,但可能找不到该事务插入的其它数据。
(3)已提交读(Read committed) :只允许读取已提交的数据,但不要求可重复读.比如在事务两次读取一个数据项期间,另一个事务更新该数据并提交。
(4)未提交读(Read uncommitted) :允许读取未提交数据。这是SQL允许的最低一致性级别。
3.封锁定义
“锁”是控制并发的一种手段,每一数据元素都有唯一的锁, 每一事务读写数据元素前,要获得锁。如果被其他事务持有该元素的锁,则要等待。事务处理完成后要释放锁。
封锁是实现并发控制的一个非常重要的技术。
4.封锁类型
数据库管理系统通常提供多种类型的封锁,包括:
(1)排它锁(eXclusive lock, X锁),又称为写锁:若事务T对数据对象A加上X锁则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的
锁(保证其他事务在T释放A上的锁之前不能再读取和修改A )。
(2)共享锁(Share lock,S锁) 又称为读锁:若事务T对数据对象A加上S锁,则只允许T读取A,但不允许修改A ,其它任何事务只能再对A加S锁,而不能加X锁,直到T释
放A上的S锁。(保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改)
5.封锁协议及封锁粒度
两段封锁协议(2PL: two-Phase Locking protocal)。读写数据之前要获得锁。每个事务中所有封锁请求先于任何一个解锁请求两阶段:加锁段,解锁段。加锁段中不能有解锁操作,解锁段中不能有加锁操作。
6.并发调度的可串行性
几种常见的操作,并发控制策略如下 几种常见的操作,并发控制策略如下
(1)读-读并发控制:并发的读读事务,是不会、也没有必要相互阻塞的。由于没有 修改数据库,因此每个读事务使用自己的快照,就能保证查询结果的一致性和隔离性;同 修改数据库,因此每个读事务使用自己的快照,就能保证查询结果的一致性和隔离性;同时,对于底层的页面和元组,只涉及读操作,只需要对它们加共享锁即可,不会发生锁等 时,对于底层的页面和元组,只涉及读操作,只需要对它们加共享锁即可,不会发生锁等 待的情况。
(2)读写并发控制:并发的读、写事务,并发控制基于MVCC和快照机制,彼此之间不会存在事务级的长时间阻塞。相比之下,采用两阶段锁协议,由于读、写均在记录的 间不会存在事务级的长时间阻塞.相比之下,采用两阶段锁协议,由于读、写均在记录的 同一个版本上操作,因此排在锁等待队列后面的事务至少要阻塞到持锁者事务提交之后才 同一个版本上操作,因此排在锁等待队列后面的事务至少要阻塞到持锁者事务提交之后才 能继续执行。另一方面,为了保证底层物理页面和元组的读、写原子性,在实际操作页面能继续执行。另一方面,为了保证底层物理页面和元组的读、写原子性,在实际操作页面
和元组时,需要暂时加上相应对象的共享锁或排他锁,在完成对象的读、写操作之后,就 和元组时,需要暂时加上相应对象的共享锁或排他锁,在完成对象的读、写操作之后,就可以放锁。 可以放锁。
(3)写-写并发控制:并发的读写事务,工作在同一条记录的不同版本上(读老版本,写新版本),从而互不阻塞,但是对于并发的写写事务,它们都必须工作在最新版本的元组上,因此如果并发的写写事务涉及同一条记录的写操作,那么必然导致事务级的阻塞。
写-写并发的场景有以下6种:插入插入并发、插入删除并发、插入-更新并发、删除-删除并发、删除更新并发、更新-更新并发,不同的操作并发控制都不尽相同。
四、数据库安全
1.概述
随着数字化的不断发展,数据信息的流量剧增,数据信息的价值也越来越大,当人们享受“数据”带来的红利时,也面临着隐私泄露、信息篡改、数据丢失等安全风险。由此,数据的安全保密成为数据库管理系统(DBMS)是数据库系统的核心任务之一,它的安全性也成为DBMS系统的一个很重要的性能指标。
1.数据库安全问题
数据库的安全机制,就是要建立一个数据库的“安保屏障”,阻止各种不安全问题的出现,通常要考虑以下技术安全、管理安全、政策法律安全三点。
2.安全级别
数据库的安全级别通常分为: DBMS级,网络级,OS级,用户级和环境级,如图所示。
数据库安全性机制采用多层级控制,分为操作系统的保护,DBMS安全保护,数据库加密,数据库用户标识与鉴别等安全层级,如图所示。
3.安全机制
数据库安全性控制的常用方法:用户标识与鉴定,存取控制,视图,审计,密码存储。
(1)用户标识与鉴别(Identification & et Authentication) :是系统提供的最外层安全保护措施。其方法是系统提供一定的方式让用户标识自己的名字与身份,包括用户标识与用户鉴别2个层次,通过“用户密码”验证身份,鉴别此用户是否合法。
①软件验证技术:口令验证、问/答验证等技术;
②硬件验证技术:指纹验证、声音识别验证、手写签名验证、手型几何验证和身份卡验证等技术。
4.视图机制
视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,其主要的功能 视图机制把要保密的数据对无权存取这些数据的用户隐藏起来,其主要的功能在于提供数据独立性。但视图安全保护功能单独执行往往不够精细,有时不能达到在于提供数据独立性。但视图安全保护功能单独执行往往不够精细,有时不能达到应用系统的要求。
视图机制与授权机制配合使用:首先用视图机制屏蔽掉一部分保密数据,视图上面再进一步定义存取权限,间接实现了支持存取的用户权限定义。 。上面再进一步定义存取权限,间接实现了支持存取的用户权限定义。
5.审计
审计功能是把用户对数据库的所有操作记录自动记录下来并放入审计日志(Audit Log) 中。DBA利用审计日志,找出非法存取数据的人,时间和内容。审计分为用户级审计和系统级审计。
用户级审计,针对自己创建的数据库表或视图进行审计记录所有用户对这些表或视图的一切成功和(或) 不成功的访问要求以及各种类型的SQL操作。
系统级审计( DBA设置),监测成功或失败的登录要求, 以及监测GRANT和REVOKE操作以及其他数据库级权限操作。
6.数据加密
数据加密是防止数据库中数据在存储和传输中失密的有效手段,其思想方法是根据一定的算法将原始数据(术语为明文,Plain text) 变换为不可直接识别的格式(术语为密文,Cipher text)) ,不知道解密算法的人无法获知数据的内容。常用的数据加密方法有如下几种:
①替换方法:使用密钥(Encryption Key)将明文中的每一个字符转换为密文中的一个字符。
②置换方法:将明文的字符按不同的顺序重新排列。
③混合方法:美国1977年制定的官方加密标准:数据加密标准(Data Encryption Standard,简称DES)。
④利用DBMS系统例程对数据库中的数据进行加密。
2.用户管理
用户权限由两方面要素构成,即数据对象和操作类型。
1.用户权限
定义一个用户的存取权限就是要定义这个用户可以在哪些数据库对象_上进行哪些类型的操作。在数据库系统中,定义存取权限称为授权。
授予数据库权限时,<权限类型>可以指定为以下值,如表所示。
2.授权策略
典型的自主存取控制(DAC)授权策略包括以下三种:
(1)集中管理策略:只允许某些特权用户授予/收回其他用户对客体(基本表、索引、视图等)的访问权限。
(2)基于拥有权的管理策略:只允许客体的创建者授予/收回其他用户对客体(基本表、索引、视图等)的访问权限。
(3)非集中管理策略:在客体拥有者的认可下,允许一些用户授予/收回其他用户对客体(基本表、索引、视图等)的访问权限。
3.用户授权操作命令
大型数据库管理系统几乎都支持都会提供DAC支持,它是通过SQL的GRANT语
句和REVOKE语句实现。
语句格式:
GRANT priv_ type [(column_ list)] ON database.table
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_ option [with option].]J
功能:将指定操作对象的指定操作权限授予指定用户。
在SQL中,用户权限的收回是通过REVOKE语句实现。
语句格式:
REVOKE priv_ type [(column list)..
ON database.table
FROM user [, user].
功能:将授权给指定用户的指定操作对象的指定操作权限收回。
几点说明:
(1) priv_ type参数表示权限的类型;
(2) column list 参数表示权限作用于哪些列上,没有该参数时作用于整个表上;
(3) user 参数由用户名和主机名构成,格式为“username @ 'hostname'"。
例如:回收用户【dbadmin】对表【student】的select操作权限。
revoke select no student from dbadmin
3.数据备份
在数据库中,为了维护数据安全性,数据备份是必不可少的。GaussD B(forMySQL)对数据进行备份的方式有自动备份(事务备份)和手动备份等。
1.自动备份
GaussD B(for MySQL)是一个主备的结构,数据存储采用的是共享存储机制,它的特点就是它极致可靠,能做到数据的零丢失。数据一旦进行更新或存储, 就是一个三备份,如果出现故障,由于三备份,它的故障能进行闪恢复。GaussD B(forMySQL)允许用户根据数据处理需求设置自动备份参数。
2.手动备份
GaussDB(for MySQL)允许用户将数据库指定不同的选项进行备份。它实用程序灵活,快速,可执行高级备份,并接受各种命令行参数,用户可通过这些参数来更改备份数据库的方式。
3.备份/恢复数据库
GaussDB(for MySQL)提供了直接进行数据库备份的交互方式,用户通过系统功能选项,可以很方便地实现数据库备份操作,另外,也支持对已经备份的数据库进行恢复。
4.备份数据库表
语句格式:
select * into new_table_name from old_tablename;
功能:备份数据库表。
5.数据库导出
GaussDB(for MySQL)的导入导出操作,使得数据的形态很多元化,大大地提升了数据的可用性,并且可以导出SQL和CSV格式类型的文件。
本文整理自华为云社区【内容共创】活动第15期。
https://bbs.huaweicloud.com/blogs/345822
任务27:华为云数据库之数据库系统控制
- 点赞
- 收藏
- 关注作者
评论(0)