您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第8章 数据库的安全性和完整性
数据库理论与应用重点大学计算机专业系列教材第8章数据库的安全性和完整性•8.1数据库的安全性•8.2数据库的完整性8.1数据库的安全性•安全性是指保护数据库,防止不合法的用户非法使用数据库所造成的数据泄露,或恶意的更改和破坏,以及非法存取。•对于数据库来说,其中许多数据是非常关键和重要的,可能涉及到各种机密和个人隐私,对它们的非法使用和更改可能引起灾难性的后果。对于数据的拥有者来说,这些数据的共享性应当受到必要限制,不是任何人都可以随时访问和随意使用,只能允许特定人员在特定授权之下访问。•所有实用的DBMS都必须建立一套完整的使用规范(或称规则),提供数据库安全性方面的有效功能,防止恶意滥用数据库。数据库安全性保护范围1.计算机外部环境保护(1)自然环境中的安全保护(2)社会环境中的安全保护(3)设备环境中的安全保护2.计算机内部系统保护(1)网络中数据传输时安全性问题(2)计算机系统中的安全问题(3)操作系统中的安全性问题(4)数据库系统中的安全性问题(5)应用系统中的安全性问题数据库管理系统中的安全性保护1.身份标识与鉴别2.存取控制3.审计4.数据加密5.统计数据库安全性身份标识与鉴别常用的标识与鉴别的方法有:(1)使用用户名和口令。这种方法简单易行,但容易被人窃取。(2)每个用户预先约定好一个计算过程或者函数,系统提供一个随机数,用户根据自己预先约定的计算过程或者函数进行计算,系统根据用户计算结果是否正确鉴定用户身份。(3)使用密码字中的身份鉴别技术等手段。存取控制•访问控制:是对用户访问数据库各种资源的权力的控制数据库资源:基表、视图、数据目录、实用程序等权力:创建、撤消、查询、增删改、执行访问控制在数据库之间是互相独立的•存取控制包括自主访问控制和强制访问控制两种类型自主访问控制•对数据的存取权限进行安全控制•自主访问控制中访问控制受主体主观随意性的影响较大,其安全力度尚显不足。强制访问控制对系统中的所有主客体设置安全标记进行存取控制在访问时只有主体的范围标记与客体的范围标记满足一定的包含关系时,访问才能允许。强制访问控制不是用户能直接感知或进行控制的。它适用于对数据有严格而固定密级分类的部门,例如军事部门和政府部门等。强制控制访问的具体实施步骤(1)对每个主体、客体作安全级别标记与安全范围标记。(2)主体在访问客体时由系统检查各自标记,只有在主客体两种标记都符合允许访问条件时访问才能进行。(3)仅当主体分层密级大于或者等于客体分层密级,且主体非分层范畴集合包含或等于客体非分层范畴集合时,主体才能读客体。(4)仅当主体分层密级小于或者等于客体分层密级,且主体非分层范畴集合被包含或等于客体非分层范畴集合时,主体才能写客体。强制存取控制的特点(1)MAC是对数据本身进行密级标记。(2)无论数据如何复制,标记与数据是一个不可分的整体。(3)只有符合密级标记要求的用户才可以操纵数据。(4)提供了更高级别的安全性。审计•审计追踪使用的是一个专用文件,系统自动将用户对数据库的所有操作记录在上面,对审计追踪的信息做出分析,就能重现导致数据库现有状况的一系列活动,以找出非法存取数据者,同时在一旦发生非法访问后即能提供初始记录供进一步处理。数据加密•数据加密是防止数据库中的数据在存储和传输中失密的有效手段,它的基本思想是:根据一定的算法将原始数据变换为不可直接识别的格式,不知道解密算法的人无法获知数据的内容。统计数据库安全性•指从合法的查询中推导出不合法的信息。比如:某个用户A想知道另一个用户B的工资数额,它可以通过下列两个合法查询获取:(1)用户A和其他N个副教授的工资总额是多少?(2)用户B和其他N个副教授的工资总额是多少?假设第一个查询的结果是X,第二个查询的结果是Y,由于用户A知道自己的工资是Z,那么他就可以计算出用户B的工资=Y-(X-Z)。SQL中的安全性机制1.视图机制通过视图机制将具体用户需要访问的数据加以确定,而将要保密的数据对无权存取这些数据的用户隐藏起来,使得用户只能在视图定义的范围内访问数据,不能随意访问视图定义外的数据,从而自动地对数据提供相应的安全保护。2.自主访问控制与授权机制授权语句授权语句的功能是将指定数据域的指定操作授予指定用户,其语句形式如下:GRANT操作表ON数据域TO用户名表[WITHGRANTOPTION]其中WITHGRANTOPTION表示获得权限的用户还能获得传递权限,即能将获得的权限传授给其他用户。回收语句将权限回收。其具体形式如下:REVOKE操作表ON数据域FROM用户表[RESTRICT/CASCADE]其中操作包括SELECT权、INSERT权、DELETE权、UPDATE权、REFRENCE权和USAGE权数据域即是用户访问的数据对象,包括表、视图和属性用户即是数据库中所登录的用户。数据库的安全标准TCSEC(TDI)标准(1)D级标准:为无安全保护的系统。(2)C1级标准(3)C2级标准(4)B1级标准(5)B2级标准(6)B3级标准(7)A级标准我国国家标准与TCSEC标准TCSEC标准我国标准D级标准无C1级标准第一级:用户自主保护级C2级标准第二级:系统审计保护级B1级标准第三级:安全标记保护级B2级标准第四级:结构保护级B3级标准第五级:访问验证保护级A级标准无8.2数据库的完整性•数据的完整性是指防止合法用户的误操作、考虑不周全造成的数据库中的数据不合语义、错误数据的输入输出所造成的无效操作和错误结果。•完整性就是要保证数据库中数据的正确性和相容性8.2.2完整性基本概念数据库的完整性(Integrity)的基本含义是指数据库的正确性、有效性和相容性,其主要目的是防止错误的数据进入数据库。(1)正确性:正确性是指数据的合法性。(2)有效性:有效性是指数据是否属于所定义域的有效范围。(3)相容性:相容性是指表示同一事实的两个数据应当一致。8.2.3完整性约束条件•完整性约束条件是完整性控制机制的核心。•约束条件分为下面六种类型。(1)静态属性级约束(2)静态元组级约束(3)静态关系级约束(4)动态属性级约束(5)动态元组级约束(6)动态关系级约束•完整性约束条件的设置,一般采用完整性约束语句形式。8.2.4完整性规则和完整性控制•1.完整性规则1)实体完整性规则2)参照完整性规则3)用户完整性规则2.完整性控制•完整性约束控制功能应当具有下述三种功能:(1)定义功能(2)检查功能(3)处理功能参照完整性控制1.外键空值问题•在外键取空值问题上,存在两种情况:如果参照关系的外键是主键组成部分,由实体完整性规则,此时外键值不允许取空值;如果参照关系的外键不是主键的组成部分,则可以根据具体的语义环境确定外键值是否允许空值。2.被参照关系中删除元组问题级联删除。受限删除。置空值删除。3.参照关系中插入元组问题受限插入递归插入4.元组中主键值修改问题不容许修改主键。容许修改主键。8.2.6SQL中的完整性约束机制1.实体完整性在SQL中可以使用PRIMARYKEY子语句对完整性进行描述。【例8-6】对于关系Student(Sno,Sname,Sage,Sdept),可以使用如下语句创建表。CREATETABLEStudent(Sno,CHAR(8),Sname,CHAR(10),Sage,NUMBER(3),Sdept,CHAR(20),PRIMARYKEY(Sno));2.参照完整性参照完整性通过使用FOREIGNKEY子句来描述,其格式如下:FOREIGNKEY(属性名)REFERENCES表名(属性名)[NODELETECASCADES|SETNULL]其中:FOREIGNKEY:定义哪些列为外键。REFERENCES:指明外键对应于哪个表的主键。ONDELETECASCADE:指明删除被参照关系的元组时,同时删除参照关系中元组。SETNULL:表示置为空值方式。3.全局约束全局约束是指一些比较复杂的完整性约束,这些约束涉及到多个属性间的联系或多个不同关系间的联系。可以将它们分为下面的两种情形。(1)基于元组的检查子语句。这种约束是对单个关系的元组值加以约束。方法是在关系定义中的任何地方加上关键字CHECK和约束条件。【例8-7】年龄在16岁和20岁之间,可用CHECK(AGE=16ANDAGE=20)来检测。(2)基于断言。如果完整性约束涉及面较广,与多个关系有关,或者与聚合操作有关,SQL2提供“断言(Assertions)”机制让用户书写完整性约束,断言可以像关系一样,用CREATE语句定义,其格式如下:CREATEASSERTION断言名称CHECK(条件)【例8-8】在教学数据库的课程关系C中用断言描述约束“每位教师开设的课程不能超过10门”。CREATEASSERTIONASSECHECK(10=ALL(SELECTCOUNT(Cno)FROMCourseGROUPBYTEACHER));8.2.7触发器•触发器是用编程的方法实现复杂的商业规则,它可以实现一般的数据完整性约束实现不了的复杂的完整性约束•不需要由用户调用执行,而是当用户对表中的数据进行UPDATE、INSERT或DELETE操作时自动触发执行的。触发器结构触发器由三部分组成:事件:即对数据库的插入、删除、修改等操作。条件:触发器将测试条件是否满足。如果条件满足,就执行相应操作,否则什么也不做。动作:如果触发器测试满足预订的条件,就由DBMS执行相应的动作。触发器的完整性保护功能•触发器在数据库完整性保护中起着很大的作用,一般可用触发器完成很多数据库完整性保护的功能,其中触发事件即是完整性约束条件,而完整性约束检查即是触发器的操作过程,最后结果过程的调用即是完整性检查的处理。SQL中触发器设计ORACLE的定义触发器格式:CREATE[ORREPLACE]TRIGGERtrigger_name{BEFORE|AFTER|INSTEADOF}{INSERT|DELETE|UPDATE[Ofcolumnname{,columnname…}])ONtablename[REFERENCINGcorr_name_def{,corr_name_def…}][FOREACHROW|FOREACHSTATEMENT][WHEN(search_condition)]|BEGINstatement;{statement;…}ENDMSSQLSERVER的定义触发器格式:CREATETRIGGER触发器名称ON表名{FOR|AFTER|INSTEADOF}{[INSERT][,][DELETE][,][UPDATE]}ASSQL语句[...n]触发事件中的时间关键字①AFTER:在触发事件完成之后,测试WHEN条件是否满足,若满足则执行动作部分的操作。②BEFORE:在触发事件进行以前,测试WHEN条件是否满足。若满足则先执行动作部分的操作,然后再执行触发事件的操作(此时可以不管WHEN条件是否满足)。③INSTEADOF:在触发事件发生时,只要满足WHEN条件,就执行动作部分操作,而触发事件的操作不再执行。触发事件•UPDATE、DELETE和INSERT。触发动作•可以只有一个SQL语句,也可以有多个SQL语句,语句之间用分号隔开。触发器类型•元组级触发器•语句级触发器【例8-9】设计用于关系SC的触发器,该触发器规定,如果需要修改关系SC的成绩属性值Sg时,修改之后的成绩Sg不得低于修改之前的成绩Sg,否则就拒绝修改。使用SQL3,该触发器的程序可以编写如下:CREATETRIGGERTRIG1AFTERUPDATEOFSgONSCREFERENCINGOLDASOLDTUPLENEWASNEWTUPLEWHEN(OLDTUPLE.SgNEWTUPLE.Sg)UPDATESCSETSg=OLDTUPLE.SgWHERECno=NEWTUPLE.Cn
本文标题:第8章 数据库的安全性和完整性
链接地址:https://www.777doc.com/doc-3678888 .html