西华师范大学计算机学院
第九章 数据库安全性
第九章 数据库安全性
? 问题的提出
– 数据库的一大特点是数据可以共享
– 但数据共享必然带来数据库的安全性问题
– 数据库系统中的数据共享不能是无条件的共享
例:军事秘密, 国家机密, 新产品实验数据,
市场需求分析, 市场营销策略, 销售计划,
客户档案, 医疗档案, 银行储蓄数据
数据库安全性(续)
– 数据库中数据的共享是在 DBMS统一的严格
的控制之下的共享, 即只允许有合法使用权
限的用户访问允许他存取的数据
– 数据库系统的安全保护措施是否有效是数据
库系统主要的性能指标之一
数据库安全性(续)
? 什么是数据库的安全性
– 数据库的安全性是指保护数据库, 防止因用
户非法使用数据库造成数据泄露, 更改或破
坏 。
? 什么是数据的保密
– 数据保密是指用户合法地访问到机密数据后
能否对这些数据保密 。
– 通过制订法律道德准则和政策法规来保证 。
第九章 数据库安全性
9.1 计算机安全性概论
9.2 数据库安全性控制
9.3 统计数据库安全性
9.4 小结
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.1 数据库安全性控制概述
? 非法使用数据库的情况
– 用户编写一段合法的程序绕过 DBMS及其授
权机制,通过操作系统直接存取、修改或备
份数据库中的数据;
– 直接编写应用程序执行非授权操作;
数据库安全性控制概述(续)
– 通过多次合法查询数据库从中推导出一些保
密数据
例:某数据库应用系统禁止查询单个人的工资,但
允许查任意一组人的平均工资。用户甲想了解张三
的工资,于是他:
首先查询包括张三在内的一组人的平均工资
然后查用自己替换张三后这组人的平均工资
从而推导出张三的工资
– 破坏安全性的行为可能是无意的,故意的,
恶意的。
计算机系统中的安全模型
应用 DBMS OS DB
低高
安全性控制层次
方法,用户标识和鉴定
存取控制
审计
视图
操作系统
安全保护 密码存储
数据库安全性控制概述(续)
? 数据库安全性控制的常用方法
– 用户标识和鉴定
– 存取控制
– 视图
– 审计
– 密码存储
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.2 用户标识与鉴别
? 用户标识与鉴别( Identification &
Authentication)
– 系统提供的最外层安全保护措施
9.2.2 用户标识与鉴别
基本方法
? 系统提供一定的方式让用户标识自己的名字或身份;
? 系统内部记录着所有合法用户的标识;
? 每次用户要求进入系统时,由系统核对用户提供的身
份标识;
? 通过鉴定后才提供机器使用权。
? 用户标识和鉴定可以重复多次
用户标识自己的名字或身份
? 用户名 /口令
– 简单易行,容易被人窃取
? 每个用户预先约定好一个 计算过程 或者 函数
– 系统提供一个随机数
– 用户根据自己预先约定的计算过程或者函数
进行计算
– 系统根据用户计算结果是否正确鉴定用户身

