第8章 数据库的安全和完整性约束
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
优点:集中控制,用户不编程,维护方便; 优点:集中控制,用户不编程,维护方便; 缺点:实现复杂,开销大,处理单一. 缺点:实现复杂,开销大,处理单一. 3.用触发子 用触发子(triggers)表示约束 用触发子 表示约束 触发子是一种软件机制,形如: 触发子是一种软件机制,形如: whenever <条件 then <动作 条件> 动作> 条件 动作 Event(激活触发器 激活触发器) 激活触发器 Condition(检验触发器的条件是否满足 检验触发器的条件是否满足) 检验触发器的条件是否满足 Actions(触发器运行后的动作 触发器运行后的动作) 触发器运行后的动作
传统的数据库系统只能按照用户或应用程序的要求, 传统的数据库系统只能按照用户或应用程序的要求, 对数据库进行操作, 对数据库进行操作,而不能根据发生的事件或数据库 的状态主动进行相应的处理,这样的数据库系统是被 的状态主动进行相应的处理, 动的. 动的. 主动数据库系统就是具有主动数据库功能的数据库 系统. 系统.
2.用断言 用断言(assertions)说明约束 用断言 说明约束 DBMS提供断言说明语言,用此语言可以写出数据 提供断言说明语言, 提供断言说明语言 库完整性断言,由系统编译成约束库(constraint base) . 库完整性断言,由系统编译成约束库 DBMS的完整性控制子系统,对每个更新事务,用 的完整性控制子系统,对每个更新事务, 的完整性控制子系统 相关断言进行检查,如果发现违反约束, 相关断言进行检查,如果发现违反约束,就回卷该事 务. 例如: 储蓄帐:余额≥ 例如:Assert 余额约束 on 储蓄帐:余额≥0
在数据库中,许多用户的权限相同,如分别授权, 在数据库中,许多用户的权限相同,如分别授权, 十分繁琐,可以为他们定义一个角色. 十分繁琐,可以为他们定义一个角色. 对角色授权, 对角色授权,某用户承担某种角色就拥有该角色 的权限,一个用户可以拥有多个角色和其他权限. 的权限,一个用户可以拥有多个角色和其他权限. 角色不是用户,不能用做登陆! 角色不是用户,不能用做登陆!
When (exists(Select * From Reserves Where sid = O.sid)) Delete From Reserves Condition Where sid = O.sid; Action
规则4 规则4
创建触发器, 表的Update操作进行监控, 创建触发器,对Reserves表的Update操作进行监控,如 表的Update操作进行监控 果修改元组sid和bid属性值在 果修改元组sid和bid属性值在Sailors和Boats表中不存在, 和 表中不存在 sid 属性值在 回卷修改该记录的操作. 回卷修改该记录的操作. Create trigger referential_integrity_check Before Update of sid,bid on Reserves Referencing NEW as N Event For Each Row
When (exists(Select * From Reserves Where bid = O.bid)) Rollback; Condition Action
规则3 规则3
创建触发器, 表的Delete操作进行监控,如果 操作进行监控, 创建触发器,对Sailors表的 表的 操作进行监控 删除元组的主键是Reserves表中的外键,则将Reserves表中 删除元组的主键是 表中的外键 则将 表中 的相关记录删除. 的相关记录删除. Create trigger sailors_delete After Delete on Sailors Event Referencing OLD as O For Each Row
数据库用户: 数据库用户: 1.一般数据库用户; 一般数据库ຫໍສະໝຸດ Baidu户; 一般数据库用户 2.具有支配数据库部分资源权限的数据库用户; 具有支配数据库部分资源权限的数据库用户; 具有支配数据库部分资源权限的数据库用户 3.具有 具有DBA特权的数据库用户 具有 特权的数据库用户 DBMS须解决:用户的标识与鉴别以及授权(grant-须解决:用户的标识与鉴别以及授权( 须解决 以及授权 revoke)的问题. )的问题.
When (not (exists(Select * From Sailors Where sid = N.sid) and (exists(Select * From Boats Where bid = N.bid)) ) Rollback; Condition Action
规则5 规则5
Create trigger sailors_sid_update Before Update of sid on Sailors Referencing Old as O For Each Row When (exists(Select * From Reserves Where sid = O.sid)) Rollback; 创建触发器, Sailors表的 表的Update操作进行监控,如 操作进行监控, 创建触发器,对Sailor 表的 操作进行监控 Reserves表中有元组引用修改前的sid值作为外键 表中有元组引用修改前的sid 果Reserves表中有元组引用修改前的sid值作为外键,回卷 此修改操作. 此修改操作.
问题:主动数据库系统和关系数据库系统, 问题:主动数据库系统和关系数据库系统,面向对 象数据库系统的区别和联系? 象数据库系统的区别和联系? 主动数据库只是数据库系统的一种功能! 主动数据库只是数据库系统的一种功能!
假 设有下列三个关系: 设有下列三个关系: master) Sailors(sid, sname, rating, birth, master) /*分别为水手的编号 名字,级别, 出生日期, 分别为水手的编号, /* 分别为水手的编号 , 名字 , 级别 , 出生日期 , 师 父的编号,每个水手的师父也是水手*/ 父的编号,每个水手的师父也是水手*/ Boats(bid, bname, color) /*分别为船的编号 , 名字,颜色 /* 分别为船的编号, 名字 , 分别为船的编号 */ Reserves(sid, bid, day) /*分别为订船水手编号 分别为订船水手编号, /*分别为订船水手编号,所订船 编号,日期*/ 编号,日期*/
When (not (exists(Select * From Sailors Where sid = N.sid) and (exists(Select * From Boats Where bid = N.bid)) ) Rollback; Condition Action
规则2 规则2
创建触发器, 表的Delete操作进行监控,如果 操作进行监控, 创建触发器,对Boats表的 表的 操作进行监控 删除元组的主键是Reserves表中的外键,回卷删除该记录的 删除元组的主键是 表中的外键 操作. 操作. Create trigger boats_delete Before Delete on Boats Event Referencing OLD as O For Each Row
规则1 规则1
创建触发器, 表的Insert操作进行监控, 创建触发器,对Reserves表的Insert操作进行监控,如 表的Insert操作进行监控 果插入元组的外键属性在Sailors和Boats表中不存在,回卷 果插入元组的外键属性在 和 表中不存在 插入该记录的操作. 插入该记录的操作. Create trigger referential_integrity_check Before Insert on Reserves Event Referencing NEW as N For Each Row
8.1.1 视图的定义和查询修改
(1) 定义视图,可以限制各个用户的访问范围; 定义视图,可以限制各个用户的访问范围; (2) 有些 有些DBMS没有视图功能,但是系统可以根据 没有视图功能, 没有视图功能 用户的访问限制条件,自动的修改查询条件, 用户的访问限制条件,自动的修改查询条件,使其只 能在给定访问范围内查询. 能在给定访问范围内查询.
8.3 完整性约束检查
8.3.1 完整性约束的类型 以关系数据模型为例分类. 以关系数据模型为例分类. 1. 静态约束(static constraints) 静态约束( ) (1) 固有约束 固有约束(inherent constraints) ——第一范式 第一范式 (2) 隐含约束 隐含约束(implicit constraints) 说明, 用DDL说明,例如:域完整性,实体完整性, 说明 例如:域完整性,实体完整性, 引用完整性等. 引用完整性等. (3) 显式约束 显式约束(explicit constraints) 依赖于数据的语义和应用. 依赖于数据的语义和应用.
4.数据的语义错误或对DB的错误操作引起的并发所引 4.数据的语义错误或对DB的错误操作引起的并发所引 数据的语义错误或对DB 起的数据库不一致; 起的数据库不一致; 数据完整性约束
8.1 数据库的安全保护
主要讨论计算机系统在保证数据库安全方面的技 术措施. 术措施. DBMS建立在 之上,OS应能保证数据库中的数 建立在OS之上 建立在 之上, 应能保证数据库中的数 据必须经由DBMS访问,而不允许用户越过 访问, 据必须经由 访问 而不允许用户越过DBMS, , 直接通过OS访问 访问. 直接通过 访问.
第8章 数据库的安全和完整性约束
数据库的破坏一般来自: 数据库的破坏一般来自: 1.系统故障 系统故障; 1.系统故障; 2.并发所引起的数据不一致; 2.并发所引起的数据不一致; 并发所引起的数据不一致
数据库的安全保护( 3.人为的破坏; 3.人为的破坏; 人为的破坏 数据库的安全保护(security protection)
8.1.2 访问控制
访问控制(access control)是对用户访问数据库各种 访问控制 是对用户访问数据库各种 资源的权力的控制 的控制. 资源的权力的控制. 基表,视图, 基表,视图,各种目录以及实用程序等 创建,撤销,查询, 创建,撤销,查询,增,删,改等 在同一DBMS下,可能建立多个数据库,访问控 下 可能建立多个数据库, 在同一 制在数据库之间是相互独立的. 制在数据库之间是相互独立的.
范例.引用完整性规则的实现 范例. 三张表为例, 以Sailors,Boats,Reserves三张表为例,写出实现引 三张表为例 用完整性约束的规则. 用完整性约束的规则. 有哪些操作会影响到三张表间的引用完整性? 有哪些操作会影响到三张表间的引用完整性?
Reserves表的 表的Insert操作 表的 操作 Sailors表的 表的Delete操作 表的 操作 Boats表的 表的Delete操作 表的 操作 Reserves表的 表的Update操作 表的 操作 Sailors表的Update操作 表的 Boats表的Update操作 表的 是否对所有属性的Update操作 是否对所有属性的 操作 都影响引用完整性? 都影响引用完整性?
2. 动态约束(dynamic constraints) 动态约束( ) 不是对数据库状态的约束, 不是对数据库状态的约束,而是数据库从一个状态 转到另一个状态时要遵守的约束. 转到另一个状态时要遵守的约束.
8.3.2 完整性约束的说明
约束的显式说明方法: 约束的显式说明方法: 1.用过程说明约束 用过程说明约束 让应用程序完成约束的说明和检验. 让应用程序完成约束的说明和检验. 缺点:检验分散在应用程序中,增加程序员的负担, 缺点:检验分散在应用程序中,增加程序员的负担, 约束改变会导致程序要修改. 约束改变会导致程序要修改. 优点:容易实现,目前应用较多. 优点:容易实现,目前应用较多.