第7章系统实现技术.ppt

上传人:sccc 文档编号:4787871 上传时间:2023-05-15 格式:PPT 页数:82 大小:425.02KB
返回 下载 相关 举报
第7章系统实现技术.ppt_第1页
第1页 / 共82页
第7章系统实现技术.ppt_第2页
第2页 / 共82页
第7章系统实现技术.ppt_第3页
第3页 / 共82页
第7章系统实现技术.ppt_第4页
第4页 / 共82页
第7章系统实现技术.ppt_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《第7章系统实现技术.ppt》由会员分享,可在线阅读,更多相关《第7章系统实现技术.ppt(82页珍藏版)》请在三一办公上搜索。

1、1,第7章 系统实现技术,2,本章重要概念(1),(1)事务的定义,COMMIT和ROLLBACK的语义,事务的ACID性质,事务的状态变迁图。(2)存储器类型,稳定存储器的实现,数据传送过程。(3)恢复的定义、基本原则和实现方法,故障的类型,检查点技术,REDO和UNDO操作,运行记录优先原则。,3,本章重要概念(2),(4)并发操作带来的三个问题,X锁、S锁、使用X锁和S锁的操作,封锁协议,活锁、饿死和死锁,并发调度、串行调度、并发调度的可串行化,SQL中事务的存取模式和隔离级别,基于时标的并发控制。(5)完整性的定义,完整性子系统的功能,完整性规则的组成。SQL中的三大类完整性约束,SQ

2、L3中的触发器技术。(6)安全性的定义、级别,权限,SQL中的安全性机制,几种常用的安全性措施,自然环境的安全性。,4,第7章 系统实现技术,7.1 事务7.2 数据库的恢复7.3 数据库的并发控制7.4 数据库的完整性7.5 数据库的安全性7.6 小结,5,7.1 事务,7.1.1 事务的定义 7.1.2 事务的ACID性质 7.1.3 事务的状态变迁图,6,7.1.1 事务的定义(1),定义7.1 事务(transaction)是构成单一逻辑工作单元的操作集合,要么完整地执行,要么完全不执行。不论发生何种情况,DBS必须保证事务能正确、完整地执行。在程序中,事务以BEGIN TRANSAC

3、TION语句开始,以COMMIT语句或ROLLBACK语句结束。COMMIT语句表示事务执行成功地结束(提交),此时告诉系统,数据库要进入一个新的正确状态,该事务对数据库的所有更新都已交付实施(写入磁盘)。ROLLBACK语句表示事务执行不成功地结束(应该“回退”),此时告诉系统,已发生错误,数据库可能处在不正确的状态,该事务对数据库的所有更新必须被撤消,数据库应恢复该事务到初始状态。,7,7.1.1 事务的定义(2),例7.1 设银行数据库中有一转账事务T,从账号A转一笔款子($50)到账号B,其操作如下:T:read(A);A:=A50;write(A);read(B);B:=B+50;w

4、rite(B).,组织成如下事务:T:BEGIN RANSACTION;read(A);A:=A-50;write(A);if(A0)ROLLBACK;else read(B);B:=B+50;write(B);COMMIT;,8,7.1.1 事务的定义(3),对数据库的访问是建立在读和写两个操作的基础上的:read(X):把数据X,从磁盘的数据库中读到内存的缓冲区中。write(X):把数据X,从内存缓冲区中写回磁盘的数据库。在系统运行时,write操作未必导致数据立即写回磁盘,很可能先暂存在内存缓冲区中,稍后再写回磁盘。这件事情是DBMS实现时必须注意的问题。,9,7.1.2 事务的ACI

5、D性质,性质原子性(Atomicity):事务是一个不可分割的工作单元。一致性(Consistency):即数据不会应事务的执行而遭受破坏。隔离性(Isolation):在多个事务并发执行时,系统应保证与这些事务先后单独执行时的结果一样。持久性(Durability):一个事务一旦完成全部操作后,它对数据库的所有更新应永久地反映在数据库中。,10,7.1.3 事务的状态变迁图,11,7.2 数据库的恢复,7.2.1 存储器结构 7.2.2 恢复的基本原则和实现方法7.2.3 故障类型和恢复方法7.2.4 检查点技术7.2.5 SQL对事务的支持,12,7.2.1 存储器结构(1),1.存储器类