9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.3 存取控制
? 存取控制机制的功能
– 存取控制机制的组成
?定义存取权限
?检查存取权限
用户权限定义和合法权检查机制一起组成
了 DBMS的安全子系统
存取控制(续)
– 定义存取权限
? 在数据库系统中,为了保证用户只能访问
他有权存取的数据,必须预先对每个用户
定义存取权限。
– 检查存取权限
? 对于通过鉴定获得上机权的用户(即合法
用户),系统根据他的存取权限定义对他
的各种操作请求进行控制,确保他只执行
合法操作。
存取控制(续)
? 常用存取控制方法
– 自主存取控制 ( Discretionary Access Control,简称
DAC)
? C2级
? 灵活
– 强制存取控制 ( Mandatory Access Control,简称
MAC)
? B1级
? 严格
自主存取控制方法
? 同一用户对于不同的数据对象有不同的
存取权限
? 不同的用户对同一对象也有不同的权限
? 用户还可将其拥有的存取权限转授给其
他用户
强制存取控制方法
? 每一个数据对象被标以一定的密级
? 每一个用户也被授予某一个级别的许可证
? 对于任意一个对象,只有具有合法许可证
的用户才可以存取
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.4 自主存取控制方法
? 定义存取权限
–存取权限
? 存取权限由两个要素组成
–数据对象
–操作类型
自主存取控制方法(续)
– 关系系统中的存取权限
? 类型
数据对象 操作类型
模 式 模 式 建立、修改、删除、检索
外模式 建立、修改、删除、检索
内模式 建立、删除、检索
数 据 表 查找、插入、修改、删除
属性列 查找、插入、修改、删除
自主存取控制方法(续)
– 关系系统中的存取权限 (续 )
? 定义方法
– GRANT/REVOKE
自主存取控制方法(续)
– 关系系统中的存取权限 (续 )
? 例, 一张授权表
用户名 数据对象名 允许的操作类型
王 平 关系 Student SELECT
张明霞 关系 Student UPDATE
张明霞 关系 Course ALL
张明霞 SC,Grade UPDATE
张明霞 SC,Sno SELECT
张明霞 SC,Cno SELECT
自主存取控制方法(续)
? 检查存取权限
– 对于获得上机权后又进一步发出存取数据库操作的
用户
? DBMS查找数据字典,根据其存取权限对操作的
合法性进行检查
? 若用户的操作请求超出了定义的权限,系统将拒
绝执行此操作
自主存取控制方法(续)
? 授权粒度
– 授权粒度是指可以定义的数据对象的范围
? 它是衡量授权机制是否灵活的一个重要指标。
? 授权定义中数据对象的粒度越细,即可以定义的
数据对象的范围越小,授权子系统就越灵活。
自主存取控制方法(续)
– 关系数据库中授权的数据对象粒度
? 数据库
? 表
? 属性列
? 行
– 能否提供与数据值有关的授权反映了授权子
系统精巧程度
自主存取控制方法(续)
? 实现与数据值有关的授权
– 利用存取谓词
? 存取谓词可以很复杂
– 可以引用系统变量,如终端设备号,系统时钟等,
实现与时间地点有关的存取权限,这样用户只能
在某段时间内,某台终端上存取有关数据
例:规定“教师只能在每年 1月份和 7月份星期一至星期五上午 8
点到下午 5点处理学生成绩数据”。
自主存取控制方法(续)
例:扩充后的授权表
用户名 数据对象名 允许的操作类型 存取谓

