《《數(shù)據(jù)庫技術(shù)與應(yīng)用》第5章-習(xí)題答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫技術(shù)與應(yīng)用》第5章-習(xí)題答案(5頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第 5 章數(shù)據(jù)庫完整性與安全性
1. 什么是數(shù)據(jù)庫的完整性?什么是數(shù)據(jù)庫的安全性??jī)烧咧g有什么區(qū)別和聯(lián)系?
解:
數(shù)據(jù)庫的完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性、 有效性和相容性, 其目的是防止不符合語 義、不正確的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫,從而來保證數(shù)據(jù)庫系統(tǒng)能夠真實(shí)的反映客觀現(xiàn)實(shí)世界。
數(shù)據(jù)庫安全性是指保護(hù)數(shù)據(jù)庫, 防止因用戶非法使用數(shù)據(jù)庫造成數(shù)據(jù)泄露、 更改或破壞。
數(shù)據(jù)的完整性和安全性是兩個(gè)不同的概念,但是有一定的聯(lián)系 :
前者是為了防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù), 防止錯(cuò)誤信息的輸入和輸出, 即所謂
垃圾進(jìn)垃圾出所造成的無效操作和錯(cuò)誤結(jié)果。 后者是保護(hù)數(shù)據(jù)庫防止惡意的破壞和非法的存
2、
取。 也就是說, 安全性措施的防范對(duì)象是非法用戶和非法操作, 完整性措施的防范對(duì)象是不 合語義的數(shù)據(jù)。
2. 什么是數(shù)據(jù)庫的完整性約束條件?完整性約束條件可以分為哪幾類?
解:
完整性約束條件是指數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)該滿足的語義約束條件。 一般可以分為六類: 靜 態(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è)列的取值域的說明, 包括以下幾個(gè)方面: ①數(shù)據(jù)類型的約束, 包括數(shù)據(jù) 的類型、長(zhǎng)度、單位、精度等;② 對(duì)數(shù)據(jù)格式的約束;③對(duì)取值范圍或取值集合的約束;
④ 對(duì) 空值 的 約 束; ⑤其 他約束。 靜態(tài)元組約束就是規(guī)定組成一個(gè)
3、元組的各個(gè)列之間的約束關(guān)系, 靜態(tài) 元組約束只局限在單個(gè)元組上。靜態(tài)關(guān)系約束是在一個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常 存在各 種聯(liá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)完整性控制。
解:
為了維
4、護(hù)數(shù)據(jù)庫的完整性, DBMS 提供了以下三種機(jī)制:
① 完整性約束條件定義完整性約束條件也稱為完整性規(guī)則, 是數(shù)據(jù)庫中的數(shù)據(jù)必須滿足
的語義約束條件。 SQL 標(biāo)準(zhǔn)使用了一系列概念來描述完整性, 包括關(guān)系模型的實(shí)體完整性、
參照完整性和用戶定義完整性。 這些完整性一般由 SQL 的 DDL 語義來實(shí)現(xiàn)。 它們作為數(shù)據(jù) 庫模式的一部分存入數(shù)據(jù)字典中。
② 完整性檢查方法檢查數(shù)據(jù)是否滿足已定義的完整性約束條件稱為完整性檢查。 一般在 INSERT、 UPDATE 、 DELETE 語句執(zhí)行后開始檢查,也可以在事務(wù)提交時(shí)檢查。檢查這些 操作執(zhí)行后數(shù)據(jù)庫中的數(shù)據(jù)是否違背了完整性約束條件。
③
5、 違約處理若發(fā)現(xiàn)用戶操作違背了完整性約束條件,應(yīng)采取一定的措施,如拒絕
( NOACTION )執(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 語句定義這四個(gè)關(guān)系模式,要求在模式中完成以下完整性約束條件的定義:
6、
①定義每個(gè)模式的主碼;
②定義參照完整性;
③定義零件重量不得超過 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)操作違反實(shí)體完整性、參照完整性和用戶自定義的完整性 約束條件時(shí),一般是如何分別進(jìn)行處理的。
解:
(1) 按 實(shí)體完整性 規(guī)則自動(dòng)進(jìn)行檢查。包括:
① 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。
②檢查主碼的各個(gè)屬性是否為空,只要有一
9、個(gè)為空就拒絕插入或修改。
(2) 按 參照完整性 檢查,違約處理的策略如下:
①拒絕(NO ACTION )執(zhí)行。不允許該操作執(zhí)行,該策略一般設(shè)置為默認(rèn)策略。
在被參照關(guān)系中刪除元組: 僅當(dāng)參照關(guān)系中沒有任何元組的外碼值與被參照關(guān)系中要?jiǎng)h
除元組的主碼值相同時(shí),系統(tǒng)才執(zhí)行刪除操作,否則拒絕此操作。
②級(jí)聯(lián)(CASCADE )操作。 當(dāng)刪除或修改被參照表的一個(gè)元組造成了與參照表的不
一致,則刪除或修改參照表中的所有造成不一致的元組。
級(jí)聯(lián)操作必須在定義外碼時(shí)給出顯式定義。
③ 設(shè)置為空值( SET NULL ) 。當(dāng)刪除或修改被參照表的一個(gè)元組時(shí)造成了不一致,則
將參照表中的所
10、有造成不一致的元組的對(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)的特殊過程, 它不需要由用戶調(diào)用執(zhí)行,
而是在用戶對(duì)表中的數(shù)據(jù)進(jìn)行 UPDATE 、 INSERT 或 DELETE 操作時(shí)自動(dòng)觸發(fā)執(zhí)行。 它可以
實(shí)現(xiàn)數(shù)據(jù)
11、庫中相關(guān)表的級(jí)聯(lián)修改, 能實(shí)現(xiàn)比 CHECK 語句更為復(fù)雜的約束, 能提供數(shù)據(jù)庫修
改前后數(shù)據(jù)變化的前后狀態(tài),能維護(hù)非規(guī)范化數(shù)據(jù)。
同一表上的多個(gè)觸發(fā)器激活時(shí)遵循以下執(zhí)行順序 :
① 執(zhí)行該表上的 BERORE 觸發(fā)器;
②激活觸發(fā)器的 SQL 語句;
③ 執(zhí)行該表上的 AFTER 觸發(fā)器。
此外, 對(duì)于同一個(gè)表上的多個(gè) BEFORE(AFTER) 觸發(fā)器, 遵循 “誰先創(chuàng)建誰先執(zhí)行 ”的原
則, 即按照觸發(fā)器創(chuàng)建的時(shí)間先后順序執(zhí)行。 有些 RDBMS 是按照觸發(fā)器名稱的字母排序順 序來執(zhí)行觸發(fā)器的。
7. 什么是 “權(quán)限 ”?用戶訪問數(shù)據(jù)庫有哪些權(quán)限?對(duì)數(shù)據(jù)模式進(jìn)行修改有哪些
12、權(quán)限?
解:
用戶(或應(yīng)用程序)使用 DB 的方式稱為權(quán)限。
用戶訪問數(shù)據(jù)庫有四種權(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í)、 秘
13、密級(jí)、 公用級(jí),
每個(gè)用戶也具有相應(yīng)的級(jí)別,稱為許可證級(jí)別,密級(jí)和許可證級(jí)別都是有序的,如絕密 >機(jī) 密〉秘密〉公用,采用規(guī)則是:一是用戶只能查看比它級(jí)別低或是同級(jí)的數(shù)據(jù),二是用戶只 能修改和它同級(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é)號(hào)的查詢權(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)建一個(gè)角色, 角色簡(jiǎn)化了授權(quán)操作。使用角色進(jìn)
行授權(quán)必須先創(chuàng)建角色,將數(shù)據(jù)庫對(duì)象上的存取權(quán)限授予角色, 才能將角色授予用戶,使得
用戶擁有角色所具有的所有存取權(quán)限。 對(duì)一個(gè)角色授予、拒絕或廢除的權(quán)限也適用于該角色
的任何成員。
涉及角色的SQL語句有:角色的創(chuàng)
15、建
CREATE ROLE < 角色名 >
給角色授權(quán)
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是秘書,擁有角色 Manager的權(quán)限。
⑦收回①?④的授權(quán)。
⑧不允許角色Manager修改雇員的職務(wù)屬性值。
解:
①允許WangHong對(duì)兩個(gè)關(guān)系進(jì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)系中除員工號(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是秘書,擁有角色 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;