6、型易失性存储器(volatile storage)内存、cache存储器 非易失性存储器(nonvolatile storage)磁盘和磁带 稳定存储器(stable storage)这是一个理论上的概念。存储在稳定存储器中的信息是决不会丢失的。2.稳定存储器的实现数据备份 数据银行,13,7.2.1 存储器结构(2),3.数据访问块、物理块和缓冲块块的操作input(A):把物理块A的内容传送到内存的缓冲块中。Output(B):把缓冲块B的内容传送到磁盘中恰当的物理块中,14,7.2.1 存储器结构(3),15,7.2.1 存储器结构(4),4.恢复和原子性的联系,16,7.2.2恢复的基

7、本原则和实现方法,基本原则:“冗余”,即数据库重复存储。具体实现方法 平时做好两件事:转储和建立日志周期地(比如一天一次)对整个数据库进行拷贝,转储到另一个磁盘或磁带一类存储介质中。建立日志数据库。记录事务的开始、结束及数据每一次插入、删除和修改前后的值,并写到“日志”库中。一旦发生数据库故障,分两种情况进行处理 如果数据库已被破坏,则装入last数据库备份,再利用日志库将这两个数据库状态之间的所有更新重新做一遍。如果数据库未被破坏,但某些数据不可靠,则撤消所有不可靠的修改,把数据库恢复到正确的状态。,17,7.2.3 故障类型和恢复方法(1),1.事务故障可以预期的事务故障,如存款余额透支等

8、非预期事务故障,如运算溢出、数据错误、死锁等2.系统故障:硬件故障、软件错误或掉电等重新启动时,具体处理分两种情况考虑。对未完成事务作UNDO处理;对已提交事务但更新还留在缓冲区的事务进行REDO处理。,18,7.2.3 故障类型和恢复方法(2),3介质故障在发生介质故障和遭受病毒破坏时,磁盘上的物理数据库遭到毁灭性破坏。此时恢复的过程如下:重装最近转储的后备副本到新的磁盘,使数据库恢复到转储时的一致状态。在日志中找出最近转储以后所有已提交的事务。对这些已提交的事务进行REDO处理,将数据库恢复到故障前某一时刻的一致状态。在实际中,系统故障通常称为软故障(Soft Crash),介质故障通常称

9、为硬故障(Hard Crash)。,19,7.2.4 检查点技术(1),1检查点方法在DBS运行时,DBMS定时设置检查点。在检查点时刻才真正做到把对DB的修改写到磁盘,并在日志文件写入一条检查点记录(以便恢复时使用)。当DB需要恢复时,只有那些在检查点后面的事务需要恢复。,事务T1不必恢复;事务T2和事务T4必须重做(REDO);事务T3和事务T5必须撤消(UNDO)。,20,7.2.4 检查点技术(2),2检查点方法的恢复算法:分成两步。(1)根据日志文件建立事务重做队列和事务撤销队列。此时,从头扫描日志文件(正向扫描)。(2)对重做队列中的事务进行REDO处理,对撤销队列中的事务进行UN

10、DO处理。进行REDO处理的方法是:正向扫描日志文件,根据重做队列的记录对每一个重做事务重新实施对数据库的更新操作。进行UNDO处理的方法是:反向扫描日志文件,根据撤销队列的记录对每一个撤销事务的更新操作执行逆操作。,21,7.2.5 SQL对事务的支持,无begin transactionCommitRollback游标,22,7.3 数据库的并发控制,7.3.1 并发操作带来的三个问题7.3.2 封锁技术7.3.3 封锁带来的问题7.3.4 并发操作的调度7.3.5 SQL对事务处理的支持7.3.6 基于时标的并发控制,23,7.3.1并发操作带来的三个问题(1),图7.5 在时间t7丢失

11、了事务T1的更新(FIND表示从DB中读值,UPD表示把值写回到DB),1丢失更新问题(例7.2),24,7.3.1并发操作带来的三个问题(2),图7.6 事务T2在时间t4读了未提交的A值(70),2读脏数据问题(例7.3,用户读了“脏数据”,但没有破坏数据库的完整性),25,7.3.1并发操作带来的三个问题(3),图7.7 事务T2在时间t4读了未提交的A值,并在时间t8丢失了自己的更新,2读脏数据问题(例7.4,用户读了“脏数据”,引起自身的更新操作被丢失,破坏了数据库的完整性),26,7.3.1并发操作带来的三个问题(4),图7.8 事务T1两次读取A的值,却得到了不同的结果,3.不可

