【正文】
。所謂數(shù)據(jù)庫的安全性是指保護(hù)數(shù)據(jù)庫,防止因用戶非法使用數(shù)據(jù)庫造成數(shù)據(jù)泄露、更改或破壞。數(shù)據(jù)的完整性和安全性是一個(gè)問題的兩個(gè)方面,都是為了保護(hù)數(shù)據(jù)庫中的數(shù)據(jù)。前者旨在保護(hù)數(shù)據(jù)庫中的數(shù)據(jù),防止合法用戶對(duì)數(shù)據(jù)庫進(jìn)行修改時(shí)破壞數(shù)據(jù)的一致性;而后者旨在保護(hù)數(shù)據(jù)庫,防止未經(jīng)授權(quán)的訪問和惡意破壞和修改。 為了維護(hù)數(shù)據(jù)庫的完整性,完整性控制應(yīng)當(dāng)作為DBMS核心機(jī)制,必須提供:(1) 說明和定義完整性約束條件的方法:DBMS的DDL允許用戶根據(jù)實(shí)際問題的語義說明和定義各種完整性約束條件。(2) 完整性檢查機(jī)制:DBMS在數(shù)據(jù)更新可能破壞完整性時(shí)自動(dòng)進(jìn)行完整性檢查。檢查可以在更新操作執(zhí)行時(shí)立即執(zhí)行,也可以在事務(wù)提交時(shí)進(jìn)行。(3) 違約處理:當(dāng)數(shù)據(jù)更新違反完整性約束時(shí),DBMS應(yīng)當(dāng)采取相應(yīng)的措施,確保數(shù)據(jù)的完整性。 當(dāng)違反參照完整性時(shí),除了簡單的拒絕之外,還可以:(1) 級(jí)聯(lián):進(jìn)行更新,并且對(duì)更新導(dǎo)致違反參照完整性的參照關(guān)系元組進(jìn)行相應(yīng)更新。通常,這種情況發(fā)生在被參照關(guān)系的主碼改變時(shí)。例如,部門調(diào)整時(shí)將部分或所有部門重新編號(hào),可以級(jí)聯(lián)地更新其他包含部門號(hào)的關(guān)系元組。(2) 置空值:進(jìn)行更新,并且對(duì)更新導(dǎo)致違反參照完整性的參照關(guān)系元組的外碼置空值。這種處理方法僅當(dāng)外碼允許取空值時(shí)才能使用。通常,這發(fā)生在被參照關(guān)系的元組被刪除,并且允許參照關(guān)系的元組不參照時(shí)。例如,通常允許某個(gè)職工不在任何具體部門,這種職工的部門號(hào)(外碼)可以取空值。當(dāng)一個(gè)部門被撤銷時(shí),可以刪除該部門在Departments中的對(duì)應(yīng)元組,并且同時(shí)將原來在該部門的職工的EMPS元組置空值。(3) 置缺省值:進(jìn)行更新,并且對(duì)更新導(dǎo)致違反參照完整性的參照關(guān)系元組的外碼置缺省值;其中缺省值必須是被參照關(guān)系某元組主碼上的值。通常,這發(fā)生在被參照關(guān)系的元組被刪除,并且參照關(guān)系的元組在外碼上有合理缺省值時(shí)。例如,許多單位都有人才交流中心這樣的部門,對(duì)職工進(jìn)行再培訓(xùn)和重新安排。當(dāng)一個(gè)部門被撤銷時(shí),該部門原有職工可以到人才交流中心。這時(shí),可以將這些職工的部門號(hào)設(shè)置成缺省值——人才交流中心的部門號(hào)。 CREATE TABLE Suppliers(Sno CHAR (8) PRIMARY KEY,Sname CHAR (8) NOT NULL,Status INT,Scity CHAR(10))。CREATE TABLE Parts(Pno CHAR (8) PRIMARY KEY,Pname CHAR(16) NOT NULL,Color CHAR(4),Weight NUMERIC(7, 2))。CREATE TABLE Projects(Jno CHAR (8) PRIMARY KEY,Jname CHAR(20) NOT NULL,Jcity CHAR(10))。假定只能刪除不向任何工程提供任何零件的供應(yīng)商,只能刪除沒有任何供應(yīng)商提供的零件,但是允許工程下馬不依賴于是否有供應(yīng)商提供零件。CREATE TABLE SPJ(Sno CHAR (8),Pno CHAR(8),Jno CHAR(8),Quantity INT,PRIMARY KEY (Sno,Pno,Jno),FOREIGN KEY Sno REFERENCES Suppliers(Sno) ON UPDATE CASCADE)。FOREIGN KEY Pno REFERENCES Parts(Pno) ON UPDATE CASCADE)。FOREIGN KEY Jno REFERENCES Projects(Jno) ON UPDATE CASCADE ON DELETE CASCADE)。 如果被刪除的Employee元組不是經(jīng)理,則沒有任何Employee參照它。此時(shí),僅僅刪除該元組。然而,如果被刪除的Employee元組是經(jīng)理,則導(dǎo)致該經(jīng)理的直接和間接下屬的Employee元組被級(jí)聯(lián)地刪除。即初始的刪除將觸發(fā)該經(jīng)理的直接下屬的Employee元組被刪除。如果這些被刪除的元組有經(jīng)理的話,將觸發(fā)第二層下屬的Employee元組被刪除。如此下去,直到初始被刪除的經(jīng)理的所有的直接和間接下屬的Employee元組都被刪除。 斷言如下:CREATE ASSERTION sumConstraint CHECK (SELECT sum(amount) FROM loanWHERE =”大學(xué)路支行”)= (SELECT sum(amount) FROM accountWHERE =”大學(xué)路支行”))更一般地,下面的斷言保證每個(gè)支行的貸款總額不超過該支行的資產(chǎn):CREATE ASSERTION sumconstraint CHECK (NOT EXISTS (SELECT * FROM BranchWHERE (SELECT sum(amount) FROM loanWHERE =) = (SELECT sum(amount) FROM accountWHERE =)))(Sno,Cname)是IEGrades的碼(1) CREATE TRIGGER InsertionTriggerONSC AFTER INSERT ON SC REFERENCING NEW ROW AS nrow FOR EACH ROWWHEN IN(SELECT SnoFROM StudentsWHERE Dno=‘IE’)BEGIN ATOMIC INSERT INTO IEGradesSELECT , Sname, Cname, GradeFROM Students S, SC, Courses CWHERE = AND = AND = AND = 。END(2) CREATE TRIGGER UpdateTriggerONSC AFTER UPDATE OF Grade ON SC REFERENCING NEW ROW AS nrow FOR EACH ROWWHEN IN(SELECT SnoFROM StudentsWHERE Dno=‘IE’) BEGIN ATOMIC UPDATE IEGradesSET Grade=WHERE = AND Cname=(SELECT CnameFROM SC, Courses CWHERE = AND = AND = 。END(3) CREATE TRIGGER DeleteTriggerONSC AFTER DELETE ON SC REFERENCING OLD ROW AS orow FOR EACH ROWWHEN IN(SELECT SnoFROM StudentsWHERE Dno=‘IE’)BEGIN ATOMIC DELETE FROM IEGradesWHERE = AND Cname=(SELECT CnameFROM SC, Courses CWHERE = AND = AND = END 保證銀行數(shù)據(jù)的安全性的措施包括:(1) 機(jī)房的安全性:防止入侵者強(qiáng)行闖入或非法潛入(物理層次)。(2) 數(shù)據(jù)的遠(yuǎn)程備份:防止火災(zāi)等災(zāi)害性事件破壞數(shù)據(jù)(物理層次)。(3) 安全的網(wǎng)絡(luò)系統(tǒng):專用網(wǎng)絡(luò)和安全的網(wǎng)絡(luò)軟件(網(wǎng)絡(luò)層次)。(4) 安全的操作系統(tǒng)(操作系統(tǒng)層面)和安全的數(shù)據(jù)庫管理系統(tǒng)。(5) 嚴(yán)格授權(quán)管理:銀行要制定嚴(yán)格的權(quán)限規(guī)定和授權(quán)審批制度(行政制度層面),DBA只能對(duì)允許的權(quán)限實(shí)施授權(quán)(數(shù)據(jù)庫系統(tǒng)層面)。(6) 審計(jì)跟蹤:對(duì)數(shù)據(jù)庫數(shù)據(jù)的所有修改都必須記錄到審計(jì)日志中(數(shù)據(jù)庫系統(tǒng)層面),并且只有經(jīng)過行政授權(quán)的高級(jí)管理人員才能查閱審計(jì)記錄(行政制度層面)。 SQL中涉及自主存取控制的語句包括:(1) 創(chuàng)建用戶:在創(chuàng)建用戶的同時(shí)對(duì)創(chuàng)建數(shù)據(jù)庫模式和創(chuàng)建表授權(quán)CREATE USER 用戶名 WITH DBA | RESOURSE。(2) 授權(quán)與授權(quán)回收: 是自主存取控制的主要手段. 包括以下語句授權(quán)語句GRANT 權(quán)限,…, 權(quán)限 ON 對(duì)象類型 對(duì)象名 TO 用戶,…, 用戶 [WITH GRANT OPTION]。授權(quán)回收語句REVOKE 權(quán)限,…, 權(quán)限 ON 對(duì)象類型 對(duì)象名,…, 對(duì)象類型 對(duì)象名 FROM 用戶, …,用戶 [CASCADE | RESTRICT]。(3) 關(guān)于角色的語句。這些語句祥見下題。,使用角色定義存取權(quán)限,并對(duì)用戶授權(quán)是方便的,可以簡化授權(quán),并有利于授權(quán)管理。關(guān)于角色的語句:聯(lián)合使用實(shí)現(xiàn)靈活的授權(quán)。這些語句是(1) 創(chuàng)建角色:CREATE ROLE 角色名。(2) 給角色授權(quán):GRANT 權(quán)限,…,權(quán)限 ON 對(duì)象類型 對(duì)象名 TO 角色,…,角色。(3) 將角色授予其他角色或用戶:GRANT 角色,…,角色 TO 角色|用戶, …,角色|用戶 [WITH ADMIN OPTION]。(4) 回收角色權(quán)限:REVOKE 權(quán)限,…,權(quán)限 ON 對(duì)象類型對(duì)象名 FROM 角色,…,角色。 在MAC機(jī)制中,主體是系統(tǒng)中的活動(dòng)實(shí)體。主體可以是DBMS管理的實(shí)際用戶、代表用戶的各進(jìn)程??腕w是系統(tǒng)中的被動(dòng)實(shí)體,是受主體操縱的,如文件、基本表、索引、視圖等。對(duì)于主體和客體,DBMS為它們的每個(gè)實(shí)例(值)指派一個(gè)敏感度標(biāo)記(Label)。敏感度標(biāo)記分成若干級(jí)別,如絕密(Top Secret)、機(jī)密(Secret)、秘密(Confidential)、公開(Public)。主體的敏感度標(biāo)記稱為許可證級(jí)別(Clearance Level)??腕w的敏感度標(biāo)記稱為密級(jí)(Classification Level) (1) GRANT ALL PRIVILIGES ON Employee, Department TO WanglanWITH GRANT OPTION。(2) GRANT SELECT ON Department TO PUBLIC。(3) 我們需要在Employee上創(chuàng)建一個(gè)視圖EMPS:CREATE VIEW EMPS AS SELECT Ename, Title, DnoFROM Employee。然后,將EMPS上的查詢權(quán)限授予所有用戶:GRANT SELECT ON EMPS TO PUBLIC。(4) GRANT UPDATE (Salary) ON TABLE Employee TO LiYong。(5) 我們需要定義一個(gè)視圖,包含每個(gè)部門的最低、最高和平均工資:CREATE VIEW DeptSalary AS SELECT Dname, MIN(Salary) MinSalary, MAX(Salary) MaxSalary, AVG(Salary) averageSalaryFROM Employee E, Department DWHERE =GROUP BY Dname然后,將DeptSalary上的查詢權(quán)限授予ShangHua:GRANT SELECT ON DeptSalary TO ShangHua;(6) 首先創(chuàng)建一個(gè)角色Secretary:CREATE ROLE Secretary;然后,對(duì)角色Secretary授權(quán):GRANT ALL PRIVILIGES ON Department TO Secretary。GRANT SELECT, DELETE ON Employee TO Secretary。GRANT UPDATE(Eno, Ename, Birthday, Title, Dno) ON TABLE Employee TO Secretary。(7) GRANT Secretary TO Lihua。 (1) REVOKE ALL PRIVILIGES ON Employee, Department FROM Wanglan CASCADE。 REVOKE SELECT ON Department FROM PUBLIC。REVOKE SELECT ON EMPVIEW FROM PUBLIC。REVOKE UPDATE (Salary) ON TABLE Employee FROM LiYong。(2) REVOKE UPDATE(Title) ON TABLE Employee FROM Secretary。第6章 關(guān)系數(shù)據(jù)庫的設(shè)計(jì)理論習(xí)題參考答案 函數(shù)依賴Driverid 174。 Name,Driverid 174。 Address,Driverid 174。 Phoneno Carno 174。 Model,Carno 174。 Year Reportno 174。 Date,Reportno 174。 Location,Reportno 174。 Damage 函數(shù)依賴Cno 174。 Balance,Cno 174。 CreditLimitOno 174。 Date,Ono 174。 AddressOno,Ino 174。 QTYIno 174。 Description(假設(shè)同一種貨物可以由不同制造商制造,但具有相同描述)Ino,Plant 174。 QTYOH(1) S→D表示股票紅利由股票唯一確定 I→B表示每個(gè)投資人至多有一個(gè)經(jīng)紀(jì)人 IS→Q表示投資人和股票唯一確定他/她對(duì)該股票的擁有量B→O表示每個(gè)經(jīng)紀(jì)人都有唯一的辦