《《數(shù)據(jù)庫技術(shù)與應用》第章習題答案》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫技術(shù)與應用》第章習題答案(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第5章數(shù)據(jù)庫完整性與安全性
1. 什么是數(shù)據(jù)庫的完整性?什么是數(shù)據(jù)庫的安全性?兩者之間有什么區(qū)別和聯(lián)
系?
解:
數(shù)據(jù)庫的完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和相容性,其目的是防止不
符合語義、不正確的數(shù)據(jù)進入數(shù)據(jù)庫,從而來保證數(shù)據(jù)庫系統(tǒng)能夠真實的反映客觀現(xiàn)
實世界。
數(shù)據(jù)庫安全性是指保護數(shù)據(jù)庫,防止因用戶非法使用數(shù)據(jù)庫造成數(shù)據(jù)泄露、更改
或破壞。
數(shù)據(jù)的完整性和安全性是兩個不同的概念,但是有一定的聯(lián)系:
前者是為了防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),防止錯誤信息的輸入和輸出,
即所謂垃圾進垃圾出所造成的無效操作和錯誤結(jié)果。后者是保護數(shù)據(jù)庫防止惡意的破
壞和非法的存取。
2、也就是說,安全性措施的防范對象是非法用戶和非法操作,完整性
措施的防范對象是不合語義的數(shù)據(jù)。
2. 什么是數(shù)據(jù)庫的完整性約束條件?完整性約束條件可以分為哪幾類?
解:
完整性約束條件是指數(shù)據(jù)庫中的數(shù)據(jù)應該滿足的語義約束條件。一般可以分為六
類:靜態(tài)列級約束、靜態(tài)元組約束、靜態(tài)關(guān)系約束、動態(tài)列級約束、動態(tài)元組約束、動態(tài)
關(guān)系約束。靜態(tài)列級約束是對一個列的取值域的說明,包括以下幾個方面:①數(shù)據(jù)類型
的約束,包括數(shù)據(jù)的類型、長度、單位、精度等;②對數(shù)據(jù)格式的約束;③對取值范
圍或取值集合的約束;④對空值的約束;⑤其他約束。靜態(tài)元組約束就是規(guī)定組成一個元組
的各個列之間的約束關(guān)系,靜
3、態(tài)元組約束只局限在單個元組上。靜態(tài)關(guān)系約束是在一個關(guān)系
的各個元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。常見的靜態(tài)關(guān)系約束有:①實體
完整性約束;②參照完整性約束;③函數(shù)依賴約束。動態(tài)列級約束是修改列定義或列值
時應滿足的約束條件,包括下面兩方面:①修改列定義時的約束;②修改列值時的約
束。動態(tài)元組約束是指修改某個元組的值時需要參照其舊值,并且新舊值之間需要滿
足某種約束條件。動態(tài)關(guān)系約束是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務一
致性、原子性等約束條件。
3. 試述DBMS如何實現(xiàn)完整性控制。
解:
為了維護數(shù)據(jù)庫的完整性,DBMS提供了以下三種機制:
① 完整
4、性約束條件定義完整性約束條件也稱為完整性規(guī)則,是數(shù)據(jù)庫中的數(shù)據(jù)必
須滿足的語義約束條件。SQL標準使用了一系列概念來描述完整性,包括關(guān)系模型的
實體完整性、參照完整性和用戶定義完整性。這些完整性一般由SQL的DDL語義來
實現(xiàn)。它們作為數(shù)據(jù)庫模式的一部分存入數(shù)據(jù)字典中。
② 完整性檢查方法檢查數(shù)據(jù)是否滿足已定義的完整性約束條件稱為完整性檢查。
一般在INSERT、UPDATE、DELETE語句執(zhí)行后開始檢查,也可以在事務提交時檢查。
檢查這些操作執(zhí)行后數(shù)據(jù)庫中的數(shù)據(jù)是否違背了完整性約束條件。
③ 違約處理若發(fā)現(xiàn)用戶操作違背了完整性約束條件,應采取一定的措施,如拒絕
(NOACT
5、ION)執(zhí)行該操作,或級連(CASCADE)執(zhí)行其它操作,進行違約處理以
保證數(shù)據(jù)的完整性。
4. 現(xiàn)有以下四個關(guān)系模式:
供應商(供應商編號,姓名,電話,地點),其中供應商編號為主碼;
零件(零件編號,零件名稱,顏色,重量),其中零件編號為主碼;
工程(工程編號,工程名稱,所在地點),其中工程編號為主碼;供應情況(供應商編號,零件編號,工程編號,數(shù)量),其中供應商編號,零件編號,工程編號為主碼
用SQL語句定義這四個關(guān)系模式,要求在模式中完成以下完整性約束條件的定義:
①定義每個模式的主碼;
②定義參照完整性;
③定義零件重量不得超過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ù)庫系統(tǒng)中,當操作違反實體完整性、參照完整性和用戶自定義的完
整性約束條件時,一般是如何分別進行處理的。
解:
(1) 按實體完整性規(guī)則自動進行檢查。包括:
①檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。
②檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改。
(2) 按參照完整性檢查,違約處理的策略如下:
①拒絕(NOACTION)執(zhí)行。不允許該操作執(zhí)行,該策略一般設置為默認策略。
在被參照關(guān)系中刪除元組:僅當參照關(guān)系中沒有任何元組的外碼值與被參照關(guān)系
中要刪除元組的主
9、碼值相同時,系統(tǒng)才執(zhí)行刪除操作,否則拒絕此操作。
②級聯(lián)(CASCADE)操作。當刪除或修改被參照表的一個元組造成了與參照表的不一致,則刪除或修改參照表中的所有造成不一致的元組。
級聯(lián)操作必須在定義外碼時給出顯式定義。
③設置為空值(SETNULL)。當刪除或修改被參照表的一個元組時造成了不一致,
則將參照表中的所有造成不一致的元組的對應屬性設置為空值。
④置空值刪除(NULLIFIES)0刪除被參照關(guān)系的元組,并將參照關(guān)系中相應元組的外碼值置空值。
(3) 按用戶自定義完整性檢查,違約處理:當往表中插入元組或修改屬性的值時,
RDBMS就檢查屬性上的約束條件是否被滿足,如果不滿
10、足則操作被拒絕執(zhí)行。
6. 觸發(fā)器的作用是什么?同一表上的多個觸發(fā)器被激活時遵循的執(zhí)行順序是什
么?
解:
觸發(fā)器是用戶定義在關(guān)系表上的一類由事件驅(qū)動的特殊過程,它不需要由用戶調(diào)
用執(zhí)行,而是在用戶對表中的數(shù)據(jù)進行UPDATE、INSERT或DELETE操作時自動觸
發(fā)執(zhí)行。它可以實現(xiàn)數(shù)據(jù)庫中相關(guān)表的級聯(lián)修改,能實現(xiàn)比CHECK語句更為復雜的約束,能提供數(shù)據(jù)庫修改前后數(shù)據(jù)變化的前后狀態(tài),能維護非規(guī)范化數(shù)據(jù)。
同一表上的多個觸發(fā)器激活時遵循以下執(zhí)行順序:
①執(zhí)行該表上的BERORE觸發(fā)器;
②激活觸發(fā)器的SQL語句;
③執(zhí)行該表上的AFTER觸發(fā)器。
止匕外,對于同一個表上
11、的多個BEFORE(AFTER)觸發(fā)器,遵循誰先創(chuàng)建誰先執(zhí)行的原則,即按照觸發(fā)器創(chuàng)建的時間先后順序執(zhí)行。有些RDBMS是按照觸發(fā)器名稱的
字母排序順序來執(zhí)行觸發(fā)器的。
7. 什么是“權(quán)限”?用戶訪問數(shù)據(jù)庫有哪些權(quán)限?對數(shù)據(jù)模式進行修改有哪些權(quán)
限?
解:
用戶(或應用程序)使用DB的方式稱為權(quán)限。
用戶訪問數(shù)據(jù)庫有四種權(quán)限:Read(讀權(quán)限)、Insert(插入)、Update(修改)和Delete(修改)。
用戶對數(shù)據(jù)模式進行修改有四種權(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. 安全性措施中的強制存取控制是如何實現(xiàn)的?
解:
對每個數(shù)據(jù)對象賦予一定的密級,級別從高到低有:絕密級、機密級、秘密級、
公用級,每個用戶也具有相應的級別,稱為許可證級別,密級和許可證級別都是有序
的,如絕密>機密>秘密>公用,采用規(guī)則是:一是用戶只能查看比它級別低或是同級的
數(shù)據(jù),二是用戶只能修改和它同級的數(shù)據(jù)。
9. SQL提供了哪些數(shù)據(jù)控制語句?舉例說明。
解:
數(shù)據(jù)控制語言是用來設置或者更改數(shù)據(jù)庫用戶或角色權(quán)限的語句。SQL中,這些
語句包括GRANT、REVOKE等語句。GRANT語句向
13、用戶授予權(quán)限,REVOKE語句收回授予的權(quán)限。
例如:描述把查詢Course表的權(quán)限授予所有用戶的控制語句為
GRANTSELECTONCourseTOPUBLIC;
描述收回用戶U3修改學生學號的查詢權(quán)限的控制語句為:
REVOKEUPDATE(Sno)
ONTABLEStudent
FROMU3;
10. 使用角色有什么好處?涉及角色的SQL語句有哪些?
解:
使用角色的好處:數(shù)據(jù)庫角色是指被命名的一組與數(shù)據(jù)庫操作相關(guān)的權(quán)限。角色
是權(quán)限的集合,可以為一組具有相同權(quán)限的用戶創(chuàng)建一個角色,角色簡化了授權(quán)操作。
使用角色進行授權(quán)必須先創(chuàng)建角色,將數(shù)據(jù)庫對象上的存取權(quán)限授予
14、角色,才能將角
色授予用戶,使得用戶擁有角色所具有的所有存取權(quán)限。對一個角色授予、拒絕或廢
除的權(quán)限也適用于該角色的任何成員。
涉及角色的SQL語句有:角色的創(chuàng)建
CREATEROLE<角色名>
給角色授權(quán)
GRANT<權(quán)限>[,<權(quán)限習…
ON<對象類型>對象名
TO<角色>卜角色刁…
將一個角色授予其它的角色或用戶
GRANT<角色1>卜角色2刁…
TO<角色3>卜用戶1刁…
[WITHADMINOPTION]
角色權(quán)限的收回
REVOKE<權(quán)限>卜權(quán)限習…
ON<對象類型><對象名>
FROM<角色>卜角色刁…
11. 現(xiàn)有以下兩個關(guān)系模式:
雇員(員
15、工號,姓名,年齡,工資,部門號,職務)
部門(部門號,名稱,經(jīng)理名,電話)
使用SQL提供的功能完成如下操作:
①允許WangHong對兩個關(guān)系進行任何操作,并可以將他的權(quán)限轉(zhuǎn)授他人。
②允許所有用戶查詢部門關(guān)系。
③允許所有用戶查詢雇員關(guān)系中除員工號、年齡和工資之外的所有屬性。
④允許LiLan對雇員關(guān)系中的工資屬性進行修改。
⑤定義一個角色Manager,可以對部門關(guān)系進行任何操作,對雇員關(guān)系除了不能修改工資外,可以進行任何操作。
⑥SongHua是秘書,擁有角色Manager的權(quán)限。
⑦收回①?④的授權(quán)。
⑧不允許角色Manager修改雇員的職務屬性值。
解:
①
16、允許WangHong對兩個關(guān)系進行任何操作,并可以將他的權(quán)限轉(zhuǎn)授他人:
GRANTALLPRIVILEGES
ONTABLE雇員,部門
TOWangHong;
WITHGRANTOPTION;
②允許所有用戶查詢部門關(guān)系:
GRANTSELECTONTABLE部門
TOPUBLIC;
③允許所有用戶查詢雇員關(guān)系中除員工號、年齡和工資之外的所有屬性:
GRANTSELECT(姓名,部門號,職務)ONTABLE雇員
TOPUBLIC;
④允許LiLan對雇員關(guān)系中的工資屬性進行修改:
GRANTUPDATE(工資)ONTABLE部門
TOLiLan;
⑤定義一個角色Ma
17、nager,可以對部門關(guān)系進行任何操作,對雇員關(guān)系除了不能修改工資外,可以進行任何操作:
CREATEROLEManager;
GRANTALLPRIVILEGES
ONTABLE雇員,部門
TOWangHong;
REVOKEUPDATE(工資)ONTABLE部門FROMManager;
⑥SongHua是秘書,擁有角色Manager的權(quán)限:
GRANTManager
TOSongHua;
⑦收回(1)?(4)的授權(quán)。
REVOKEALLPRIVILEGES
ONTABLE雇員,部門
FROMWangHong;
REVOKESELECTONTABLE部門
FROMPUBLIC;
REVOKESELECT(姓名,部門號,職務)ONTABLE雇員
FROMPUBLIC;
REVOKEUPDATE(工資)ONTABLE部門
FROMLiLan;
⑧不允許角色Manager修改雇員的職務屬性值:
REVOKEUPDATE(職務)ONTABLE雇員FROMManager;