《【教学课件】第8章数据库的安全和完整性约束.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第8章数据库的安全和完整性约束.ppt(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第8 8章章 数据库的安全和完整性约束数据库的安全和完整性约束 数据库的破坏一般来自:数据库的破坏一般来自:1.1.系统故障;系统故障;2.2.并发所引起的数据不一致;并发所引起的数据不一致;3.3.人为的破坏;人为的破坏;4.4.数据的语义错误或对数据的语义错误或对DBDB的错误操作引起的并发所引的错误操作引起的并发所引起的数据库不一致;起的数据库不一致;数据库的安全保护数据库的安全保护(security security protection)protection)数据完整性约束数据完整性约束8.1 8.1 数据库的安全保护数据库的安全保护 主要讨论计算机系统在保证数据库安全方面的技主要
2、讨论计算机系统在保证数据库安全方面的技术措施。术措施。DBMS建立在建立在OS之上,之上,OS应能保证数据库中的数应能保证数据库中的数据必须经由据必须经由DBMS访问,而不允许用户越过访问,而不允许用户越过DBMS,直接通过直接通过OS访问。访问。8.1.1 8.1.1 视图的定义和查询修改视图的定义和查询修改 (1)定义视图,可以限制各个用户的访问范围;定义视图,可以限制各个用户的访问范围;(2)有些有些DBMS没有视图功能,但是系统可以根据没有视图功能,但是系统可以根据用户的访问限制条件,自动的修改查询条件,使其只用户的访问限制条件,自动的修改查询条件,使其只能在给定访问范围内查询。能在给
3、定访问范围内查询。8.1.2 8.1.2 访问控制访问控制 访问控制访问控制(access control)是对用户访问数据库各是对用户访问数据库各种种资源资源的的权力权力的控制。的控制。基表、视图、各种目录以及实用程序等基表、视图、各种目录以及实用程序等创建、撤销、查询、增、删、改等创建、撤销、查询、增、删、改等 在同一在同一DBMS下,可能建立多个数据库,访问控制下,可能建立多个数据库,访问控制在数据库之间是相互独立的。在数据库之间是相互独立的。数据库用户:数据库用户:1.一般数据库用户;一般数据库用户;2.具有支配数据库部分资源权限的数据库用户;具有支配数据库部分资源权限的数据库用户;3
4、.具有具有DBA特权的数据库用户特权的数据库用户 DBMS须解决:须解决:用户的标识与鉴别用户的标识与鉴别以及以及授权(授权(grant-revoke)的问题。的问题。在数据库中,许多用户的权限相同,如分别授权,在数据库中,许多用户的权限相同,如分别授权,十分繁琐,可以为他们定义一个角色。十分繁琐,可以为他们定义一个角色。对角色授权,某用户承担某种角色就拥有该角色对角色授权,某用户承担某种角色就拥有该角色的权限,一个用户可以拥有多个角色和其他权限。的权限,一个用户可以拥有多个角色和其他权限。角色不是用户,不能用做登陆!角色不是用户,不能用做登陆!8.3 8.3 完整性约束检查完整性约束检查 完
5、整性约束的类型完整性约束的类型 以关系数据模型为例分类。以关系数据模型为例分类。1.静态约束静态约束(static constraints)(1)固有约束固有约束(inherent constraints)第一范式第一范式 (2)隐含约束隐含约束(implicit constraints)用用DDL说明,例如:域完整性、实体完整性、说明,例如:域完整性、实体完整性、引用完整性等。引用完整性等。(3)显式约束显式约束(explicit constraints)依赖于数据的语义和应用。依赖于数据的语义和应用。2.动态约束动态约束(dynamic constraints)不是对数据库状态的约束,而是
6、数据库从一个状态不是对数据库状态的约束,而是数据库从一个状态转到另一个状态时要遵守的约束。转到另一个状态时要遵守的约束。完整性约束的说明完整性约束的说明 约束的显式说明方法:约束的显式说明方法:1.用过程说明约束用过程说明约束 让应用程序完成约束的说明和检验。让应用程序完成约束的说明和检验。缺点:缺点:检验分散在应用程序中,增加程序员的负担,检验分散在应用程序中,增加程序员的负担,约束改变会导致程序要修改。约束改变会导致程序要修改。优点:优点:容易实现,目前应用较多。容易实现,目前应用较多。2.用断言用断言(assertions)说明约束说明约束 DBMS提供断言说明语言,用此语言可以写出数据
7、提供断言说明语言,用此语言可以写出数据库完整性断言,由系统编译成约束库库完整性断言,由系统编译成约束库(constraint base)。DBMS的完整性控制子系统,对每个更新事务,用的完整性控制子系统,对每个更新事务,用相关断言进行检查,如果发现违反约束,就回卷该事相关断言进行检查,如果发现违反约束,就回卷该事务。务。例如:例如:Assert 余额约束余额约束 on 储蓄帐:余额储蓄帐:余额 0 缺点:缺点:实现复杂,开销大,处理单一。实现复杂,开销大,处理单一。优点:优点:集中控制,用户不编程,维护方便;集中控制,用户不编程,维护方便;3.用触发子用触发子(triggers)表示约束表示约
8、束 触发子是一种软件机制,形如:触发子是一种软件机制,形如:whenever then Event(激活触发器激活触发器)Condition(检验触发器的条件是否满足检验触发器的条件是否满足)Actions(触发器运行后的动作触发器运行后的动作)传统的数据库系统只能按照用户或应用程序的要求,传统的数据库系统只能按照用户或应用程序的要求,对数据库进行操作,而不能根据发生的事件或数据库对数据库进行操作,而不能根据发生的事件或数据库的状态主动进行相应的处理,这样的数据库系统是被的状态主动进行相应的处理,这样的数据库系统是被动的。动的。主动数据库系统就是具有主动数据库功能的数据库主动数据库系统就是具有
9、主动数据库功能的数据库系统。系统。问题:主动数据库系统和关系数据库系统、面向对问题:主动数据库系统和关系数据库系统、面向对象数据库系统的区别和联系?象数据库系统的区别和联系?主动数据库只是数据库系统的一种功能!主动数据库只是数据库系统的一种功能!假假 设有下列三个关系:设有下列三个关系:Sailors(sid,Sailors(sid,sname,sname,rating,rating,birth,birth,mastermaster)/*/*分分别别为为水水手手的的编编号号、名名字字、级级别别、出出生生日日期期、师师父的编号,每个水手的师父也是水手父的编号,每个水手的师父也是水手*/*/Boa
10、ts(bid,bname,color)Boats(bid,bname,color)/*/*分分别别为为船船的的编编号号、名名字字、颜颜色色*/*/Reserves(sid,bid,day)Reserves(sid,bid,day)/*/*分别为订船水手编号、所订船分别为订船水手编号、所订船编号、日期编号、日期*/*/范例范例.引用完整性规则的实现引用完整性规则的实现 以以Sailors,Boats,Reserves三张表为例,写出实现引用三张表为例,写出实现引用完整性约束的规则。完整性约束的规则。有哪些操作会影响到三张表间的引用完整性?有哪些操作会影响到三张表间的引用完整性?n Reserve
11、s表的表的Insert操作操作n Sailors表的表的Delete操作操作n Boats表的表的Delete操作操作n Reserves表的表的Update操作操作 n Sailors表的表的Update操作操作n Boats表的表的Update操作操作 是否对所有属性的是否对所有属性的Update操作操作都影响引用完整性?都影响引用完整性?规则规则1 1 创建触发器,对创建触发器,对Reserves表的表的InsertInsert操作进行监控,如操作进行监控,如果插入元组的外键属性在果插入元组的外键属性在Sailors和和Boats表中不存在表中不存在,回卷回卷插入该记录的操作。插入该记录
12、的操作。Create trigger referential_integrity_checkBefore Insert on ReservesReferencing NEW as NFor Each RowEventWhen(not(exists(Select*From Sailors Where sid=N.sid)and (exists(Select*From Boats Where bid=N.bid)Rollback;ConditionAction 规则规则2 2 创建触发器,对创建触发器,对Boats表的表的Delete操作进行监控,如果删操作进行监控,如果删除元组的主键是除元组的主
13、键是Reserves表中的外键表中的外键,回卷删除该记录的操回卷删除该记录的操作。作。Create trigger boats_deleteBefore Delete on BoatsReferencing OLD as OFor Each RowEventWhen (exists(Select*From Reserves Where bid=O.bid)Rollback;ConditionAction 规则规则3 3 创建触发器,对创建触发器,对Sailors表的表的Delete操作进行监控,如果操作进行监控,如果删除元组的主键是删除元组的主键是Reserves表中的外键表中的外键,则将则将
14、Reserves表中表中的相关记录删除。的相关记录删除。Create trigger sailors_deleteAfter Delete on SailorsReferencing OLD as OFor Each RowEventWhen (exists(Select*From Reserves Where sid=O.sid)Delete From Reserves Where sid=O.sid;ConditionAction 规则规则4 4 创建触发器,对创建触发器,对Reserves表的表的UpdateUpdate操作进行监控,如操作进行监控,如果修改元组果修改元组sidsid和和
15、bidbid属性值在属性值在Sailors和和Boats表中不存在表中不存在,回卷修改该记录的操作。回卷修改该记录的操作。Create trigger referential_integrity_check Update of sid,bid on ReservesReferencing NEW as NFor Each RowEventBeforeWhen(not(exists(Select*From Sailors Where sid=N.sid)and (exists(Select*From Boats Where bid=N.bid)Rollback;ConditionAction 规
16、则规则5 5 Create trigger sailors_sid_updateBefore Update of sid on SailorsReferencing Old as OFor Each RowWhen(exists(Select*From Reserves Where sid=O.sid)Rollback;创建触发器,对创建触发器,对SailorSailors表的表的Update操作进行监控,如操作进行监控,如果果ReservesReserves表中有元组引用修改前的表中有元组引用修改前的sidsid值作为外键值作为外键,回卷回卷此修改操作。此修改操作。监视监视SailorsSa
17、ilors表上的表上的InsertInsert操作,对每条操作,对每条InsertInsert语句,语句,判断其插入后的元组是否有年龄小于判断其插入后的元组是否有年龄小于1818的水手,将这样的水手,将这样的水手自动插入到的水手自动插入到YoungSailorsYoungSailors表中(表中(YoungSailorsYoungSailors表表与与SailorsSailors表的模式相同)。表的模式相同)。规则规则6 6 问题:与上面各题创建触发器的范例有什么不同?如问题:与上面各题创建触发器的范例有什么不同?如何实现?何实现?Create trigger young_sailor_updateAfter Insert on SailorsReferencing New as NFor Each StatementInsert into YoungSailors(sid,name,age,rating)Select sid,name,age,rating From N Where N.age19;针对每条语句!针对每条语句!