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