12、重复读问题(例7.5),27,7.3.1并发操作带来的三个问题(5),解决方法:,28,7.3.2 封锁技术(1),定义7.3 锁(lock)是一个与数据项相关的变量,对可能应用于该数据项上的操作而言,锁描述了该数据项的状态。通常在数据库中每个数据项都有一个锁。锁的作用是使并发事务对数据库中数据项的访问能够同步。封锁技术中主要有两种封锁:排他型封锁 共享型封锁。,29,7.3.2 封锁技术(2),1.排他型封锁(X锁,写锁)X锁定义:如果事务T对某个数据R(可以是数据项、记录、数据集乃至整个数据库)实现了X锁,那么在T对数据R解除封锁之前,不允许其他事务T再对该数据加任何类型的锁。这种锁称为“

13、X锁”。X锁的操作有两个:封锁操作“XFIND R”解锁操作“XRELEASE R”X锁的解除操作应该合并到事务的结束(COMMIT或ROLLBACK)操作中。,30,7.3.2 封锁技术(3),例7.6 使用X锁技术,可以解决图7.5的丢失更新问题。,图7.9 等事务T1更新完成后再执行事务T2,31,2共享型封锁(S锁,读锁)定义7.5 如果事务T对某数据加上S锁后,仍允许其他事务再对该数据加S锁,但在对该数据的所有S锁都解除之前决不允许任何事务对该数据加X锁。S锁的操作有三个:封锁操作“SFIND R”升级和写操作“UPDX R”解锁操作“SRELEASE R”可以看出,获准S锁的事务只

14、能读数据,不能更新数据,若要更新,则先要把S锁升级为X锁。另外,由于S锁只允许读数据,因此解除S锁的操作不必非要合并到事务的结束操作中去,可以随时根据需要解除S锁。,7.3.2 封锁技术(4),32,7.3.2 封锁技术(5),例7.7 使用S锁技术,也可以解决图7.5的丢失更新问题。,图7.10 更新未丢失,但在时间t6发生了死锁,33,注:N=NO,不相容的请求 Y=YES,相容的请求X、S、:分别表示X锁,S锁,无锁 如果两个封锁是不相容 的,则后提出封锁的事务 要等待。,7.3.2 封锁技术(6),3封锁的相容矩阵,34,4封锁的粒度定义7.6 封锁对象的大小称为封锁的粒度(granu

15、larity)。封锁的对象 逻辑单元:属性值、属性值集合、元组、关系、索引项、整个索引、整个数据库 物理单元:页(数据页或索引页)、块 封锁粒度与系统并发度和并发控制开销密切相关。粒度越大,系统中能被封锁的对象就越少,并发度就越小,但同时系统的开销也就越小;相反,粒度越小,并发度越高,系统开销越大。,7.3.2 封锁技术(7),35,5封锁协议:三级封锁协议,分别在不同程度上解决了并发操作带来的各种问题,为并发操作的正确调度提供一定的保证。,7.3.2 封锁技术(8),36,7.3.3 封锁带来的问题(1),1“活锁”问题定义7.7 系统可能使某个事务永远处于等待状态,得不到封锁的机会,这种现

16、象称为“活锁”(Live Lock)。解决活锁问题的一种简单的方法是采用“先来先服务”的策略,也就是简单的排队方式。如果运行时,事务有优先级,那么很可能使优先级低的事务,既使排队也很难轮上封锁的机会。此时可采用“升级”方法来解决,也就是当一个事务等待若干时间(譬如5分钟)还轮不上封锁时,可以提高其优先级别,这样总能轮上封锁。,37,7.3.3 封锁带来的问题(2),2“饿死”问题定义7.8 有可能存在一个事务序列,其中每个事务都申请对某数据项加S锁,且每个事务在授权加锁后一小段时内释放封锁,此时若另有一个事务T2欲在该数据项上加X锁,则将永远轮不上封锁的机会。这种现象称为“饿死”(starva

17、tion)。可以用下列方式授权加锁来避免事务饿死。当事务T2中请对数据项Q加S锁时,授权加锁的条件是:不存在在数据项Q上持有X锁的其他事务;不存在等待对数据项Q加锁且先于T2申请加锁的事务。,38,7.3.3 封锁带来的问题(3),3.“死锁”问题定义7.9 系统中有两个或两个以上的事务都处于等待状态,并且每个事务都在等待其中另一个事务解除封锁,它才能继续执行下去,结果造成任何一个事务都无法继续执行,这种现象称系统进入了“死锁”(Dead Lock)状态。,图7.12 在时间t4两个事务发生死锁,39,7.3.3 封锁带来的问题(4),我们可以用事务依赖图的形式测试系统中是否存在死锁。图中每一