王平 关系 Student SELECT Sdept=?CS?
张明霞 关系 Student UPDATE Sname=?张
明霞 ?
张明霞 关系 Course ALL 空
自主存取控制方法(续)
? 自主存取控制小结
– 定义存取权限
? 用户
– 检查存取权限
? DBMS
自主存取控制方法(续)
? 自主存取控制小结 (续 )
– 授权粒度
? 数据对象粒度:数据库、表、属性列、行
– 数据值粒度:存取谓词
? 授权粒度越细,授权子系统就越灵活,能够提供的安
全性就越完善。但另一方面,因数据字典变大变复杂,
系统定义与检查权限的开销也会相应地增大。
自主存取控制方法(续)
? 自主存取控制小结 (续 )
– 优点
? 能够通过授权机制有效地控制其他用户对
敏感数据的存取
自主存取控制方法(续)
? 自主存取控制小结 (续 )
– 缺点
? 可能存在数据的“无意泄露”
? 原因:这种机制仅仅通过对数据的存取权限来进
行安全控制,而数据本身并无安全性标记。
? 解决:对系统控制下的所有主客体实施强制存取
控制策略
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.5 强制存取控制方法
? 什么是强制存取控制
– 强制存取控制 (MAC)是指系统为保证更高程度的安
全性,按照 TDI/TCSEC标准中安全策略的要求,所
采取的强制存取检查手段。
– MAC不是用户能直接感知或进行控制的。
– MAC适用于对数据有严格而固定密级分类的部门
? 军事部门
? 政府部门
强制存取控制方法(续)
? 主体与客体
– 在 MAC中,DBMS所管理的全部实体被分为主体和
客体两大类
– 主体 是系统中的活动实体
? DBMS所管理的实际用户
? 代表用户的各进程
– 客体 是系统中的被动实体,是受主体操纵的
? 文件
? 基表
? 索引
? 视图
强制存取控制方法(续)
? 敏感度标记
– 对于主体和客体,DBMS为它们每个实例
(值)指派一个敏感度标记( Label)
– 敏感度标记分成若干级别
? 绝密( Top Secret)
? 机密( Secret)
? 可信( Confidential)
? 公开( Public)
强制存取控制方法(续)
– 主体的敏感度标记称为许可证级别
( Clearance Level)
– 客体的敏感度标记称为密级( Classification
Level)
– MAC机制就是通过对比主体的 Label和客体
的 Label,最终确定主体是否能够存取客体
强制存取控制方法(续)
? 强制存取控制规则
– 当某一用户(或某一主体)以标记 label注册
入系统时,系统要求他对任何客体的存取必
须遵循下面两条规则:
( 1)仅当主体的许可证级别 大于或等于 客体
的密级时,该主体才能 读 取相应的客体;
( 2)仅当主体的许可证级别 等于 客体的密级
时,该主体才能 写 相应的客体。
强制存取控制方法(续)
? 修正规则:
–主体的许可证级别 <=客体的密级
主体能写客体
–用户可为写入的数据对象赋予高于自
己的许可证级别的密级
–一旦数据被写入,该用户自己也不能
再读该数据对象了。
强制存取控制方法(续)
? 规则的共同点
禁止了拥有高许可证级别的主体
更新低密级的数据对象
强制存取控制方法(续)
? 强制存取控制的特点
– MAC是对数据本身进行密级标记
– 无论数据如何复制,标记与数据是一个不可分
的整体
– 只有符合密级标记要求的用户才可以操纵数据
– 从而提供了更高级别的安全性
MAC与 DAC
? DAC与 MAC共同构成 DBMS的安全机制
–原因:较高安全性级别提供的安全保
护要包含较低级别的所有保护
? 先进行 DAC检查,通过 DAC检查的数据
对象再由系统进行 MAC检查,只有通过
MAC检查的数据对象方可存取。
强制存取控制方法(续)
DAC + MAC安全检查示意图
SQL语法分析 & 语义检查
DAC 检 查
安全检查
MAC 检 查
继 续
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.6 视图机制
? 视图机制把要保密的数据对无权存取这些数据
的用户隐藏起来,
? 视图机制更主要的功能在于提供数据独立性,
其安全保护功能太不精细,往往远不能达到应
用系统的要求。
视图机制(续)
? 视图机制与授权机制配合使用,
? 首先用视图机制屏蔽掉一部分保密数据
? 视图基础上再进一步定义存取权限
? 间接实现了支持存取谓词的用户权限定

