《《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》第5章習(xí)題答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》第5章習(xí)題答案(6頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第5章數(shù)據(jù)庫(kù)完整性與安全性
1. 什么是數(shù)據(jù)庫(kù)的完整性?什么是數(shù)據(jù)庫(kù)的安全性??jī)烧咧g有什么區(qū)別和聯(lián)系?
解:
數(shù)據(jù)庫(kù)的完整性是指數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性,其目的是防止不符合語(yǔ)義、不正確的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù),從而來(lái)保證數(shù)據(jù)庫(kù)系統(tǒng)能夠真實(shí)的反映客觀現(xiàn)實(shí)世界。
數(shù)據(jù)庫(kù)安全性是指保護(hù)數(shù)據(jù)庫(kù),防止因用戶非法使用數(shù)據(jù)庫(kù)造成數(shù)據(jù)泄露、更改或破壞。
數(shù)據(jù)的完整性和安全性是兩個(gè)不同的概念,但是有一定的聯(lián)系:
前者是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出,即所謂垃圾進(jìn)垃圾出所造成的無(wú)效操作和錯(cuò)誤結(jié)果。后者是保護(hù)數(shù)據(jù)庫(kù)防止惡意的破壞和非法的存取。也就是說(shuō),安全性措施的防
2、范對(duì)象是非法用戶和非法操作,完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。
2. 什么是數(shù)據(jù)庫(kù)的完整性約束條件?完整性約束條件可以分為哪幾類?
解:
完整性約束條件是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)應(yīng)該滿足的語(yǔ)義約束條件。一般可以分為六類:靜態(tài)列級(jí)約束、靜態(tài)元組約束、靜態(tài)關(guān)系約束、動(dòng)態(tài)列級(jí)約束、動(dòng)態(tài)元組約束、動(dòng)態(tài)關(guān)系約束。靜態(tài)列級(jí)約束是對(duì)一個(gè)列的取值域的說(shuō)明,包括以下幾個(gè)方面:①數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長(zhǎng)度、單位、精度等;②對(duì)數(shù)據(jù)格式的約束;③對(duì)取值范圍或取值集合的約束;④對(duì)空值的約束;⑤其他約束。靜態(tài)元組約束就是規(guī)定組成一個(gè)元組的各個(gè)列之間的約束關(guān)系,靜態(tài)元組約束只局限在單個(gè)元組上。靜態(tài)關(guān)系約束是在一
3、個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。常見(jiàn)的靜態(tài)關(guān)系約束有:①實(shí)體完整性約束;②參照完整性約束;③函數(shù)依賴約束。動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿足的約束條件,包括下面兩方面:①修改列定義時(shí)的約束;②修改列值時(shí)的約束。動(dòng)態(tài)元組約束是指修改某個(gè)元組的值時(shí)需要參照其舊值,并且新舊值之間需要滿足某種約束條件。動(dòng)態(tài)關(guān)系約束是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務(wù)一致性、原子性等約束條件。
3. 試述DBMS如何實(shí)現(xiàn)完整性控制。
解:
為了維護(hù)數(shù)據(jù)庫(kù)的完整性,DBMS提供了以下三種機(jī)制:
①完整性約束條件定義完整性約束條件也稱為完整性規(guī)則,是數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須滿足的語(yǔ)
4、義約束條件。SQL標(biāo)準(zhǔn)使用了一系列概念來(lái)描述完整性,包括關(guān)系模型的實(shí)體完整性、參照完整性和用戶定義完整性。這些完整性一般由SQL的DDL語(yǔ)義來(lái)實(shí)現(xiàn)。它們作為數(shù)據(jù)庫(kù)模式的一部分存入數(shù)據(jù)字典中。
②完整性檢查方法檢查數(shù)據(jù)是否滿足已定義的完整性約束條件稱為完整性檢查。一般在INSERT、UPDATE、DELETE語(yǔ)句執(zhí)行后開(kāi)始檢查,也可以在事務(wù)提交時(shí)檢查。檢查這些操作執(zhí)行后數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否違背了完整性約束條件。
③違約處理若發(fā)現(xiàn)用戶操作違背了完整性約束條件,應(yīng)采取一定的措施,如拒絕(NOACTION)執(zhí)行該操作,或級(jí)連(CASCADE)執(zhí)行其它操作,進(jìn)行違約處理以保證數(shù)據(jù)的完整性。
4.
5、現(xiàn)有以下四個(gè)關(guān)系模式:
供應(yīng)商(供應(yīng)商編號(hào),姓名,電話,地點(diǎn)),其中供應(yīng)商編號(hào)為主碼;
零件(零件編號(hào),零件名稱,顏色,重量),其中零件編號(hào)為主碼;
工程(工程編號(hào),工程名稱,所在地點(diǎn)),其中工程編號(hào)為主碼;
供應(yīng)情況(供應(yīng)商編號(hào),零件編號(hào),工程編號(hào),數(shù)量),其中供應(yīng)商編號(hào),零件編號(hào),工程編號(hào)為主碼
用SQL語(yǔ)句定義這四個(gè)關(guān)系模式,要求在模式中完成以下完整性約束條件的定義:
①定義每個(gè)模式的主碼;
②定義參照完整性;
③定義零件重量不得超過(guò)100千克。
解:
CREATE SCHEMA Supplier_schema
CREATE TABLE Supplier
6、
( Sno CHAR(5) PRIMARY KEY,
Sname CHAR(20) NOT NULL,
Phone CHAR(13),
Address CHAR(30)
);
CREATE SCHEMA Part_schema
CREATE TABLE Part
( Pno CHAR(7) PRIMARY KEY,
Pname CHAR(20) NOT NULL,
Color CHAR(10),
Weight SMALLINT CHECK(Weight <=10
7、0)
);
CREATE SCHEMA Project_schema
CREATE TABLE Project
( Jno CHAR(7) PRIMARY KEY,
Jname CHAR(20) NOT NULL,
Jaddress CHAR(30)
);
CREATE SHEMA SPJ_shema
CREATE TABLE SPJ
( Sno CHAR(5),
Pno CHAR(7),
Jno CHAR(7),
8、 Quantity SMALLINT,
PRIMARY KEY (Sno, Pno, Jno),
FOREIGN KEY (Sno) REFERENCES Supplier(Sno),
FOREIGN KEY (Pno) REFERENCES Part(Pno),
FOREIGN KEY (Jno) REFERENCES Project(Jno)
);
5. 在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中,當(dāng)操作違反實(shí)體完整性、參照完整性和用戶自定義的完整性約束條件時(shí),一般是如何分別進(jìn)行處理的。
解:
(1) 按實(shí)
9、體完整性規(guī)則自動(dòng)進(jìn)行檢查。包括:
①檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。
②檢查主碼的各個(gè)屬性是否為空,只要有一個(gè)為空就拒絕插入或修改。
(2) 按參照完整性檢查,違約處理的策略如下:
①拒絕(NO ACTION)執(zhí)行。不允許該操作執(zhí)行,該策略一般設(shè)置為默認(rèn)策略。
在被參照關(guān)系中刪除元組:僅當(dāng)參照關(guān)系中沒(méi)有任何元組的外碼值與被參照關(guān)系中要?jiǎng)h除元組的主碼值相同時(shí),系統(tǒng)才執(zhí)行刪除操作,否則拒絕此操作。
②級(jí)聯(lián)(CASCADE)操作。 當(dāng)刪除或修改被參照表的一個(gè)元組造成了與參照表的不一致,則刪除或修改參照表中的所有造成不一致的元組。
級(jí)聯(lián)操作必須在定義外碼時(shí)給出顯式定義。
10、
③設(shè)置為空值(SET NULL)。當(dāng)刪除或修改被參照表的一個(gè)元組時(shí)造成了不一致,則將參照表中的所有造成不一致的元組的對(duì)應(yīng)屬性設(shè)置為空值。
④置空值刪除(NULLIFIES)。刪除被參照關(guān)系的元組,并將參照關(guān)系中相應(yīng)元組的外碼值置空值。
(3) 按用戶自定義完整性檢查,違約處理:當(dāng)往表中插入元組或修改屬性的值時(shí),RDBMS就檢查屬性上的約束條件是否被滿足,如果不滿足則操作被拒絕執(zhí)行。
6. 觸發(fā)器的作用是什么?同一表上的多個(gè)觸發(fā)器被激活時(shí)遵循的執(zhí)行順序是什么?
解:
觸發(fā)器是用戶定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊過(guò)程,它不需要由用戶調(diào)用執(zhí)行,而是在用戶對(duì)表中的數(shù)據(jù)進(jìn)行UPDATE、
11、INSERT或DELETE操作時(shí)自動(dòng)觸發(fā)執(zhí)行。它可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)中相關(guān)表的級(jí)聯(lián)修改,能實(shí)現(xiàn)比CHECK語(yǔ)句更為復(fù)雜的約束,能提供數(shù)據(jù)庫(kù)修改前后數(shù)據(jù)變化的前后狀態(tài),能維護(hù)非規(guī)范化數(shù)據(jù)。
同一表上的多個(gè)觸發(fā)器激活時(shí)遵循以下執(zhí)行順序 :
①執(zhí)行該表上的BERORE觸發(fā)器;
②激活觸發(fā)器的SQL語(yǔ)句;
③執(zhí)行該表上的AFTER觸發(fā)器。
此外,對(duì)于同一個(gè)表上的多個(gè)BEFORE(AFTER)觸發(fā)器,遵循“誰(shuí)先創(chuàng)建誰(shuí)先執(zhí)行”的原則,即按照觸發(fā)器創(chuàng)建的時(shí)間先后順序執(zhí)行。有些RDBMS是按照觸發(fā)器名稱的字母排序順序來(lái)執(zhí)行觸發(fā)器的。
7. 什么是“權(quán)限”?用戶訪問(wèn)數(shù)據(jù)庫(kù)有哪些權(quán)限?對(duì)數(shù)據(jù)模式進(jìn)行修改有哪
12、些權(quán)限?
解:
用戶(或應(yīng)用程序)使用DB的方式稱為權(quán)限。
用戶訪問(wèn)數(shù)據(jù)庫(kù)有四種權(quán)限:Read(讀權(quán)限)、Insert(插入)、Update(修改)和Delete(修改)。
用戶對(duì)數(shù)據(jù)模式進(jìn)行修改有四種權(quán)限:Index(索引權(quán)限:允許用戶創(chuàng)建和刪除索引),Resource(資源權(quán)限:允許用戶創(chuàng)建新的關(guān)系)、Alteration(修改權(quán)限:允許用戶在關(guān)系結(jié)構(gòu)中加入或刪除屬性)和Drop(撤銷權(quán)限:允許用戶撤銷關(guān)系)。
8. 安全性措施中的強(qiáng)制存取控制是如何實(shí)現(xiàn)的?
解:
對(duì)每個(gè)數(shù)據(jù)對(duì)象賦予一定的密級(jí),級(jí)別從高到低有:絕密級(jí)、機(jī)密級(jí)、秘密級(jí)、公用級(jí),每個(gè)用戶也具有相應(yīng)的級(jí)別,稱為許可
13、證級(jí)別,密級(jí)和許可證級(jí)別都是有序的,如絕密>機(jī)密>秘密>公用,采用規(guī)則是:一是用戶只能查看比它級(jí)別低或是同級(jí)的數(shù)據(jù),二是用戶只能修改和它同級(jí)的數(shù)據(jù)。
9. SQL提供了哪些數(shù)據(jù)控制語(yǔ)句?舉例說(shuō)明。
解:
數(shù)據(jù)控制語(yǔ)言是用來(lái)設(shè)置或者更改數(shù)據(jù)庫(kù)用戶或角色權(quán)限的語(yǔ)句。SQL中,這些語(yǔ)句包括GRANT、REVOKE等語(yǔ)句。GRANT語(yǔ)句向用戶授予權(quán)限,REVOKE語(yǔ)句收回授予的權(quán)限。
例如:描述把查詢Course表的權(quán)限授予所有用戶的控制語(yǔ)句為
GRANT SELECT ON Course TO PUBLIC;
描述收回用戶U3修改學(xué)生學(xué)號(hào)的查詢權(quán)限的控制語(yǔ)句為:
REV
14、OKE UPDATE(Sno)
ON TABLE Student
FROM U3;
10. 使用角色有什么好處?涉及角色的SQL語(yǔ)句有哪些?
解:
使用角色的好處:數(shù)據(jù)庫(kù)角色是指被命名的一組與數(shù)據(jù)庫(kù)操作相關(guān)的權(quán)限。角色是權(quán)限的集合,可以為一組具有相同權(quán)限的用戶創(chuàng)建一個(gè)角色,角色簡(jiǎn)化了授權(quán)操作。使用角色進(jìn)行授權(quán)必須先創(chuàng)建角色,將數(shù)據(jù)庫(kù)對(duì)象上的存取權(quán)限授予角色,才能將角色授予用戶,使得用戶擁有角色所具有的所有存取權(quán)限。對(duì)一個(gè)角色授予、拒絕或廢除的權(quán)限也適用于該角色的任何成員。
涉及角色的SQL語(yǔ)句有:角色的創(chuàng)建
CREATE ROLE <角色名>
給角色授權(quán)
15、 GRANT<權(quán)限>[,<權(quán)限>]…
ON <對(duì)象類型>對(duì)象名
TO <角色>[,<角色>]…
將一個(gè)角色授予其它的角色或用戶
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用戶1>]…
[WITH ADMIN OPTION]
角色權(quán)限的收回
REVOKE<權(quán)限>[,<權(quán)限>]…
ON<對(duì)象類型><對(duì)象名>
FROM <角色>[,<角色>]…
11. 現(xiàn)有以下兩個(gè)關(guān)系模式:
雇員(員工號(hào),姓名,年齡,工資,部門號(hào),職務(wù))
部門(部門號(hào),名稱,經(jīng)理名,電話)
使用SQL提供的功
16、能完成如下操作:
①允許WangHong對(duì)兩個(gè)關(guān)系進(jìn)行任何操作,并可以將他的權(quán)限轉(zhuǎn)授他人。
②允許所有用戶查詢部門關(guān)系。
③允許所有用戶查詢雇員關(guān)系中除員工號(hào)、年齡和工資之外的所有屬性。
④允許LiLan對(duì)雇員關(guān)系中的工資屬性進(jìn)行修改。
⑤定義一個(gè)角色Manager,可以對(duì)部門關(guān)系進(jìn)行任何操作,對(duì)雇員關(guān)系除了不能修改工資外,可以進(jìn)行任何操作。
⑥SongHua是秘書(shū),擁有角色Manager的權(quán)限。
⑦收回①~④的授權(quán)。
⑧不允許角色Manager修改雇員的職務(wù)屬性值。
解:
①允許WangHong對(duì)兩個(gè)關(guān)系進(jìn)行任何操作,并可以將他的權(quán)限轉(zhuǎn)授他人:
GRANT ALL PR
17、IVILEGES
ON TABLE雇員, 部門
TO WangHong;
WITH GRANT OPTION;
②允許所有用戶查詢部門關(guān)系:
GRANT SELECT ON TABLE部門
TO PUBLIC;
③允許所有用戶查詢雇員關(guān)系中除員工號(hào)、年齡和工資之外的所有屬性:
GRANT SELECT(姓名,部門號(hào),職務(wù)) ON TABLE雇員
TO PUBLIC;
④允許LiLan對(duì)雇員關(guān)系中的工資屬性進(jìn)行修改:
GRANT UPDATE(工資) ON TABLE部門
TO LiLan;
⑤定義一個(gè)角色Manager,可以對(duì)部門關(guān)系進(jìn)行任何操作,對(duì)雇員關(guān)系除了不
18、能修改工資外,可以進(jìn)行任何操作:
CREATE ROLE Manager;
GRANT ALL PRIVILEGES
ON TABLE雇員,部門
TO WangHong;
REVOKE UPDATE(工資) ON TABLE部門FROM Manager;
⑥SongHua是秘書(shū),擁有角色Manager的權(quán)限:
GRANTManager
TO SongHua;
⑦收回(1)~(4)的授權(quán)。
REVOKE ALL PRIVILEGES
ON TABLE雇員, 部門
FROMWangHong;
REVOKE SELECT ON TABLE部門
FROM PUBLIC;
REVOKE SELECT(姓名,部門號(hào),職務(wù)) ON TABLE雇員
FROM PUBLIC;
REVOKE UPDATE(工資) ON TABLE部門
FROMLiLan;
⑧不允許角色Manager修改雇員的職務(wù)屬性值:
REVOKE UPDATE(職務(wù)) ON TABLE雇員FROM Manager;