18、个结点是“事务”,箭头表示事务间的依赖关系。图7.14为无环依赖图,表示系统未进入死锁状态;而图7.15为有环依赖图,则表示系统进入死锁状态。,40,7.3.3 封锁带来的问题(5),DBMS中有一个死锁测试程序,每隔一段时间检查并发的事务之间是否发生死锁。如果发生死锁,那么只能抽取某个事务作为牺牲品,把它撤消,做回退操作,解除它的所有封锁,恢复到该事务的初始状态。释放出来的资源就可以分配给其他事务,使其他事务有可能继续运行下去,就有可能消除死锁现象。理论上,系统进入死锁状态时可能会有许多事务在相互等待,但是System R的实验表明,实际上绝大部分的死锁只涉及到两个事务,也就是事务依赖图中的

19、循环里只有两个事务。有时,死锁也被形象地称作“死死拥抱”(Deadly Embrace)。,41,事务的调度:事务的执行次序称为“调度”。串行调度:如果多个事务依次执行,则称为事务的串行调度(Serial Schedule)。并发调度:如果利用分时的方法,同时处理多个事务,则称为事务的并发调度(Concurrent Schedule)。可串行化:如果一个并发调度的执行结果与某一串行调度的执行结果等价,那么这个并发调度称为“可串行化的调度”,否则是“不可串行化的调度”。,7.3.4 并发操作的调度,42,1事务的存取模式READ ONLY(只读型):事务对数据库的操作只能是读操作。READ WR

20、ITE(读写型):事务对数据库的操作可以是读操作,也可以是写操作。这两种模式可用下列SQL语句定义:SET TRANSACTION READ ONLY SET TRANSACTION READ WRITE,7.3.5 SQL对并发处理的支持(1),43,7.3.5 SQL对并发处理的支持(2),2事务的隔离级别SERIALIZABLE(可串行化):允许事务并发执行,但须保证并发调度可串行化,是默认级别。REPEATABLE READ(可重复读):只许事务读已提交的数据,且两次读之间不许其他事务修改此数据。READ COMMITTED(读提交数据):允许事务读已提交的数据,但不要求“可重复读”。

21、READ UNCOMMITTED(可以读未提交数据):允许事务读已提交或未提交的数据。上述四种级别可以用下列SQL语句定义:SET TRANSACTION ISOLATION LEVEL SERIALIZABLESET TRANSACTION ISOLATION LEVEL REPEATABLE READSET TRANSACTION ISOLATION LEVEL READ COMMITTEDSET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,44,7.3.6 基于时标的并发控制(1),这种技术不是采用封锁的方法,因而是不会产生死锁的调度。在事务

22、Ti运行时,有唯一的时间标志,称为时标或时戳,用TS(Ti)表示。时标可用下列两种方法之一实现:(1)事务开始运行时的系统时间(称为启动时间)作为事务的时标。(2)每个事务与一个逻辑编号相联系。譬如逻辑编号可以是运行事务的顺序号。如果两个事务Ti和Tj的时标分别为TS(Ti)和TS(Tj),并且有TS(Ti)TS(Tj),那么称Ti是年长的事务,Tj是年轻的事务。,45,(1)在事务Ti执行read(Q)时 如果TS(Ti)W_timestamp(Q),那么Ti 应该读已经被改写的Q值。这样,应拒绝Ti 的read(Q)操作,并重新启动Ti。如果TS(Ti)W_timestamp(Q),那么执

23、行read(Q),并且置R_timestamp(Q)的值为R_timestamp(Q)和TS(Ti)中的大者。(2)在事务Ti执行write(Q)时 如果TS(Ti)R_timestamp(Q),那么Ti 产生的Q值应在以前的时间内写入,这已不可能。因而,应拒绝Ti的write(Q)操作,并重新启动Ti。如果TS(Ti)W_timestamp(Q),那么Ti企图写过时的Q值。这时,也应拒绝Ti的write(Q)操作,并重新启动Ti。否则,执行write(Q),并置W_timestamp(Q)的值为TS(Ti)。,7.3.6 基于时标的并发控制(2),46,图7.16 在t6时刻,事务T2写操作