视图机制(续)
例:王平只能检索计算机系学生的信息
先建立计算机系学生的视图 CS_Student
CREATE VIEW CS_Student
AS
SELECT
FROM Student
WHERE Sdept='CS';
视图机制(续)
在视图上进一步定义存取权限
GRANT SELECT
ON CS_Student
TO 王平 ;
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.7 审计
? 什么是审计
– 启用一个专用的审计日志( Audit Log)
将用户对数据库的所有操作记录在上面
– DBA可以利用审计日志中的追踪信息
找出非法存取数据的人
审计(续)
? 审计功能的可选性
– 审计很费时间和空间
–DBA可以根据应用对安全性的要求,
灵活地打开或关闭审计功能。
审计(续)
? 强制性机制,
用户识别和鉴定、存取控制、视图
? 预防监测手段,
审计技术
9.2 数据库安全性控制
9.2.1 数据库安全性控制概述
9.2.2 用户标识与鉴别
9.2.3 存取控制
9.2.4 自主存取控制方法
9.2.5 强制存取控制方法
9.2.6 视图机制
9.2.7 审计
9.2.8 数据加密
9.2.8 数据加密
? 数据加密
– 防止数据库中数据在存储和传输中失密的有
效手段
? 加密的基本思想
– 根据一定的算法将原始数据(术语为明文,
Plain text)变换为不可直接识别的格式(术
语为密文,Cipher text)
– 不知道解密算法的人无法获知数据的内容
数据加密(续)
? 加密方法
– 替换方法
? 使用密钥( Encryption Key)将明文中的每一个字符转换为密
文中的一个字符
– 置换方法
? 将明文的字符按不同的顺序重新排列
– 混合 方法
美国 1977年制定的官方加密标准:数据加密标准( Data
Encryption Standard,简称 DES)
数据加密(续)
? DBMS中的数据加密
– 有些数据库产品提供了数据加密例行程序
– 有些数据库产品本身未提供加密程序,但提
供了接口
数据加密(续)
? 数据加密功能通常也作为可选特征,允
许用户自由选择
– 数据加密与解密是比较费时的操作
– 数据加密与解密程序会占用大量系统资源
– 应该只对高度机密的数据加密
第九章 数据库安全性
9.1 计算机安全性概论
9.2 数据库安全性控制
9.3 统计数据库安全性
9.4 小结
9.3 统计数据库安全性
? 统计数据库的特点
– 允许用户查询 聚集 类型的信息(例如合计、
平均值等)
– 不允许查询 单个 记录信息
例:允许查询“程序员的平均工资是多少?”
不允许查询“程序员张勇的工资?”
统计数据库安全性(续)
? 统计数据库中特殊的安全性问题
– 隐蔽的信息通道
– 从合法的查询中推导出不合法的信息
统计数据库安全性(续)
例 1:下面两个查询都是合法的:
1.本公司共有多少女高级程序员?
2.本公司女高级程序员的工资总额是多少?
如果第一个查询的结果是,1”,
那么第二个查询的结果显然就是这个程序员的工
资数。
规则 1:任何查询至少要涉及 N(N足够大 )个以上的记录
统计数据库安全性(续)
例 2:用户 A发出下面两个合法查询:
1.用户 A和其他 N个程序员的工资总额是多少?
2.用户 B和其他 N个程序员的工资总额是多少?
若第一个查询的结果是 X,第二个查询的结果是 Y,
由于用户 A知道自己的工资是 Z,
那么他可以计算出用户 B的工资 =Y-(X-Z)。
原因:两个查询之间有很多重复的数据项
规则 2:任意两个查询的相交数据项不能超过 M个
统计数据库安全性(续)
可以证明,在上述两条规定下,如果想获知用户 B
的工资额
A至少需要进行 1+(N-2)/M次查询
规则 3:任一用户的查询次数不能超过 1+(N-2)/M
如果两个用户合作查询就可以使这一规定失效
统计数据库安全性(续)
数据库安全机制的设计目标:
试图破坏安全的人所花费的代价 >>
得到的利益
第九章 数据库安全性
9.1 计算机安全性概论
9.2 数据库安全性控制
9.3 统计数据库安全性
9.4 小结
9.4 小结
? 随着计算机网络的发展,数据的共享日益加强,
数据的安全保密越来越重要
? DBMS是管理数据的核心,因而其自身必须具
有一整套完整而有效的安全性机制。
小结(续)
?, 可信计算机系统评测标准, TCSEC/TDI是目
前各国所引用或制定的一系列安全标准中最重
要的一个。
? CSEC/TDI从 安全策略, 责任, 保证 和 文档 四
个方面描述了安全性级别的指标
小结(续)
? 实现数据库系统安全性的技术和方法有多种,最重要的是
存取控制 技术和 审计 技术。
– 目前许多大型 DBMS 达到了 C2级,其安全版本达到了
B1
– C2级 的 DBMS必须具有 自主存取控制 功能和 初步的审
计 功能
– B1级 的 DBMS必须具有 强制存取控制 和 增强的审计 功

