《《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》第章習(xí)題答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用》第章習(xí)題答案(7頁(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ù)防止惡意的破
壞和非法的存取。
2、也就是說(shuō),安全性措施的防范對(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)系,靜
3、態(tài)元組約束只局限在單個(gè)元組上。靜態(tài)關(guān)系約束是在一個(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ī)制:
① 完整
4、性約束條件定義完整性約束條件也稱為完整性規(guī)則,是數(shù)據(jù)庫(kù)中的數(shù)據(jù)必
須滿足的語(yǔ)義約束條件。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)采取一定的措施,如拒絕
(NOACT
5、ION)執(zhí)行該操作,或級(jí)連(CASCADE)執(zhí)行其它操作,進(jìn)行違約處理以
保證數(shù)據(jù)的完整性。
4. 現(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千克。
解:
CREATES
6、CHEMASupplier_schemaCREATETABLESupplier
(SnoCHAR(5)PRIMARYKEY,
SnameCHAR(20)NOTNULL,
PhoneCHAR(13),
AddressCHAR(30)
);
CREATESCHEMAPart_schemaCREATETABLEPart
(PnoCHAR(7)PRIMARYKEY,
PnameCHAR(20)NOTNULL,
ColorCHAR(10),
WeightSMALLINTCHECK(Weight<=100)
);
CREATESCHEMAProject_schemaCREATETA
7、BLEProject
( Jno
Jname
Jaddress
CHAR(30)
);
CREATE SHEMA SPJ
shema
CREATE TABLE SPJ
( Sno
Pno
Jno
CHAR(5),
CHAR(7),
CHAR(7),
Quantity
SMALLINT,
CHAR(7)PRIMARYKEY,CHAR(20)NOTNULL,
PRIMARYKEY(Sno,Pno,Jno),
FOREIGNKEY(Sno)REFERENCESSupplier(Sno),
FOREIGNKEY(Pno)REFERENCESPart(Pno),F
8、OREIGNKEY(Jno)REFERENCESProject(Jno));
5. 在關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)中,當(dāng)操作違反實(shí)體完整性、參照完整性和用戶自定義的完
整性約束條件時(shí),一般是如何分別進(jìn)行處理的。
解:
(1) 按實(shí)體完整性規(guī)則自動(dòng)進(jìn)行檢查。包括:
①檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。
②檢查主碼的各個(gè)屬性是否為空,只要有一個(gè)為空就拒絕插入或修改。
(2) 按參照完整性檢查,違約處理的策略如下:
①拒絕(NOACTION)執(zhí)行。不允許該操作執(zhí)行,該策略一般設(shè)置為默認(rèn)策略。
在被參照關(guān)系中刪除元組:僅當(dāng)參照關(guān)系中沒(méi)有任何元組的外碼值與被參照關(guān)系
中要?jiǎng)h除元組的主
9、碼值相同時(shí),系統(tǒng)才執(zhí)行刪除操作,否則拒絕此操作。
②級(jí)聯(lián)(CASCADE)操作。當(dāng)刪除或修改被參照表的一個(gè)元組造成了與參照表的不一致,則刪除或修改參照表中的所有造成不一致的元組。
級(jí)聯(lián)操作必須在定義外碼時(shí)給出顯式定義。
③設(shè)置為空值(SETNULL)。當(dāng)刪除或修改被參照表的一個(gè)元組時(shí)造成了不一致,
則將參照表中的所有造成不一致的元組的對(duì)應(yīng)屬性設(shè)置為空值。
④置空值刪除(NULLIFIES)0刪除被參照關(guān)系的元組,并將參照關(guān)系中相應(yīng)元組的外碼值置空值。
(3) 按用戶自定義完整性檢查,違約處理:當(dāng)往表中插入元組或修改屬性的值時(shí),
RDBMS就檢查屬性上的約束條件是否被滿足,如果不滿
10、足則操作被拒絕執(zhí)行。
6. 觸發(fā)器的作用是什么?同一表上的多個(gè)觸發(fā)器被激活時(shí)遵循的執(zhí)行順序是什
么?
解:
觸發(fā)器是用戶定義在關(guān)系表上的一類由事件驅(qū)動(dòng)的特殊過(guò)程,它不需要由用戶調(diào)
用執(zhí)行,而是在用戶對(duì)表中的數(shù)據(jù)進(jìn)行UPDATE、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è)表上
11、的多個(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)行修改有哪些權(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)限:允許用
12、戶在關(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í)別,稱為許可證級(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ǔ)句向
13、用戶授予權(quán)限,REVOKE語(yǔ)句收回授予的權(quán)限。
例如:描述把查詢Course表的權(quán)限授予所有用戶的控制語(yǔ)句為
GRANTSELECTONCourseTOPUBLIC;
描述收回用戶U3修改學(xué)生學(xué)號(hào)的查詢權(quán)限的控制語(yǔ)句為:
REVOKEUPDATE(Sno)
ONTABLEStudent
FROMU3;
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)限授予
14、角色,才能將角
色授予用戶,使得用戶擁有角色所具有的所有存取權(quán)限。對(duì)一個(gè)角色授予、拒絕或廢
除的權(quán)限也適用于該角色的任何成員。
涉及角色的SQL語(yǔ)句有:角色的創(chuàng)建
CREATEROLE<角色名>
給角色授權(quán)
GRANT<權(quán)限>[,<權(quán)限習(xí)…
ON<對(duì)象類型>對(duì)象名
TO<角色>卜角色刁…
將一個(gè)角色授予其它的角色或用戶
GRANT<角色1>卜角色2刁…
TO<角色3>卜用戶1刁…
[WITHADMINOPTION]
角色權(quán)限的收回
REVOKE<權(quán)限>卜權(quán)限習(xí)…
ON<對(duì)象類型><對(duì)象名>
FROM<角色>卜角色刁…
11. 現(xiàn)有以下兩個(gè)關(guān)系模式:
雇員(員
15、工號(hào),姓名,年齡,工資,部門(mén)號(hào),職務(wù))
部門(mén)(部門(mén)號(hào),名稱,經(jīng)理名,電話)
使用SQL提供的功能完成如下操作:
①允許WangHong對(duì)兩個(gè)關(guān)系進(jìn)行任何操作,并可以將他的權(quán)限轉(zhuǎn)授他人。
②允許所有用戶查詢部門(mén)關(guān)系。
③允許所有用戶查詢雇員關(guān)系中除員工號(hào)、年齡和工資之外的所有屬性。
④允許LiLan對(duì)雇員關(guān)系中的工資屬性進(jìn)行修改。
⑤定義一個(gè)角色Manager,可以對(duì)部門(mén)關(guān)系進(jìn)行任何操作,對(duì)雇員關(guān)系除了不能修改工資外,可以進(jìn)行任何操作。
⑥SongHua是秘書(shū),擁有角色Manager的權(quán)限。
⑦收回①?④的授權(quán)。
⑧不允許角色Manager修改雇員的職務(wù)屬性值。
解:
①
16、允許WangHong對(duì)兩個(gè)關(guān)系進(jìn)行任何操作,并可以將他的權(quán)限轉(zhuǎn)授他人:
GRANTALLPRIVILEGES
ONTABLE雇員,部門(mén)
TOWangHong;
WITHGRANTOPTION;
②允許所有用戶查詢部門(mén)關(guān)系:
GRANTSELECTONTABLE部門(mén)
TOPUBLIC;
③允許所有用戶查詢雇員關(guān)系中除員工號(hào)、年齡和工資之外的所有屬性:
GRANTSELECT(姓名,部門(mén)號(hào),職務(wù))ONTABLE雇員
TOPUBLIC;
④允許LiLan對(duì)雇員關(guān)系中的工資屬性進(jìn)行修改:
GRANTUPDATE(工資)ONTABLE部門(mén)
TOLiLan;
⑤定義一個(gè)角色Ma
17、nager,可以對(duì)部門(mén)關(guān)系進(jìn)行任何操作,對(duì)雇員關(guān)系除了不能修改工資外,可以進(jìn)行任何操作:
CREATEROLEManager;
GRANTALLPRIVILEGES
ONTABLE雇員,部門(mén)
TOWangHong;
REVOKEUPDATE(工資)ONTABLE部門(mén)FROMManager;
⑥SongHua是秘書(shū),擁有角色Manager的權(quán)限:
GRANTManager
TOSongHua;
⑦收回(1)?(4)的授權(quán)。
REVOKEALLPRIVILEGES
ONTABLE雇員,部門(mén)
FROMWangHong;
REVOKESELECTONTABLE部門(mén)
FROMPUBLIC;
REVOKESELECT(姓名,部門(mén)號(hào),職務(wù))ONTABLE雇員
FROMPUBLIC;
REVOKEUPDATE(工資)ONTABLE部門(mén)
FROMLiLan;
⑧不允許角色Manager修改雇員的職務(wù)屬性值:
REVOKEUPDATE(職務(wù))ONTABLE雇員FROMManager;