24、失败,将重新启动,7.3.6 基于时标的并发控制(3),47,图7.17 在t5时刻,事务T1写操作失败,将重新启动,7.3.6 基于时标的并发控制(4),48,时标顺序协议的特点:由于冲突操作是按时标顺序处理的,因此时标顺序协议能保证调度是可串行化的。由于没有事务处于等待状态,因此并发调度时不会发生死锁。时标顺序协议能做到使调度无级联回退调度。,7.3.6 基于时标的并发控制(5),49,7.4 数据库的完整性,7.4 数据库的完整性7.4.1 完整性子系统和完整性规则7.4.2 SQL中的完整性约束7.4.3 SQL3中的触发器,50,7.4.1 完整性子系统,定义7.12 数据库中完整性

25、(Integrity)一词是指数据的正确性(Correctness)、有效性(Validity)和相容性(Consistency),防止错误的数据进入数据库。DBMS必须保证数据库中数据是正确的。检查数据库中数据是否满足规定的条件称为“完整性检查”。数据库中数据应该满足的条件称为“完整性约束条件”,有时也称为完整性规则。完整性子系统的主要功能:监督事务的执行,并测试是否违反完整性规则;若有违反现象,则采取恰当的操作,譬如拒绝操作、报告违反情况、改正错误等方法来处理。,51,1域约束例7.11 定义一个新的域COLOR,可用下列语句实现:CREATE DOMAIN COLOR CHAR(6)DE