– 自主存取控制功能一般是通过 SQL 的 GRANT语句和
REVOKE语句来实现的
西华师范大学计算机学院
数据库系统概论
An Introduction to Database System
第十章 数据库完整性
第十章 数据库完整性
什么是数据库的完整性
– 数据的正确性和相容性
– 防止不合语义的数据进入数据库 。
例, 学生的年龄必须是整数, 取值范围为 14--29;
学生的性别只能是男或女;
学生的学号一定是唯一的;
学生所在的系必须是学校开设的系;
– 完整性:否真实地反映现实世界
完整性控制机制
1.完整性约束条件定义机制
2.完整性检查机制
3.违约反应
完整性约束条件定义
? 完整性约束条件:数据模型的组成部分
约束数据库中数据的语义
? DBMS应提供定义数据库完整性约束条
件,并把它们作为模式的一部分存入数
据库中
完整性控制机制
? 检查用户发出的操作请求是否违背了完
整性约束条件
违约反应
? 如果发现用户的操作请求使数据违背了
完整性约束条件,则采取一定的动作来
保证数据的完整性。
第十章 数据库完整性
10.1 完整性约束条件
10.2 完整性控制
10.3 小结
完整性约束条件(续)
完整性约束条件作用的对象
? 列:对属性的取值类型、范围、精度等的约
束条件
? 元组:对元组中各个属性列间的联系的约束
? 关系:对若干元组间、关系集合上以及关系
之间的联系的约束
完整性约束条件(续)
? 静态
–对静态对象的约束是反映数据库
状态合理性的约束
? 动态
–对动态对象的约束是反映数据库
状态变迁的约束
完整性约束条件分类
六类完整性约束条件
? 静态列级约束
? 静态元组约束
? 静态关系约束
? 动态列级约束
? 动态元组约束
? 动态关系约束
完整性约束条件(续)
对象状态
动态列级约束 动态元组约束 动态关系约束
动态 ④ ⑤ ⑥
静态列级约束 静态元组约束 静态关系约束
静态 ① ② ③
列 元组 关系 对象粒度
完整性约束条件(续)
1,静态列级约束
? 静态列级约束:对列的取值域的说明
? 最常见、最简单、最容易实现的一类完
整性约束
完整性约束条件(续)
? 五类静态列级约束
1) 数据类型约束:数据的类型、长度、单位、精度等
例:学生姓名的数据类型为字符型,长度为 8
2) 对数据格式的约束
例:
学号:前两位表示入学年份,后四位为顺序编号
日期,YY.MM.DD。
完整性约束条件(续)
3) 取值范围或取值集合的约束
例:规定成绩的取值范围为 0-100
年龄的取值范围为 14-29
性别的取值集合为 [男,女 ]
4) 对空值的约束
空值:未定义或未知的值
空值:与零值和空格不同
有的列允许空值,有的则不允许,如成绩可为空值
5) 其他约束
例:关于列的排序说明,组合列等
完整性约束条件(续)
2,静态元组约束
规定元组的各个列之间的约束关系
例:订货关系中发货量 <=订货量
教师关系中教授的工资 >=700元
静态元组约束只局限在元组上
完整性约束条件(续)
3,静态关系约束
关系的各个元组之间或若干关系之间存在的各
种联系或约束
常见静态关系约束:
1) 实体完整性约束
2) 参照完整性约束
3) 函数依赖约束
4) 统计约束
函数依赖约束
? 关系字段间存在的函数依赖
例:在学生-课程-教师关系
SJT(S,J,T) 的函数依赖:
( (S,J) → T,T→J )
主码,(S,J)
统计约束
? 定义某个字段值一个关系多个元组的统计值之间
的约束关系
? 例:职工平均工资的 2倍 <=部门经理的工资 <=
职工平均工资的 5倍
职工平均工资值, 统计值
完整性约束条件(续)
4,动态列级约束
动态列级约束是修改列定义或列值时应
满足的约束条件
完整性约束条件(续)
1) 修改列 定义 时的约束
例:将原来允许空值的列改为不允许空值时,
该列目前已存在空值,则拒绝这种修改
2) 修改列值时的约束
修改列值时新旧值之间要满足的约束条件
例:职工工资调整 >= 原来工资
年龄只能增长
完整性约束条件(续)
5,动态元组约束
修改元组值, 各个字段之间要满足的约束条件
例, 职工工资调整不得低于其原来工资 + 工龄 *1.5
完整性约束条件(续)
6,动态关系约束
关系变化前后状态:限制条件
例:事务一致性、原子性等约束条件
完整性约束条件小结
粒 度 状态 列 级 元 组 级 关 系 级
静 态 列定义
·类型
·格式
·值域
·空值
元组值应满足
的条件
实体完整性约束
参照完整性约束
函数依赖约束
统计约束
动 态 改变列定义或列值 元组新旧值之间应满足的约束条

关系新旧状态间
应满足的约束条

