武大计算机系数据库原理与技术课件7章_第1页
武大计算机系数据库原理与技术课件7章_第2页
武大计算机系数据库原理与技术课件7章_第3页
武大计算机系数据库原理与技术课件7章_第4页
武大计算机系数据库原理与技术课件7章_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章数据库的安全性与完整性

7.1基本概念数据库的安全性:是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。数据库安全性是一个涵盖许多问题的广阔领域。安全性的类型:某些信息的访问关系到法律和伦理的问题。有些信息可能会认为是属于个人信息,未授权人员不能对其进行访问。有关政府、机构或公司层次上的政策问题,这些政策确定哪些信息不应该向公众公开。与系统有关的问题。系统级上应加强哪几类安全功能(如:物理硬件级、OS级、DBMS级)一些组织需要把安全性问题划分为多个安全级别(如:绝密、机密、秘密、公开)。

数据库的完整性:是指数据的正确性、有效性和相容性。7.2数据库安全性控制

在一个多用户数据库系统中,DBMS必须提供相应的技术以保证特定的用户或用户组,只能访问数据库的指定部分,而不能访问数据库的其他部分。典型的DBMS包含一个数据库安全和授权子系统,由它来负责实现一个数据库的安全性功能以避免发生未授权的访问。

DBMS的安全子系统主要包括两部分:

定义用户权限,并将用户权限登记到数据字典中。合法权限检查,若用户的操作请求超出了定义的权限,系统将拒绝执行此操作。7.2数据库安全性控制安全措施应该一级一级层层设置。计算机系统的安全模型:用户标识和鉴别DB数据密码存储OS安全保护DBMS存取控制7.2数据库安全性控制数据库安全控制方法一、用户标识与鉴别1.利用用户自身具备的各种自然特征标识自己和提供鉴别的依据。2.利用用户持有的证件。3.利用口令。口令保密可采用的一些方法:(1)扩大口令集和口令长度。(2)规定口令的生效时间,定期或不定期地更换口令。(3)设置多层口令系统。(4)设置动态口令。7.2数据库安全性控制二、存取控制1.存取控制方法(1)自主存取控制(DAC-DiscretionaryAccessControl

)

这种方法是基于授予和收回权限的机制。它已经发展成为关系数据库系统的主要安全机制。这种机制是一种“all-or-nothing”方法,即一个用户要么拥有该特权,要么没有该特权。但是在很多应用中,还需要另外一种安全性策略,这种策略需要在安全性级别的基础上对数据或用户进行分类。

7.2数据库安全性控制(2)强制存取控制(MAC-MandatoryAccessControl)

在强制存取控制(MAC)方法中,每一个数据对象被标以一定的密级,每一个用户也被授予某一个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。强制存取控制因此相对比较严格。

MAC适用于对数据有严格而固定密级分类的部门。主体是指数据库中数据访问者、(用户、DBA)进程、线程等,是系统中的活动实体。客体是指数据库中数据及其载体(表、视图、索引、存储过程等),是系统中的被动实体。7.2数据库安全性控制

对于主体和客体,DBMS为它们每个实例(值)指派一个敏感度标记(Label)。敏感度标记被分成若干级别,例如绝密、机密、秘密、公开等。主体的敏感度标记称为许可证级别。客体的敏感度标记称为密级。客体子集主体子集访问7.2数据库安全性控制

MAC机制就是通过对比主体的Label和客体的Label,最终确定主体是否能够存取客体。当某一主体以标记label注册入系统时,系统要求他对任何客体的存取必须遵循如下规则:

①仅当主体的许可证级别大于或等于客体的密级时,该主体才能读取相应的客体;②

仅当主体的许可证级别小于或等于客体的密级时,该主体才能写相应的客体。这两种规则的共同点在于它们均禁止了拥有高许可证级别的主体更新低密级的数据对象,从而防止了敏感数据的泄漏。自主访问控制与强制访问控制的比较

自主访问控制优点:有高度的灵活性,这使得它适用于多个应用领域。缺点:防范恶意攻击的脆弱性。因为一旦被授权用户访问以后,自主授权模型就不能对如何传播和如何使用信息进行任何的控制了。强制访问控制优点:可以保证更高程度的保护,防止了信息的非法流动。适用于需要高度保护的政府、军事等应用。过于严格,要求将主体和客体严格地划分到安全级别中,因此仅适用于少数环境。7.2数据库安全性控制2.自主存取控制的实现(1)用户分类和权限

用户:系统用户(DBA)、数据对象属主(owner)、一般用户、公共用户(public)。

权限:包括数据访问权限(读、插入、修改、删除等)和数据库模式修改权限(索引、资源、修改、撤消等)两类。7.2数据库安全性控制(2)授权

GRANT语句向用户授予操作权限。一般格式为:

GRANT{<权限>[,<权限>]…|ALL}ON<对象类型><对象名>TO{<用户>[,<用户>]...|PUBLIC}

[WITHGRANTOPTION]

语义为:将对指定操作对象的指定操作权限授予指定的用户。

ALL:所有权限

PUBLIC:公共用户对不同类型的操作对象有不同的操作权限。

可将此权限转授7.2数据库安全性控制例:把查询表SC和修改其学号的权限授给用户

U2和U4。

GRANTSELECT,

UPDATE(Sno)ONTABLESCTOU2,U4;例:把对表SC的INSERT权限授给用户U5,并允许将此权限再授予其他用户。

GRANTINSERTONTABLESCTOU5WITHGRANTOPTION;U5还可以将此权限授予U6:

