《数据库技术与应用》第5章 习题答案.docx
《《数据库技术与应用》第5章 习题答案.docx》由会员分享,可在线阅读,更多相关《《数据库技术与应用》第5章 习题答案.docx(9页珍藏版)》请在冰豆网上搜索。
![《数据库技术与应用》第5章 习题答案.docx](https://file1.bdocx.com/fileroot1/2022-11/30/43b8b0a2-811b-424e-9a83-0eb3e584ef86/43b8b0a2-811b-424e-9a83-0eb3e584ef861.gif)
《数据库技术与应用》第5章习题答案
第5章数据库完整性与安全性
1.什么是数据库的完整性?
什么是数据库的安全性?
两者之间有什么区别和联系?
解:
数据库的完整性是指数据库中数据的正确性、有效性和相容性,其目的是防止不符合语义、不正确的数据进入数据库,从而来保证数据库系统能够真实的反映客观现实世界。
数据库安全性是指保护数据库,防止因用户非法使用数据库造成数据泄露、更改或破坏。
数据的完整性和安全性是两个不同的概念,但是有一定的联系:
前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出所造成的无效操作和错误结果。
后者是保护数据库防止恶意的破坏和非法的存取。
也就是说,安全性措施的防范对象是非法用户和非法操作,完整性措施的防范对象是不合语义的数据。
2.什么是数据库的完整性约束条件?
完整性约束条件可以分为哪几类?
解:
完整性约束条件是指数据库中的数据应该满足的语义约束条件。
一般可以分为六类:
静态列级约束、静态元组约束、静态关系约束、动态列级约束、动态元组约束、动态关系约束。
静态列级约束是对一个列的取值域的说明,包括以下几个方面:
数据类型的约束,包括数据的类型、长度、单位、精度等;
对数据格式的约束;
对取值范围或取值集合的约束;
对空值的约束;
其他约束。
静态元组约束就是规定组成一个元组的各个列之间的约束关系,静态元组约束只局限在单个元组上。
静态关系约束是在一个关系的各个元组之间或者若干关系之间常常存在各种联系或约束。
常见的静态关系约束有:
实体完整性约束;
参照完整性约束;
函数依赖约束。
动态列级约束是修改列定义或列值时应满足的约束条件,包括下面两方面:
修改列定义时的约束;
修改列值时的约束。
动态元组约束是指修改某个元组的值时需要参照其旧值,并且新旧值之间需要满足某种约束条件。
动态关系约束是加在关系变化前后状态上的限制条件,例如事务一致性、原子性等约束条件。
3.试述DBMS如何实现完整性控制。
解:
为了维护数据库的完整性,DBMS提供了以下三种机制:
完整性约束条件定义完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。
SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。
这些完整性一般由SQL的DDL语义来实现。
它们作为数据库模式的一部分存入数据字典中。
完整性检查方法检查数据是否满足已定义的完整性约束条件称为完整性检查。
一般在INSERT、UPDATE、DELETE语句执行后开始检查,也可以在事务提交时检查。
检查这些操作执行后数据库中的数据是否违背了完整性约束条件。
违约处理若发现用户操作违背了完整性约束条件,应采取一定的措施,如拒绝(NOACTION)执行该操作,或级连(CASCADE)执行其它操作,进行违约处理以保证数据的完整性。
4.现有以下四个关系模式:
供应商(供应商编号,姓名,电话,地点),其中供应商编号为主码;
零件(零件编号,零件名称,颜色,重量),其中零件编号为主码;
工程(工程编号,工程名称,所在地点),其中工程编号为主码;
供应情况(供应商编号,零件编号,工程编号,数量),其中供应商编号,零件编号,工程编号为主码
用SQL语句定义这四个关系模式,要求在模式中完成以下完整性约束条件的定义:
定义每个模式的主码;
定义参照完整性;
定义零件重量不得超过100千克。
解:
CREATESCHEMASupplier_schema
CREATETABLESupplier
(SnoCHAR(5)PRIMARYKEY,
SnameCHAR(20)NOTNULL,
PhoneCHAR(13),
AddressCHAR(30)
);
CREATESCHEMAPart_schema
CREATETABLEPart
(PnoCHAR(7)PRIMARYKEY,
PnameCHAR(20)NOTNULL,
ColorCHAR(10),
WeightSMALLINTCHECK(Weight<=100)
);
CREATESCHEMAProject_schema
CREATETABLEProject
(JnoCHAR(7)PRIMARYKEY,
JnameCHAR(20)NOTNULL,
JaddressCHAR(30)
);
CREATESHEMASPJ_shema
CREATETABLESPJ
(SnoCHAR(5),
PnoCHAR(7),
JnoCHAR(7),
QuantitySMALLINT,
PRIMARYKEY(Sno,Pno,Jno),
FOREIGNKEY(Sno)REFERENCESSupplier(Sno),
FOREIGNKEY(Pno)REFERENCESPart(Pno),
FOREIGNKEY(Jno)REFERENCESProject(Jno)
);
5.在关系数据库系统中,当操作违反实体完整性、参照完整性和用户自定义的完整性约束条件时,一般是如何分别进行处理的。
解:
(1)按实体完整性规则自动进行检查。
包括:
检查主码值是否唯一,如果不唯一则拒绝插入或修改。
检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。
(2)按参照完整性检查,违约处理的策略如下:
拒绝(NOACTION)执行。
不允许该操作执行,该策略一般设置为默认策略。
在被参照关系中删除元组:
仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此操作。
级联(CASCADE)操作。
当删除或修改被参照表的一个元组造成了与参照表的不一致,则删除或修改参照表中的所有造成不一致的元组。
级联操作必须在定义外码时给出显式定义。
设置为空值(SETNULL)。
当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
置空值删除(NULLIFIES)。
删除被参照关系的元组,并将参照关系中相应元组的外码值置空值。
(3)按用户自定义完整性检查,违约处理:
当往表中插入元组或修改属性的值时,RDBMS就检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行。
6.触发器的作用是什么?
同一表上的多个触发器被激活时遵循的执行顺序是什么?
解:
触发器是用户定义在关系表上的一类由事件驱动的特殊过程,它不需要由用户调用执行,而是在用户对表中的数据进行UPDATE、INSERT或DELETE操作时自动触发执行。
它可以实现数据库中相关表的级联修改,能实现比CHECK语句更为复杂的约束,能提供数据库修改前后数据变化的前后状态,能维护非规范化数据。
同一表上的多个触发器激活时遵循以下执行顺序:
执行该表上的BERORE触发器;
激活触发器的SQL语句;
执行该表上的AFTER触发器。
此外,对于同一个表上的多个BEFORE(AFTER)触发器,遵循“谁先创建谁先执行”的原则,即按照触发器创建的时间先后顺序执行。
有些RDBMS是按照触发器名称的字母排序顺序来执行触发器的。
7.什么是“权限”?
用户访问数据库有哪些权限?
对数据模式进行修改有哪些权限?
解:
用户(或应用程序)使用DB的方式称为权限。
用户访问数据库有四种权限:
Read(读权限)、Insert(插入)、Update(修改)和Delete(修改)。
用户对数据模式进行修改有四种权限:
Index(索引权限:
允许用户创建和删除索引),Resource(资源权限:
允许用户创建新的关系)、Alteration(修改权限:
允许用户在关系结构中加入或删除属性)和Drop(撤销权限:
允许用户撤销关系)。
8.安全性措施中的强制存取控制是如何实现的?
解:
对每个数据对象赋予一定的密级,级别从高到低有:
绝密级、机密级、秘密级、公用级,每个用户也具有相应的级别,称为许可证级别,密级和许可证级别都是有序的,如绝密>机密>秘密>公用,采用规则是:
一是用户只能查看比它级别低或是同级的数据,二是用户只能修改和它同级的数据。
9.SQL提供了哪些数据控制语句?
举例说明。
解:
数据控制语言是用来设置或者更改数据库用户或角色权限的语句。
SQL中,这些语句包括GRANT、REVOKE等语句。
GRANT语句向用户授予权限,REVOKE语句收回授予的权限。
例如:
描述把查询Course表的权限授予所有用户的控制语句为
GRANTSELECTONCourseTOPUBLIC;
描述收回用户U3修改学生学号的查询权限的控制语句为:
REVOKEUPDATE(Sno)
ONTABLEStudent
FROMU3;
10.使用角色有什么好处?
涉及角色的SQL语句有哪些?
解:
使用角色的好处:
数据库角色是指被命名的一组与数据库操作相关的权限。
角色是权限的集合,可以为一组具有相同权限的用户创建一个角色,角色简化了授权操作。
使用角色进行授权必须先创建角色,将数据库对象上的存取权限授予角色,才能将角色授予用户,使得用户拥有角色所具有的所有存取权限。
对一个角色授予、拒绝或废除的权限也适用于该角色的任何成员。
涉及角色的SQL语句有:
角色的创建
CREATEROLE<角色名>
给角色授权
GRANT<权限>[,<权限>]…
ON<对象类型>对象名
TO<角色>[,<角色>]…
将一个角色授予其它的角色或用户
GRANT<角色1>[,<角色2>]…
TO<角色3>[,<用户1>]…
[WITHADMINOPTION]
角色权限的收回
REVOKE<权限>[,<权限>]…
ON<对象类型><对象名>
FROM<角色>[,<角色>]…
11.现有以下两个关系模式:
雇员(员工号,姓名,年龄,工资,部门号,职务)
部门(部门号,名称,经理名,电话)
使用SQL提供的功能完成如下操作:
允许WangHong对两个关系进行任何操作,并可以将他的权限转授他人。
允许所有用户查询部门关系。
允许所有用户查询雇员关系中除员工号、年龄和工资之外的所有属性。
允许LiLan对雇员关系中的工资属性进行修改。
定义一个角色Manager,可以对部门关系进行任何操作,对雇员关系除了不能修改工资外,可以进行任何操作。
SongHua是秘书,拥有角色Manager的权限。
收回
~
的授权。
不允许角色Manager修改雇员的职务属性值。
解:
允许WangHong对两个关系进行任何操作,并可以将他的权限转授他人:
GRANTALLPRIVILEGES
ONTABLE雇员,部门
TOWangHong;
WITHGRANTOPTION;
允许所有用户查询部门关系:
GRANTSELECTONTABLE部门
TOPUBLIC;
允许所有用户查询雇员关系中除员工号、年龄和工资之外的所有属性:
GRANTSELECT(姓名,部门号,职务)ONTABLE雇员
TOPUBLIC;
允许LiLan对雇员关系中的工资属性进行修改:
GRANTUPDATE(工资)ONTABLE部门
TOLiLan;
定义一个角色Manager,可以对部门关系进行任何操作,对雇员关系除了不能修改工资外,可以进行任何操作:
CREATEROLEManager;
GRANTALLPRIVILEGES
ONTABLE雇员,部门
TOWangHong;
REVOKEUPDATE(工资)ONTABLE部门FROMManager;
SongHua是秘书,拥有角色Manager的权限:
GRANTManager
TOSongHua;
收回
(1)~(4)的授权。
REVOKEALLPRIVILEGES
ONTABLE雇员,部门
FROMWangHong;
REVOKESELECTONTABLE部门
FROMPUBLIC;
REVOKESELECT(姓名,部门号,职务)ONTABLE雇员
FROMPUBLIC;
REVOKEUPDATE(工资)ONTABLE部门
FROMLiLan;
不允许角色Manager修改雇员的职务属性值:
REVOKEUPDATE(职务)ONTABLE雇员FROMManager;