第十章 数据库完整性
10.1 完整性约束条件
10.2 完整性控制
10.3 小结
10.2 完整性控制
一,DBMS的完整性控制机制
二、关系系统三类完整性的实现
三、参照完整性的实现
一,DBMS的完整性控制机制
1,定义功能
一个完善的完整性控制机制应该允许用户定义
各类完整性约束条件。
DBMS的完整性控制机制(续)
2,检查功能
? 立即执行的约束 (Immediate constraints)
语句执行完后立即检查是否违背完
整性约束
? 延迟执行的约束 (Deferred constrainsts)
完整性检查延迟到整个事务执行结束后
进行
DBMS的完整性控制机制(续)
例:银行数据库中“借贷总金额应平衡”的约束
就应该是延迟执行的约束
– 从账号 A转一笔钱到账号 B为一个事务,从
账号 A转出去钱后账就不平了,必须等转入
账号 B后账才能重新平衡,这时才能进行完
整性检查。
DBMS的完整性控制机制(续)
3,违约反应
– 拒绝该操作
– 其他处理方法
DBMS的完整性控制机制(续)
完整性规则五元组表示,
(D,O,A,C,P)
? D( Data) 约束作用的 数据对象 ;
? O( Operation) 触发完整性检查的 数据库操作
当用户发出什么操作请求时需要检查该完整性规则
是立即检查还是延迟检查;
? A( Assertion) 数据对象必须满足的 断言 或 语义约束
这是规则的主体;
? C( Condition) 选择 A作用的数据对象值的 谓词 ;
? P( Procedure) 违反完整性规则时触发的 过程 。
DBMS的完整性控制机制(续)
例 1:在,学号不能为空,的约束中
D 约束作用的对象为 Sno属性
O 插入或修改 Student 元组时
A Sno不能为空
C 无( A可作用于所有记录的 Sno属性)
P 拒绝执行该操作
DBMS的完整性控制机制(续)
例 2:在,教授工资不得低于 1000元,的约束中
D 约束作用的对象为工资 Sal属性
O 插入或修改职工元组时
A Sal不能小于 1000
C 职称 =′教授 ′
(A仅作用于职称 =‘教授’的记录 )
P 拒绝执行该操作
二、关系系统三类完整性的实现
? 关系数据库系统都提供了定义和检查实体完整
性、参照完整性和用户定义的完整性的功能
? 违反实体完整性规则和用户定义的完整性规则
的操作:
一般是拒绝执行
? 违反参照完整性的操作:
– 拒绝执行
– 接受这个操作,同时执行一些附加的操作,以保证
数据库的状态正确
三、参照完整性的实现
例,职工-部门数据库包含职工表 EMP和部门表 DEPT
1 DEPT关系的主码为部门号 Deptno
2 EMP关系的主码为职工号 Empno,外码为部门号 Deptno
称 DEPT为被参照关系或目标关系,EMP为参照关系
RDBMS实现参照完整性时需要考虑以下 4方面:
1,外码是否可以接受空值的问题
? 外码是否能够取空值:依赖于应用环境的
语义
? 实现参照完整性:
系统提供定义外码的机制
定义外码列是否允许空值的机制
1,外码是否可以接受空值的问题
例 1:在职工-部门数据库中,
EMP关系包含有外码 Deptno
某元组的这一列若为空值,表示这个职
工尚未分配到任何具体的部门工作
和应用环境的语义是相符
1,外码是否可以接受空值的问题
例 2:学生-选课数据库
Student关系为被参照关系,其主码为 Sno。
SC为参照关系,外码为 Sno。
若 SC的 Sno为空值:表明尚不存在的某个学生,或者某
个不知学号的学生,选修了某门课程,其成绩记录在
Grade中
与学校的应用环境是不相符的,因此 SC的 Sno列不能取
空值。
2.在被参照关系中删除元组时的问题
出现违约操作的情形:
删除被参照关系的某个元组( student)
而参照关系有若干元组 (SC)的外码值与被
删除的被参照关系的主码值相同
2.在被参照关系中删除元组时的问题
? 违约反应:可有三种策略
–级联删除( CASCADES)
–受限删除( RESTRICTED)
–置空值删除( NULLIFIES)
这三种处理方法,哪一种是正确的,要依应
用环境的语义来定
2.在被参照关系中删除元组时的问题
? 级联删除
将参照关系中外码值与被参照关系中要删除元
组主码值相对应的元组一起删除
? 受限删除
当参照关系中没有任何元组的外码值与要删除
的被参照关系的元组的主码值相对应时,系统
才执行删除操作,否则拒绝此删除操作
2.在被参照关系中删除元组时的问题
? 置空值删除
删除被参照关系的元组,并将参照关系
中与被参照关系中被删除元组主码值相
等的外码值置为空值。
2.在被参照关系中删除元组时的问题
例:要删除 Student关系中 Sno=950001的元组,
而 SC关系中有 4个元组的 Sno都等于 950001。
– 级联删除:将 SC关系中所有 4个 Sno=950001的元组
一起删除。如果参照关系同时又是另一个关系的被
参照关系,则这种删除操作会继续级联下去
– 受限删除:系统将拒绝执行此删除操作。
2.在被参照关系中删除元组时的问题
– 置空值删除:将 SC关系中所有 Sno=950001
的元组的 Sno值置为空值。
– 在学生选课数据库中,显然第一种方法和第
二种方法都是对的。第三种方法不符合应用
环境语义。
3.在参照关系中插入元组时的问题
? 出现违约操作的情形
–需要在参照关系中插入元组,而被参
照关系不存在相应的元组
? 违约反应
–受限插入
–递归插入
3.在参照关系中插入元组时的问题
? 受限插入
– 仅当被参照关系中存在相应的元组,其主码
值与参照关系插入元组的外码值相同时,系
统才执行插入操作,否则拒绝此操作。
? 递归插入
– 首先向被参照关系中插入相应的元组,其主
码值等于参照关系插入元组的外码值,然后
向参照关系插入元组。
3.在参照关系中插入元组时的问题
例:向 SC关系插入( 99001,1,90)元组,
而 Student关系中尚没有 Sno=99001的学生
– 受限插入:系统将拒绝向 SC关系插入
( 99001,1,90)元组
– 递归插入:系统将首先向 Student关系插入
Sno=99001的元组,然后向 SC关系插入
( 99001,1,90)元组。
4,修改被参照关系中主码的问题
? 两种策略
(1)不允许修改主码
(2)允许修改主码
允许修改主码策略
? 违约操作
?要 修改被参照关系 中某些元组的主码
值,而参照关系中有些元组的外码值
正好等于被参照关系要修改的主码值
?要 修改参照关系 中某些元组的外码值,
而被参照关系中没有任何元组的主码
值等于被参照关系修改后的外码值
允许修改主码策略
? 违约反应 (1)
? 修改的关系是被参照关系:与删
除类似
–级联修改
–受限修改
–置空值修改
允许修改主码策略
? 级联修改
– 修改被参照关系中主码值同时,用相同的方法修改
参照关系中相应的外码值。
? 受限修改
– 拒绝此修改操作。只当参照关系中没有任何元组的
外码值等于被参照关系中某个元组的主码值时,这
个元组的主码值才能被修改。
? 置空值修改
– 修改被参照关系中主码值,同时将参照关系中相应
的外码值置为空值。
允许修改主码策略
例:将 Student关系中 Sno=950001的元组中 Sno
值改为 960123。而 SC关系中有 4个元组的
Sno=950001
– 级联修改:将 SC关系中 4个 Sno=950001元组
中的 Sno值也改为 960123。如果参照关系同
时又是另一个关系的被参照关系,则这种修
改操作会继续级联下去。
允许修改主码策略
– 受限修改:只有 SC中没有任何元组的
Sno=950001时,才能修改 Student表中
Sno=950001的元组的 Sno值改为 960123。
– 置空值修改:将 Student表中 Sno=950001的元
组的 Sno值改为 960123。而将 S表中所有
Sno=950001的元组的 Sno值置为空值。
– 在学生选课数据库中只有第一种方法是正确
的。
允许修改主码策略
? 违约反应 (2)
? 修改的关系是参照关系:与插入
类似
–受限插入
–递归插入
参照完整性的实现
RDBMS在实现参照完整性时,
– 需要向用户提供定义主码、外码的机制
– 向用户提供按照自己的应用要求选择处理依
赖关系中对应的元组的方法
第十章 数据库完整性
10.1 完整性约束条件
10.2 完整性控制
10.3 小结
10.4 小结
? 数据库的完整性是为了保证数据库中存储的数
据是正确的,所谓正确的是指符合现实世界语
义的。
? DBMS完整性实现的机制
– 完整性约束定义机制
– 完整性检查机制
– 违背完整性约束条件时 DBMS应采取的动作
小结
? 完整性机制的实施会极大地影响系统性能
? 不同的数据库产品对完整性的支持策略和支持程度是
不同的
– 许多数据库管理系统对完整性机制的支持比对安全
性的支持要晚得多也弱得多
– 数据库厂商对完整性的支持越来越好,不仅在能保
证实体完整性和参照完整性而且能在 DBMS核心定
义、检查和保证用户定义的完整性约束条件