26、FAULT?CONSTRAINT VALID_COLORS CHECK(VALUE IN(Red,Yellow,Blue,Green,?);假定为基本表PART创建表:CREATE TABLE PART(,COLOR COLOR,);,7.4.2 SQL中的完整性约束(1),52,2基本表约束 候选键的定义UNIQUE(列名序列)或 PRIMARY KEY(列名序列)外键的定义FOREIGN KEY(列名序列)REFERENCES()ON DELETE ON UPDATE 在实际应用中,作为主键的关系称为参照表,作为外键的关系称为依赖表。,7.4.2 SQL中的完整性约束(2),53,参照动作

27、可以有五种方式:NO ACTION(默认)CASCADERESTRICTSET NULLSET DEFAULT。“检查约束”的定义:CHECK(条件表达式),7.4.2 SQL中的完整性约束(3),54,例7.12CHECK(AGE15 AND(SEX男 AND AGE35)OR(SEX女 AND AGE30);例7.13CREATE TABLE SC(S#CHAR(4),C#CHAR(4),SCORE SMALLINT,PRIMARY KEY(SNO,CNO),CHECK(S#IN(SELECT S#FROM S),CHECK(C#IN(SELECT C#FROM C);,7.4.2 SQL

28、中的完整性约束(4),55,此时可得到下面三种情况:在关系SC中插入一个元组,如果C#值在关系C中不存在,那么系统将拒绝这个插入操作。在关系SC中插入一个元组,如果S#值在关系S中不存在,那么系统将拒绝这个插入操作。在关系S中删除一个元组,这个操作将与关系SC中的检查子句无关。如果此时关系SC中存在被删学生的选课元组时,关系SC将出现违反检查子句中条件的情况。从上例可以看出,检查子句中的条件尽可能不要涉及其他关系,应尽量利用外键子句或下面提到的“断言”来定义完整性约束。,7.4.2 SQL中的完整性约束(5),56,3断言创建断言的句法是:CREATE ASSERTION CHECK()撤消断

29、言的句法是:DROP ASSERTION 例7.14 每位教师开设的课程不能超过10门。CREATE ASSERTION ASSE1 CHECK(10ALL(SELECT COUNT(C#)FROM C GROUP BY TNAME);,7.4.2 SQL中的完整性约束(6),57,不允许男同学选修WU老师的课程。CREATE ASSERTION ASSE2 CHECK(NOT EXISTS(SELECT*FROM SC WHERE C#IN(SELECT C#FROM C WHERE TEACHERWU)AND S#IN(SELECT S#FROM S WHERE SEX男);或 CREAT

30、E ASSERTION ASSE2 CHECK(NOT EXISTS(SELECT*FROM S,SC,C WHERE S.S#SC.S#AND SC.C#C.C#AND TEACHERWU)AND SEX男);,7.4.2 SQL中的完整性约束(7),58,每门课程最多50名男学生选修 CREATE ASSERTION ASSE3 CHECK(50ALL(SELECT COUNT(SC.SNO)FROM S,SC WHERE S.S#SC.S#AND SEX男 GROUP BY C#);或CREATE ASSERTION ASSE3 CHECK(NOT EXISTS(SELECT*FROM

31、S,SC WHERE S.S#SC.S#AND SEX男 GROUP BY C#HAVING COUNT(*)50);,7.4.2 SQL中的完整性约束(8),59,定义7.13 触发器(Trigger)是一个能由系统自动执行对数据库修改的语句。触发器有时也称为主动规则(Active Rule)或事件条件动作规则(EventConditionAction Rule,ECA规则)。一个触发器由三部分组成:事件:对数据库的插入、删除、修改等操作。触发器在这些事件发生时,将开始工作。条件:测试条件是否成立。如果条件成立,就执行相应的动作,否则什么也不做。动作。如果触发器测试满足预定的条件,那么就由D

32、BMS执行这些动作(即对数据库的操作)。,7.4.3 SQL中的触发器(1),60,例7.15 在修改关系SC的成绩值时,要求修改后的成绩一定不能比原来的低,否则就拒绝修改。CREATE TRIGGER TRIG1 AFTER UPDATE OF SCORE ON SC REFERENCING OLD AS OLDTUPLE NEW AS NEWTUPLE FOR EACH ROW WHEN(OLDTUPLE.SCORE NEWTUPLE.SCORE)UPDATE SC SET SCOREOLDTUPLE.SCOREWHERE C#NEWTUPLE.C#;,7.4.3 SQL中的触发器(2),

33、61,7.4.3 SQL中的触发器(3),62,(1)动作时间:BEFORE、AFTER、INSTEAD OF(2)触发事件:UPDATE、DELETE、INSERT(3)目标表(ON子句)(4)旧值和新值的别名表(REFERENCES子句)(5)触发动作动作间隔尺寸:FOR EACH ROWSTATEMENT 动作事件条件:用WHEN子句定义。动作体:想要DBMS执行的SQL语句。,7.4.3 SQL中的触发器(4),63,例7.16 修改C#,要求保持每门课程选修人数不超过50。CREATE TRIGGER TRIG2INSTEAD OF UPDATE OF C#ON SCREFERENC

34、INGOLD_TABLE AS OLDSTUFFNEW_TABLE AS NEWSTUFFWHEN(50=ALL(SELECT COUNT(S#)FROM(SC EXCEPT OLDSTUFF)UNION NEWSTUFF)GROUP BY C#)BEGIN ATOMIC DELETE FROM SC WHERE(S#,C#,GRADE)IN OLDSTUFF;INSERT INTO SC SELECT*FROM NEWSTUFFEND;,7.4.3 SQL中的触发器(5),64,7.5 数据库的安全性,7.5.1 安全性问题7.5.2 SQL中的安全性机制7.5.3 常用的安全性措施,65,

35、7.5.1 安全性问题(1),定义7.14 DB的安全性(Security)是指保护DB,防止不合法的使用,以免数据的泄密、更改或破坏。安全性级别环境级:计算机系统的机房和设备应加以保护。职员级:应正确授予用户访问数据库的权限。OS级:应防止未经授权的用户从OS处访问DB。网络级:网络软件内部的安全性。DBS级:检查用户的身份及使用权限定义7.15 用户(或应用程序)使用数据库的方式称为“权限”(Authorization)。,66,访问数据的权限:(1)索引(Index)权限:允许用户创建和删除索引。(2)资源(Resourse)权限:允许用户创建新的关系。(3)修改(Alteration)

36、权限:允许用户在关系结构中加入或删除属性。(4)撤消(Drop)权限:允许用户撤消关系。,修改数据库模式的权限:(1)读权限:允许用户读 数据,但不能改数据。(2)插入权限:允许用户 插入新数据,但不能 改数据。(3)修改权限:允许用户 改数据,但不能删除 数据。(4)删除权限:允许用户 撤消关系。,7.5.1 安全性问题(2),67,1视图视图(View)是从一个或多个基本表导出的表。但视图仅是一个定义,视图本身没有数据,不占磁盘空间。视图一经定义就可以和基本表一样被查询,也可以用来定义新的视图,但更新(插、删、改)操作将有一定限制。视图机制使系统具有三个优点:数据安全性、逻辑数据独立性和操

37、作简便性。视图被用来对无权用户屏蔽数据。用户只能使用视图定义中的数据,而不能使用视图定义外的其他数据,从而保证了数据安全性。,7.5.2 SQL中的安全性机制(1),68,2权限DBMS的授权子系统允许有特定存取权限的用户有选择地和动态地把这些权限授予其他用户。(1)用户权限:六类权限供用户选择使用:SELECT INSERT DELETEUPDATE REFERENCES USAGE(2)授权语句:GRANT ON TO WITH GRANT OPTION(3)回收语句REVOKE ON FROMRESTRICT|CASCADE,7.5.2 SQL中的安全性机制(2),69,GRANT SE

38、LECT,UPDATE ON S TO WANG WITH GRANT OPTION GRANT INSERT(S#,C#)ON SC TO LOU WITH GRANT OPTION GRANT UPDATE(SCORE)ON SC TO WEN GRANT REFERENCES(C#)ON C TO BAO WITH GRANT OPTION GRANT USAGE ON DOMAIN AGE TO CHEN REVOKE SELECT,UPDATE ON S FROM WANG CASCADE REVOKE INSERT(S#,C#)ON SC FROM ZHANG RESTRICT R

39、EVOKE GRANT OPTION FOR REFERENCES(C#)ON C FROM BAO,7.5.2 SQL中的安全性机制(3),70,3.角色定义7.16 在SQL中,用户(User)是实际的人或是访问数据库的应用程序。而角色(Role)是一组具有相同权限的用户,实际上角色是属于目录一级的概念。有关用户与角色有以下几点内容:SQL标准并不包含CREATE USER和DROP USER语句。用户和角色之间存在着多对多联系。可以把使用权限用GRANT语句授予角色,再把角色授予用户。也可以用REVOKE语句把权限或角色收回。角色之间可能存在一个角色链。即可以把一个角色授予另一角色,则后

40、一个角色也就拥有了前一个角色的权限。,7.5.2 SQL中的安全性机制(4),71,4审计定义7.17 用于安全性目的的数据库日志,称为审计追踪(Audit Trail)。审计追踪是一个对数据库作更改(插、删、修)的日志,还包括一些其他信息,如哪个用户执行了更新和什么时候执行的更新等。如果怀疑数据库被篡改了,那么就开始执行DBMS的审计软件。该软件将扫描审计追踪中某一时间段内的日志,以检查所有作用于数据库的存取动作和操作。当发现一个非法的或未授权的操作时,DBA就可以确定执行这个操作的账号。当然也可以用触发器来建立审计追踪,但相比之下,用DBS的内置机制来建立审计追踪更为方便。,7.5.2 S

41、QL中的安全性机制(5),72,1.强制存取控制每个数据对象赋予一定的密级,从高到低有:绝密级、机密级、秘密级和公用级。每个用户也具有相应的级别,称为许可证级别(clearance level)。密级和许可证级别都是严格有序的,如:绝密 机密 秘密 公用。在系统运行时,采用如下两条简单规则:用户i只能查看比它级别低或同级的数据;用户i只能修改和它同级的数据。,7.5.3 常用的安全性措施(1),73,2.统计数据库的安全性例7.19 有一个用户LIU欲窃取ZHANG的工资数目。LIU可通过下面两步实现:(1)用SELECT命令查找LIU自己和其它n-1个人(譬如30岁的女职工)的工资总额 x;

42、(2)用SELECT命令查找ZHANG和上述的n-1个人的工资总额 y。随后,LIU可以很方便地通过下列式子得到ZHANG的工资数是:y x+“LIU自己的工资数”这样,LIU就窃取到了ZHANG的工资数目。,7.5.3 常用的安全性措施(2),74,在统计数据库中,对查询应作下列限制:(1)一个查询查到的记录个数至少是n;(2)两个查询查到的记录的“交”数目至多是m。保证数据库安全性的另一个方法是“数据污染”,也就是在回答查询时,提供一些偏离正确值的数据,以免数据泄露。此时,系统应该在准确性和安全性之间作出权衡。当安全性遭到威胁时,只能降低准确性的标准。,7.5.3 常用的安全性措施(3),

43、75,3.数据加密法(1)普通加密法加密算法的输入是源文和加密键,输出是密码文。加密算法可以公开,但加密键是一定要保密的。密码文对于不知道加密键的人来说,是不容易解密的。例7.20 设源文是CHEMIST AND PHYSICIST,加密键是LIGHT。具体的加密算法操作步骤为:把源文分成等长的块,每块的长度和加密键的长度一样。空格用符号+表示(为简化操作,这里只处理大写英文字母和空格):CHEMIST+AND+PHYSICIST+,7.5.3 常用的安全性措施(4),76,对源文的每个字符用026中一个整数替换:0308051309 1920000114 0400160825 1909030

44、919 2000000000 对加密键LIGHT也做同样的替换,替换为:1209070820。对每块源文的每个字符的整数码和加密键相应字符的整数码以27为模相加:0308051309 19200001140400160825 1909030919 20000000001209070820 12090708201209070820 1209070820 12090708201517122102 04020709071609231618 0418101712 0509070820 再用相应字符代替上一步中的整数码,得到密码文:OQLUB DBGIG PIWPR DRJQL EIGHT上述替换方法也

45、不是绝对安全的,专业人员使用高效率计算机,有可能在几个小时内就能解密。,7.5.3 常用的安全性措施(5),77,(2)明键加密法:具体步骤如下:任意选择两个100位左右的质数p和q,计算rpq;任意选择一个整数e,而e与(p1)(q1)是互质的,把e作为加密键(一般,比p和q大的质数就可选作为e);求解密键d,使得(de)mod(p1)(q1)1;r和e可以公开,但d是保密的;对源文p进行加密,得到密码文c,计算公式是cpe mod r;对密码文c进行解密,得到源文p,计算公式是pcd mod r。这个方法的依据是:已经存在一快速算法,能测试一个大数是不是质数;还不存在一个快速算法,去求一个

46、大数的质因子。例如有人曾计算过,测试一个130位整数是否质数,计算机约需7分钟时间,但在同样机器上,求两个63位质数的乘积的质因子约要花41016年时间!,7.5.3 常用的安全性措施(6),78,例7.21 设p3,q5(为举例,p、q选的很小),那么r15,(p1)(q1)8。设e11,从(d11)mod 81求得d3。则加密键e11,解密键d3。如果源文p13,那么密码文c可从下式获得:cpe mod r1311 mod 15 1792160394037 mod 157从密码文7可用下式求得源文p:pcd mod r73 mod 15343 mod 1513。,7.5.3 常用的安全性措

47、施(7),79,4自然环境的安全性,7.5.3 常用的安全性措施(8),80,DBS运行的基本工作单元是“事务”,事务是由一组操作序列组成。事务具有ACID性质。DBMS的恢复子系统负责数据库的恢复工作。在平时要做好DB备份和记日志这两件事情,恢复工作是由拷贝备份、UNDO操作、REDO操作和检查点操作等组成的一项综合性工作。多个事务的并发执行有可能带来一系列破坏DB一致性的问题。DBMS是采用排他锁和共享锁相结合的技术来控制事务之间的相互作用。封锁避免了错误的发生,但有可能产生活锁、饿死和死锁等问题。并发操作的正确性用“可串行化”概念来解决。SQL中设置事务的存取方式和隔离级别对并发操作进行

48、了管理。,7.6 小结(1),81,完整性约束保证了授权用户对DB的修改不会导致DB完整性的破坏。SQL中采用域约束、基本表约束、断言和触发器等机制来实现DB的完整性。数据库的安全性是为了防止对数据库的恶意访问。完全杜绝对DB的恶意滥用是不可能的,但我们可以使那些未经授权访问DB的作恶者付出足够高的代价,以阻止绝大多数这样的访问企图。授权是DBS用来防止未授权访问和恶意访问的一种手段。角色是根据一个用户在组织中扮演的角色,帮助把一个权限集合赋予这个用户。在数据库应用系统中,还采用了强制存取控制、统计数据库的安全性等技术。,7.6 小结(2),82,本章的重点篇幅,(1)教材中P223的图7.4。(检查点技术)(2)并发操作带来的三个问题,封锁带来的三个问题,并发调度的可串行化。(教材P224-232)(3)SQL中完整性约束的实现;断言(教材P238)。(4)安全性中的授权语句(教材P244)。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号