版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章数据库的安全性与完整性
7.1基本概念数据库的安全性:是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。数据库安全性是一个涵盖许多问题的广阔领域。安全性的类型:某些信息的访问关系到法律和伦理的问题。有些信息可能会认为是属于个人信息,未授权人员不能对其进行访问。有关政府、机构或公司层次上的政策问题,这些政策确定哪些信息不应该向公众公开。与系统有关的问题。系统级上应加强哪几类安全功能(如:物理硬件级、OS级、DBMS级)一些组织需要把安全性问题划分为多个安全级别(如:绝密、机密、秘密、公开)。
数据库的完整性:是指数据的正确性、有效性和相容性。7.2数据库安全性控制
在一个多用户数据库系统中,DBMS必须提供相应的技术以保证特定的用户或用户组,只能访问数据库的指定部分,而不能访问数据库的其他部分。典型的DBMS包含一个数据库安全和授权子系统,由它来负责实现一个数据库的安全性功能以避免发生未授权的访问。DBMS的安全子系统主要包括两部分:
定义用户权限,并将用户权限登记到数据字典中。合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。7.2数据库安全性控制安全措施应该一级一级层层设置。计算机系统的安全模型:用户标识和鉴别DB数据密码存储OS安全保护DBMS存取控制7.2数据库安全性控制二、存取控制1.存取控制方法(1)自主存取控制(DAC-DiscretionaryAccessControl
)这种方法是基于授予和收回权限的机制。它已经发展成为关系数据库系统的主要安全机制。这种机制是一种“all-or-nothing”方法,即一个用户要么拥有该特权,要么没有该特权。但是在很多应用中,还需要另外一种安全性策略,这种策略需要在安全性级别的基础上对数据或用户进行分类。
7.2数据库安全性控制(2)强制存取控制(MAC-MandatoryAccessControl)在强制存取控制(MAC)方法中,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。MAC适用于对数据有严格而固定密级分类的部门。主体是指数据库中数据访问者(用户、DBA)、进程、线程等,是系统中的活动实体。客体是指数据库中数据及其载体(表、视图、索引、存储过程等),是系统中的被动实体。7.2数据库安全性控制
对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)。敏感度标记被分成若干级别,例如绝密、机密、秘密、公开等。主体的敏感度标记称为许可证级别。客体的敏感度标记称为密级。客体子集主体子集访问自主访问控制与强制访问控制的比较
自主访问控制优点:有高度的灵活性,这使得它适用于多个应用领域。缺点:防范恶意攻击的脆弱性。因为一旦被授权用户访问以后,自主授权模型就不能对如何传播和如何使用信息进行任何的控制了。
强制访问控制优点:可以保证更高程度的保护,防止了信息的非法流动。适用于需要高度保护的政府、军事等应用。缺点:过于严格,要求将主体和客体严格地划分到安全级别中,因此仅适用于少数环境。7.2数据库安全性控制2.自主存取控制的实现(1)用户分类和权限
用户:系统用户(DBA)、数据对象属主(owner)、一般用户、公共用户(public)。
权限:包括数据访问权限(读、插入、修改、删除等)和数据库模式修改权限(索引、资源、修改、撤消等)两类。7.2数据库安全性控制(2)授权
GRANT语句向用户授予操作权限。一般格式为:GRANT{<权限>[,<权限>]…|ALL}ON<对象类型><对象名>TO{<用户>[,<用户>]...|PUBLIC}
[WITHGRANTOPTION]
语义为:将对指定操作对象的指定操作权限授予指定的用户。
ALL:所有权限
PUBLIC:公共用户对不同类型的操作对象有不同的操作权限。
可将此权限转授7.2数据库安全性控制例:
DBA把在数据库DB1中建立表的权限授予用户U1。
GRANTCREATETABONDATABASEDB1TOU1;U1隐含权限?(3)收回权限格式:REVOKE{<权限>[,<权限>]…|ALL}ON<对象类型><对象名>FROM{<用户>[,<用户>]...|PUBLIC}[CASCADE|RESTRICT];CASCADE:级联(但系统只收回直接或间接从某处获得的权限)
例:P.214图7-47.2数据库安全性控制(4)数据库角色的授权角色:
是权限的集合。数据库角色:是一组对数据库进行各种操作的权限的集合。将某一组用户设置为某一角色,他将拥有该角色中的每一个权限。这样只要对角色进行权限设置便可以实现对所有用户权限的设置,大大减少了管理员的工作量,简化了授权的过程。用户与角色之间存在多对多的联系。创建角色必须具有createrole系统权限。7.2数据库安全性控制创建角色:
CREATEROLE<角色名>将权限授予角色:
GRANT<权限>[,<权限>]…ON<对象类型><对象名>TO<角色>[,<角色>]...将角色授予用户:
GRANT<角色>[,<角色>]…TO<角色>[,<用户>]...[WITHADMINOPTION]可将此权限转授回收角色的权限:
REVOKE<权限>[,<权限>]…ON<对象类型><对象名>FROM<角色>[,<角色>]...7.2数据库安全性控制三、视图机制通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。四、数据加密
是在不安全的环境中维护数据安全性的一种方法。加密技术首先使用某个预定的加密密钥对数据应用加密算法,然后结果数据必须要使用解密密钥进行解密,以恢复原来的数据。五、审计
审计是对选定的用户动作的监控和记录,以监测可能的不合法行为。审计常用于:(1)审查可疑的活动。(2)监视和收集关于数据库活动的数据。7.2数据库安全性控制
六.统计数据库的安全性
统计数据库:用于提供基于各种标准的统计信息和值汇总数据。只允许用户查询聚集类型信息,不允许查询单个记录信息的数据库。
统计数据库用户:政府统计部门或市场研究公司等。他们被允许访问统计数据库,以检索与人口有关的统计信息,但同时还需要禁止他们访问有关特定个人的详细机密性信息。统计数据库的安全性必须确保有关个人的信息不能被访问。7.2数据库安全性控制在统计DB中存在着特殊的安全问题:即可能有隐蔽的信息通道,使合法的查询导出不合法的信息。
例1:查询一:本单位20岁以下的教师有多少?查询二:本单位20岁以下的教师工资总额是多少?若一的结果为1,则二为该职工的工资。解决:限定查询的记录量(查询至少涉及N个以上的记录)例2:查询一:用户A与其他N个职工的工资总额是多少?查询二:用户B与其他N个职工的工资总额是多少?假设二的查询结果为Y,一的查询结果为X,A的工资为Z,则B的工资=Y-(X-Z)解决:限定查询的次数(规定任意两个查询相交的数据项不能超过M个)7.3数据库的完整性控制
完整性控制的规则:一条完整性规则可以用一个五元组(D,O,A,C,P)来表示:(1)D(Data)约束作用的数据对象。(2)O(Operation)触发完整性检查的数据库操作,即当用户发出什么操作请求时需要检查该完整性规则,是立即检查还是延迟检查。(3)A(Assertion)数据对象必须满足的断言或语义约束,这是规则的主体。(4)C(Condition)选择A作用的数据对象值的谓词。(5)P(Procedure)违反完整性规则时触发的过程。7.3数据库的完整性控制如:在“讲师工资不得低于1000元”的约束中:D约束作用的对象为工资Sal属性O插入或修改职工元组时ASal不能小于1000C职称=‘讲师’(A仅作用于职称=‘讲师'的记录)P拒绝执行该操作7.3数据库的完整性控制
完整性的语义约束和检查:(1)立即执行约束:检查是否违背完整性约束的时机通常是在一条语句执行完后立即检查。(2)延迟执行约束:完整性检查延迟到整个事务执行结束后再进行,检查正确方可提交。(3)在事务的某些特定检查点检查。(4)在一个维护操作请求之后且执行之前检查。(5)在DBA或审计员发出检查请求时。7.3数据库的完整性控制1、静态列级约束是对一个列的取值域的说明:对数据类型、格式的约束;对取值范围或取值集合的约束;对空值的约束等。2、静态元组约束是规定元组的各个列之间的约束关系。
例:讲师工资不低于1000元.3、静态关系约束在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:
实体完整性约束、参照完整性约束、函数依赖约束、统计约束(字段值与关系中多个元组的统计值之间的约束关系。如:经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍)。
7.3数据库的完整性控制4、动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
(1)修改列定义时的约束(2)修改列值时的约束(如:职工工资调整不得低于其原来的工资)5、动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件。
如:新工资不得低于原工资+工龄*1.56、动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。7.3数据库的完整性控制例:CREATETABLEsc(snochar(8),cnochar(4),gradeint,
CONSTRAINTpk_scprimarykey(sno,cno))7.3数据库的完整性控制(2)外码约束外码约束主要用来维护两个表之间数据的一致性,实现表之间的参照完整性。格式:FOREIGNKEY(<列名表>)REFERENCES<目标表>[(<列名表>)][ONDELETE<参照动作>][ONUPDATE<参照动作>]<参照动作>:NOACTION、CASCADE、RESTRICT、SETNULL、SETDEFAULT7.3数据库的完整性控制例:CREATETABLEauthors(authoridintPRIMARYKEY,authornamechar(20),addresschar(30))CREATETABLEbook(bidintPRIMARYKEY,bnamechar(8)NOTNULL,authoridint,
CONSTRAINTfk_bookFOREIGNKEY(authorid)REFERENCESauthors(authorid))7.3数据库的完整性控制
假定被参照关系称为父表,参照关系称为子表。当删除(DELETE)或修改(UPDATE)父表中的某行时,对子表采取的动作可有下列的选择:
CASCADE(级联):删除或修改父表中的行并自动删除或修改在子表中匹配的行。
RESTRICT(受限):只有当子表外码中没有与父表要删除或修改的主码相同时,才能删除父表中的行,否则拒绝执行此操作。
SETNULL(置空值):删除或修改父表中的行并将子表中的外码设置为NULL。只有当外码没有被设置成NOTNULL时才有效。
SETDEFAULT(置默认值):删除或修改父表中的行并将子表中的外码设置为指定的默认值。只有外码指定了默认值时才有效。
NOTACTION:拒绝对父表进行删除或修改。7.3数据库的完整性控制(3)惟一约束惟一约束用于指定一个或多个列的组合值具有惟一性,以防止在列中输入重复的值。应用场合:每个表中只能有一个主码,因此当表中已经有一个主码时,如果还要保证其他的标识符惟一时,就可以使用惟一性约束。例:CREATETABLEstudent(snointPRIMARYKEY,snamechar(8)NOTNULL,sexchar(2),cardnochar(18)UNIQUE)7.3数据库的完整性控制(4)检查约束检查约束对输入列或者整个表中的值设置检查条件,以限制输入值。格式:CHECK(<条件表达式>)
例:CREATETABLEstudent(snointPRIMARYKEY,snamechar(8)NOTNULL,sexchar(2),cardnochar(18)UNIQUE,
CONSTRAINTchk_sexcheck(sexin(‘男’,’女’)))7.3数据库的完整性控制(5)默认约束默认约束指在插入操作中没有提供输入值时,系统自动指定值。例:CREATETABLEstudent(snointPRIMARYKEY,snamechar(8)NOTNULL,sexchar(2)DEFAULT‘男’
cardnochar(18)UNIQUE,
CONSTRAINTchk_sexcheck(sexin(‘男’,’女’)))7.3数据库的完整性控制2、域约束CREATEDOMAIN<域名><域类型>CHECK(<条件>)[例7.13]CREATEDOMAINGradeCHAR(1)DEFAULT‘?’CONSTRAINTValid_gradeCHECK(VALUEIN(‘A’,’B’,’C’,’D’,’E’,’?’));7.3数据库的完整性控制3、断言
CHECK子句只对定义它的表起作用,对其它表不起作用。[例7.11]对关系SC的定义加入子句:CHECK(snoIN(SELECTsnoFROMStudent))CHECK(cnoIN(SELECTcnoFROMCourse))当对表Student中删除一个元组时,这个操作与关系SC的CHECK无关。CHECK子句中的条件尽量不要涉及其他关系。7.3数据库的完整性控制当约束条件涉及多个表、使用聚集操作时应使用断言。
格式:CREATEASSERTION<断言名>CHECK(<条件>)[例7.15]每门课程只允许100个学生选修。CREATEASSERTIONAsser1CHECK(ALL(SELECTCOUNT(sno)FROMSCGROUPBYcno)<=100);[例7.16]不允许计算机学院的学生选修019号课程。CREATEASSERTIONAsser2CHECKNOTEXISTS(SELECT*FROMStudent,SCWHEREStudent.sno=SC.snoANDStudent.dept=‘计算机学院’ANDSC.cno=‘019’);7.4触发器
触发器:是靠事件驱动的特殊过程。触发器与存储过程的区别:存储过程通过其他程序的调用来运行,或直接启动运行,可传递参数;而触发器的启动运行必须由一个发生的事件来激发,它是自动隐式运行的,触发器不能接收参数,也不能被调用。触发器的类型:
DML触发器:它是在执行insert、update或delete语句时被激发执行的,它只能定义在表上。
替代触发器:是被激发用以代替执行DML语句,它可以定义在表或视图上。
系统触发器:它是在执行create、alter或drop语句;执行数据库的启动或关闭、用户的登录或退出语句时被激发执行的。
7.4触发器
触发器的主要用途:
审计:可记录登录数据库的用户。将更新数据的用户和时间日期等信息记录在审计表中。
实现复杂的业务规则:如将被删除的用户保存在用户历史信息中;更新股票表只能在上市交易时间内。可进行系统事件的处理:在表中内容发生变更时,自动通知其他程序采取相应的处理。
增强表的完整性约束:如更新职工的工资时更新后的工资不能低于更新前的工资。7.4触发器
触发器的组成:
触发事件触发条件触发器动作
触发器的一般模型:
CREATETRIGGER<触发器名>{BEFORE|AFTER|INSTEADOF}<触发事件>ON<表名>[REFERENCING[OLDAS<旧元组变量>][NEWAS<新元组变量>]]
[OLDTABLEAS<旧表名>]][NEWTABLEAS<新表名>]]
[FOREACH{ROW|STATEMENT}][WHEN<触发条件>]<SQL语句>7.4触发器
<触发事件>:INSERT|DELETE|UPDATE[OF<列名列表>]FOREACH{ROW|STATEMENT}:
指定触发器的粒度。
FOREACHROW:为行级触发器,当该触发器监视的表中的元组发生改变时,就激活触发器,每变更一行就触发一次。
FOREACHSTATEMENT(默认):为语句级触发器。在被监控表上执行INSERT、DELETE或UPDATE语句,就会激活触发器,而不管该语句的执行会改变多少元组(即使没有改变发生也会激活触发器)。该触发器就在语句执行之前或之后只激发一次。
REFERENCING:指向更新前或更新后的内容。
BEFORE|AFTER|INSTEADOF:
指定触发器执行的时机。7.4触发器
在行级触发器中,REFERENCING的格式:
REFERENCING[OLDAS<旧行别名>][NEWAS<新行别名>]触发事件旧行别名新行别名insert无指定update指定指定delete指定无7.4触发器
BEFORE触发器(前触发器)
在触发事件之前执行。不允许它们修改数据库,但可以检测WHEN子句中定义的前提条件,接受或终止触发事件。BEFORE触发器的一个典型用途是保持应用指定的数据完整性。
例:有关系Transcript(sno,cno,semester,grade)
CrsLimits(cno,semester,limit)
创建一个触发器,它监控插入到Transcript中的元组,以限制课程注册的人数。CREATETRIGGERCountCheckBEFOREINSERTONTranscriptREFERENCINGNEWASNFOREACHROWWHEN((SELECTCOUNT(T.sno)FROMTranscriptTWHERET.cno=N.cnoANDT.semester=N.semester)>=(SELECTlimitFROMCrsLimitsLWHEREL.cno=N.cnoANDL.semester=N.semester))ROLLBACK7.4触发器
AFTER触发器(后触发器)
在触发事件已经改变数据库之后执行。允许它们可以改变数据库,因此它们可以激活其他触发器。AFTER触发器作用于应用逻辑的扩展。
例:有关系EMP(eno,ename,esex,salary,dno)
创建一个触发器,它监控雇员工资的涨幅不能超过5%。CREATETRIGGERLimitSalaryRaiseAFTERUPDATEOFsalaryONEMPREFERENCINGOLDASONEWASNFOREACHROWWHEN(N.salary-O.salary>0.05*O.salary)UPDATEEMPSETsalary=1.05*O.salaryWHEREeno=O.eno7.4触发器[例7.18]规定修改SC表的grade值时,修改后的值不能低于修改前的值。CREATETRIGGERTrig_gradeAFTERUPDATEOFgradeONSCREFERENCINGOLDASoldgNEWASnewgFOREACHROWWHEN(oldg.grade>newg.grade)UPDATESCSETgrade=oldg.gradeWHEREcno=o;触发事件触发条件触发器动作7.4触发器
例:有关系EMP(eno,ename,esex,salary,dno)
创建一个触发器,每次工资增长之后将所有雇员新的平均工资记录到LOG表中。CREATETRIGGERRecordNewAverageAFTERUPDATEOFsalaryONEMPFOREACHSTATEMENTINSERTINTOLOGVALUES(CURRENT_DATE,(SELECTAVG(salary)FROMEMP))
7.4触发器
例:有关系:Transcript(sno,cno,semester,grade)
Teaching(tno,cno,semester)
有视图:IdleTeaching(cno,semester),该视图仅包含那些Teaching表中与Transcript表中没有相关元组的课程(既没有学生选修的课程)。
创建一个触发器,当学生放弃或修改选修的课程时,从Teaching表中删除所有在IdleTeaching中发现的元组。CREATETRIGGERMainTainCoursesNonEmptyAFTERDELETE,UPDATEOFcno,semesterONTranscriptFOREACHSTATEMENT
DELETEFROMTeachingWHEREEXISTS(SELECT*FROMIdleTeachingTWHEREsemester=T.semesterANDcno=T.cno)
7.4触发器
INSTEADOF触发器(替换触发器)INSTEADOF触发器最普遍的应用是对视图的维护。视图上的更新事件可以通过触发器监控,但替换更新的是视图的基础表。
例:有关系EMP(eno,ename,esex,salary,dno)
DEPT(dno,dname)
有下面的视图:
CREATEVIEWWorksIn(eno,dname)ASSELECT(EMP.eno,DEPT.dname)FROMEMP,DEPTWHEREEMP.dno=DEPT.dno
7.4触发器
假设在视图上执行下面的操作:
DELETEFROMWorksInWHEREeno=’11111111’
该操作被转换为该视图基础表EMP和DEPT上相应的操作。但是,可能会有多种转换:可以删除eno为的雇员所在的部门;可以删除雇员;可以将雇员元组中的dno字段置为NULL。
无法自动决定这三种可能性中哪种是正确的。可以设计INSTEADOF触发器来指定合适的动作。如:CREATETRIGGERWorksInTrigiINSTEADOFDELETEONWorksInREFERENCINGOLDASOFOREACHROW
UPDATEEMPSETdno=NULLWHEREeno=O.enoSQLServer中触发器的创建CREATETRIGGERtrigger_nameON{table|view}[WITHENCRYPTION]--加密文本{{{FOR|AFTER|INSTEADOF}--触发类型{[INSERT][,][UPDATE]}--触发事件AS[{IFUPDATE(column)--测试在指定列上进行的INSERT或UPDATE操作[{AND|OR}UPDATE(column)][…n]|IF(COLUMNS_UPDATED(){bitwise_operator}--测试是否插入或修改了提及的列。updated_bitmask)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 车库出租合同
- 临床乳腺癌自查及定期筛查重点人群
- 2026唐山人才发展集团(第四十期)空中乘务员、安全员、机场综合服务员招聘选拔备考题库及完整答案详解1套
- 2026山东医药大学招聘8人备考题库(博士辅导员)及答案详解(各地真题)
- 2026浙江杭州上城区闸弄口街道办事处编外工作人员招聘2人备考题库及答案详解(易错题)
- 2026陕西西安经开第十二小学招聘备考题库含答案详解(模拟题)
- 2026年台州市黄岩区教育局公开招聘教师25人备考题库附答案详解(培优b卷)
- 2026新疆第十师北屯市社会引进高层次事业编工作人员6人备考题库含答案详解(预热题)
- 2026西北工业学校现代服务管理系招聘备考题库及参考答案详解一套
- 2026江苏南京大学YJ202601961现代工程与应用科学学院博士后招聘1人备考题库附答案详解(综合题)
- 机器人技术机械臂
- 医院培训课件:《临床输血安全管理》
- 医疗垃圾分类培训考核试题(附答案)
- (国网)社会单位一般作业人-网络信息安全准入考试复习题及答案
- 常识题目及答案大全初中
- 2025年陕西高中学业水平合格考试地理试卷试题(含答案)
- 国际高中入学考-数学试题(英语试题)
- 2022省级政府和重点城市一体化政务服务能力评估报告
- 《小学语文新课程标准》
- 护理法律法规与纠纷防范培训
- DB32T 4954-2024现代灌区管理规范
评论
0/150
提交评论