GRANTINSERTONTABLESCTOU6;PUBLIC;全体。U6能不能再传播此权限?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数据库安全性控制[例7-7]

CREATEROLEC1;

GRANTSELECT,INSERT

ONTABLEStudentTOC1;

GRANTC1TOU1,U2,U3;

GRANTUPDATE,DELETEONTABLEStudentTOC1;

REVOKEC1FROMU3;REVOKEINSERTONTABLEStudentFROMC1;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数据库的完整性控制一、数据库的完整性数据库的完整性:是指数据的正确性、有效性和相容性。说明:完整性是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出。

数据库完整性约束条件:加在数据库数据之上的语义约束条件。完整性检查:DBMS中检查数据是否满足完整性条件的机制。

DBMS的完整性控制机制应具有三个方面的功能:(1)定义功能:提供定义完整性约束条件的机制。(2)检查功能:检查用户发出的操作请求是否违背了完整性约束条件。(3)防范功能:如果发现用户的操作请求使数据违背了完整性约束条件,采取一定的动作来保证数据的完整性。

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数据库的完整性控制二、完整性约束条件

作用的对象:关系、元组、列静态约束:是指数据库每一确定状态时的数据对象所应满足的约束条件,它是反映数据库状态合理性的约束。动态约束:是指数据库从一种状态转变为另一种状态时,新、旧值之间所应满足的约束条件,它是反映数据库状态变迁的约束。7.3数据库的完整性控制1、静态列级约束是对一个列的取值域的说明:对数据类型、格式的约束;对取值范围或取值集合的约束;对空值的约束等。2、静态元组约束是规定元组的各个列之间的约束关系。

例:

讲师工资不低于1000元.3、静态关系约束在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。常见的静态关系约束有:

实体完整性约束、参照完整性约束、函数依赖约束、统计约束(字段值与关系中多个元组的统计值之间的约束关系。如:经理的工资不得高于本部门职工平均工资的5倍,不得低于本部门职工平均工资的2倍)。

7.3数据库的完整性控制4、动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:

(1)修改列定义时的约束

(2)修改列值时的约束(如:职工工资调整不得低于其原来的工资)5、动态元组约束是指修改元组的值时元组中各个字段间需要满足某种约束条件。

如:新工资不得低于原工资+工龄*1.56、动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。7.3数据库的完整性控制三、SQL中的完整性约束约束分类列级约束:只能应用在一列上。表级约束:可以应用在一个表中的多列上。当约束用于表级时,应按下列形式设置:

CONSTRAINT<约束名>各种约束形式例:CREATETABLEbook(bidintNOTNULL,--列级约束

bnamechar(8)NOTNULL,--列级约束

authoridchar(10))7.3数据库的完整性控制1、基本表的约束(1)主码约束主码能够惟一地确定表中的每一条记录,主码不能取空值。主码约束可以保证实体的完整性。格式:PRIMARYKEY(<列名表>)例:CREATETABLEbook(bidintPRIMARYKEY,bnamechar(8)NOTNULL,authoridchar(10))

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=‘计算机学院’ANDo=‘019’);7.4触发器

触发器:是靠事件驱动的特殊过程。触发器与存储过程的区别:存储过程通过其他程序的调用来运行,或直接启动运行,可传递参数;而触发器的启动运行必须由一个发生的事件来激发,它是自动隐式运行的,触发器不能接收参数,也不能被调用。触发器的类型:

DML触发器:它是在执行insert、update或delete语句时被激发执行的,它只能定义在表上。

替代触发器:是被激发用以代替执行DML语句,它可以定义在表或视图上。

系统触发器:它是在执行create、alter或drop语句;执行数据库的启动或关闭、用户的登录或退出语句时被激发执行的。

7.4触发器

触发的时机:

before:

在事件发生之前触发。

after:

在事件发生之后触发。触发器的主要用途:

审计:可记录登录数据库的用户。将更新数据的用户和时间日期等信息记录在审计表中。

实现复杂的业务规则:如将被删除的用户保存在用户历史信息中;更新股票表只能在上市交易时间内。

远程数据复制:

可进行系统事件的处理:在表中内容发生变更时,自动通知其他程序采取相应的处理。

增强表的完整性约束:如更新职工的工资时更新后的工资不能低于更新前的工资。7.4触发器

触发器的组成:

(1)触发事件(2)触发条件(3)触发器动作创建触发器的格式:

CREATETRIGGER<触发器名>[BEFORE|AFTER]<触发事件>ON<表名>[REFERENCING<旧值或新值名表>]

[WHEN<触发条件>][FOREACHROW]<SQL语句>

[FOREACHROW]:

选该选项,则为行级触发器,否则为语句级触发器。默认是语句级触发器。行触发器是由触发语句所变更的每一行激发的,既每变更一行就触发一次。若触发器是语句级,则该触发器就在语句执行之前或之后只激发一次。7.4触发器

在行级触发器中,REFERENCING的格式:

REFERENCING[OLDAS<旧行别名>][NEWAS<新行别名>]触发事件旧行别名新行别名insert无指定update指定指定delete指定无7.4触发器[例7.18]规定修改SC表的grade值时,修改后的值不能低于修改前的值。

CREATETRIGGERTrig_gradeAFTERUPDATEOFgradeONSCREFERENCINGOLDASoldgNEWASnewgFOREACHROWWHEN(oldg.grade>newg.grade)UPDATESCSETgrade=oldg.gradeWHEREo;触发事件触发条件触发器动作SQLServer中触发器的创建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)

{comparison_operator}column_bitmask[…n]

}]

sql_statement[…n]--触发器动作

}

}

inserted表和delete

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论