數(shù)據(jù)庫(kù)的安全性與完整性_第1頁(yè)
數(shù)據(jù)庫(kù)的安全性與完整性_第2頁(yè)
數(shù)據(jù)庫(kù)的安全性與完整性_第3頁(yè)
數(shù)據(jù)庫(kù)的安全性與完整性_第4頁(yè)
數(shù)據(jù)庫(kù)的安全性與完整性_第5頁(yè)
已閱讀5頁(yè),還剩51頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 7.1 基本概念基本概念 n 數(shù)據(jù)庫(kù)的安全性數(shù)據(jù)庫(kù)的安全性: 是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法的使用所造成的是指保護(hù)數(shù)據(jù)庫(kù)以防止不合法的使用所造成的 數(shù)據(jù)泄露、更改或破壞。數(shù)據(jù)泄露、更改或破壞。 n 數(shù)據(jù)庫(kù)安全性是一個(gè)涵蓋許多問(wèn)題的廣闊領(lǐng)域。數(shù)據(jù)庫(kù)安全性是一個(gè)涵蓋許多問(wèn)題的廣闊領(lǐng)域。 n 安全性的類型:安全性的類型: n某些信息的訪問(wèn)關(guān)系到法律和倫理的問(wèn)題。有些信息可能會(huì)認(rèn)為是屬于某些信息的訪問(wèn)關(guān)系到法律和倫理的問(wèn)題。有些信息可能會(huì)認(rèn)為是屬于 個(gè)人信息,未授權(quán)人員不能對(duì)其進(jìn)行訪問(wèn)。個(gè)人信息,未授權(quán)人員不能對(duì)其進(jìn)行訪問(wèn)。 n有關(guān)政府、機(jī)構(gòu)或公司層次上的政策問(wèn)題,這些政策確定哪些信息不應(yīng)有關(guān)政府、機(jī)

2、構(gòu)或公司層次上的政策問(wèn)題,這些政策確定哪些信息不應(yīng) 該向公眾公開(kāi)。該向公眾公開(kāi)。 n與系統(tǒng)有關(guān)的問(wèn)題。系統(tǒng)級(jí)上應(yīng)加強(qiáng)哪幾類安全功能(如:物理硬件級(jí)、與系統(tǒng)有關(guān)的問(wèn)題。系統(tǒng)級(jí)上應(yīng)加強(qiáng)哪幾類安全功能(如:物理硬件級(jí)、 OS級(jí)、級(jí)、DBMS級(jí))級(jí)) n一些組織需要把安全性問(wèn)題劃分為多個(gè)安全級(jí)別(如:絕密、機(jī)密、秘一些組織需要把安全性問(wèn)題劃分為多個(gè)安全級(jí)別(如:絕密、機(jī)密、秘 密、公開(kāi))。密、公開(kāi))。 n 數(shù)據(jù)庫(kù)的完整性數(shù)據(jù)庫(kù)的完整性: 是指數(shù)據(jù)的正確性、有效性和相容性。是指數(shù)據(jù)的正確性、有效性和相容性。 2 n 在一個(gè)多用戶數(shù)據(jù)庫(kù)系統(tǒng)中,在一個(gè)多用戶數(shù)據(jù)庫(kù)系統(tǒng)中,DBMS必須提供相應(yīng)的必須提供相應(yīng)的

3、 技術(shù)以保證特定的用戶或用戶組,只能訪問(wèn)數(shù)據(jù)庫(kù)的指技術(shù)以保證特定的用戶或用戶組,只能訪問(wèn)數(shù)據(jù)庫(kù)的指 定部分,而不能訪問(wèn)數(shù)據(jù)庫(kù)的其他部分。定部分,而不能訪問(wèn)數(shù)據(jù)庫(kù)的其他部分。 n 典型的典型的DBMS包含一個(gè)數(shù)據(jù)庫(kù)安全和授權(quán)子系統(tǒng),由包含一個(gè)數(shù)據(jù)庫(kù)安全和授權(quán)子系統(tǒng),由 它來(lái)負(fù)責(zé)實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)的安全性功能以避免發(fā)生未授它來(lái)負(fù)責(zé)實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫(kù)的安全性功能以避免發(fā)生未授 權(quán)的訪問(wèn)。權(quán)的訪問(wèn)。 n DBMS的安全子系統(tǒng)主要包括兩部分:的安全子系統(tǒng)主要包括兩部分: 定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中。定義用戶權(quán)限,并將用戶權(quán)限登記到數(shù)據(jù)字典中。 合法權(quán)限檢查,若用戶的操作請(qǐng)求超出了定義的權(quán)限,系合

4、法權(quán)限檢查,若用戶的操作請(qǐng)求超出了定義的權(quán)限,系 統(tǒng)將拒絕執(zhí)行此操作。統(tǒng)將拒絕執(zhí)行此操作。 3 n安全措施應(yīng)該一級(jí)一級(jí)層層設(shè)置。安全措施應(yīng)該一級(jí)一級(jí)層層設(shè)置。 n計(jì)算機(jī)系統(tǒng)的安全模型:計(jì)算機(jī)系統(tǒng)的安全模型: 用戶標(biāo)識(shí)用戶標(biāo)識(shí) 和鑒別和鑒別 DB 數(shù)據(jù)密數(shù)據(jù)密 碼存儲(chǔ)碼存儲(chǔ) OS 安全保護(hù)安全保護(hù) DBMS 存取控制存取控制 4 n數(shù)據(jù)庫(kù)安全控制方法數(shù)據(jù)庫(kù)安全控制方法 一、用戶標(biāo)識(shí)與鑒別一、用戶標(biāo)識(shí)與鑒別 1. 利用用戶自身具備的各種自然特征標(biāo)識(shí)自己和提供鑒別的依據(jù)。利用用戶自身具備的各種自然特征標(biāo)識(shí)自己和提供鑒別的依據(jù)。 2. 利用用戶持有的證件。利用用戶持有的證件。 3. 利用口令。利用口令

5、。 口令保密可采用的一些方法:口令保密可采用的一些方法: (1)擴(kuò)大口令集和口令長(zhǎng)度。)擴(kuò)大口令集和口令長(zhǎng)度。 (2)規(guī)定口令的生效時(shí)間,定期或不定期地更換口令。)規(guī)定口令的生效時(shí)間,定期或不定期地更換口令。 (3)設(shè)置多層口令系統(tǒng)。)設(shè)置多層口令系統(tǒng)。 (4)設(shè)置動(dòng)態(tài)口令。)設(shè)置動(dòng)態(tài)口令。 5 二二 、存取控制、存取控制 1. 存取控制方法存取控制方法 (1) 自主存取控制自主存取控制(DAC-Discretionary Access Control ) 這種方法是基于授予和收回權(quán)限的機(jī)制。它已經(jīng)發(fā)展成為關(guān)系這種方法是基于授予和收回權(quán)限的機(jī)制。它已經(jīng)發(fā)展成為關(guān)系 數(shù)據(jù)庫(kù)系統(tǒng)的主要安全機(jī)制。這

6、種機(jī)制是一種數(shù)據(jù)庫(kù)系統(tǒng)的主要安全機(jī)制。這種機(jī)制是一種“all-or-nothing” 方法,即一個(gè)用戶要么擁有該特權(quán),要么沒(méi)有該特權(quán)。但是在很多方法,即一個(gè)用戶要么擁有該特權(quán),要么沒(méi)有該特權(quán)。但是在很多 應(yīng)用中,還需要另外一種安全性策略,這種策略需要在安全性級(jí)別應(yīng)用中,還需要另外一種安全性策略,這種策略需要在安全性級(jí)別 的基礎(chǔ)上對(duì)數(shù)據(jù)或用戶進(jìn)行分類。的基礎(chǔ)上對(duì)數(shù)據(jù)或用戶進(jìn)行分類。 6 (2)強(qiáng)制存取控制)強(qiáng)制存取控制(MAC-Mandatory Access Control) 在強(qiáng)制存取控制在強(qiáng)制存取控制(MAC)方法中,每一個(gè)數(shù)據(jù)對(duì)象被標(biāo)以一定方法中,每一個(gè)數(shù)據(jù)對(duì)象被標(biāo)以一定 的密級(jí),每一個(gè)

7、用戶也被授予某一個(gè)級(jí)別的許可證。的密級(jí),每一個(gè)用戶也被授予某一個(gè)級(jí)別的許可證。 n 對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶才可以存取。強(qiáng)對(duì)于任意一個(gè)對(duì)象,只有具有合法許可證的用戶才可以存取。強(qiáng) 制存取控制因此相對(duì)比較嚴(yán)格。制存取控制因此相對(duì)比較嚴(yán)格。 n MAC適用于對(duì)數(shù)據(jù)有嚴(yán)格而固定密級(jí)分類的部門(mén)。適用于對(duì)數(shù)據(jù)有嚴(yán)格而固定密級(jí)分類的部門(mén)。 n 主體主體是指數(shù)據(jù)庫(kù)中數(shù)據(jù)訪問(wèn)者(用戶、是指數(shù)據(jù)庫(kù)中數(shù)據(jù)訪問(wèn)者(用戶、DBA)、進(jìn)程、線程等,)、進(jìn)程、線程等, 是系統(tǒng)中的是系統(tǒng)中的活動(dòng)實(shí)體活動(dòng)實(shí)體。 n 客體客體是指數(shù)據(jù)庫(kù)中數(shù)據(jù)及其載體(表、視圖、索引、存儲(chǔ)過(guò)程是指數(shù)據(jù)庫(kù)中數(shù)據(jù)及其載體(表、視圖

8、、索引、存儲(chǔ)過(guò)程 等),是系統(tǒng)中的等),是系統(tǒng)中的被動(dòng)實(shí)體被動(dòng)實(shí)體。 7 n 對(duì)于主體和客體,對(duì)于主體和客體,DBMS為它們每個(gè)實(shí)例為它們每個(gè)實(shí)例(值值)指派一指派一 個(gè)敏感度個(gè)敏感度 標(biāo)記標(biāo)記(Label)。 n 敏感度標(biāo)記被分成若干級(jí)別,例如絕密、機(jī)密、秘密、公開(kāi)等。敏感度標(biāo)記被分成若干級(jí)別,例如絕密、機(jī)密、秘密、公開(kāi)等。 n 主體的敏感度標(biāo)記稱為主體的敏感度標(biāo)記稱為許可證級(jí)別許可證級(jí)別。 n 客體的敏感度標(biāo)記稱為客體的敏感度標(biāo)記稱為密級(jí)密級(jí)。 客體子集客體子集 主體子集主體子集 訪訪 問(wèn)問(wèn) 8 n MAC機(jī)制就是通過(guò)對(duì)比主體的機(jī)制就是通過(guò)對(duì)比主體的Label和客體的和客體的Label,最

9、終確定,最終確定 主體是否能夠存取客體。主體是否能夠存取客體。 n當(dāng)某一主體以標(biāo)記當(dāng)某一主體以標(biāo)記label注冊(cè)入系統(tǒng)時(shí),系統(tǒng)要求他對(duì)任何客體的注冊(cè)入系統(tǒng)時(shí),系統(tǒng)要求他對(duì)任何客體的 存取必須遵循如下規(guī)則:存取必須遵循如下規(guī)則: 僅當(dāng)主體的許可證級(jí)別僅當(dāng)主體的許可證級(jí)別大于或等于大于或等于客體的密級(jí)時(shí),該主體才能客體的密級(jí)時(shí),該主體才能 讀取相應(yīng)的客體;讀取相應(yīng)的客體; 僅當(dāng)主體的許可證級(jí)別僅當(dāng)主體的許可證級(jí)別等于等于客體的密級(jí)時(shí),該主體才能寫(xiě)相應(yīng)客體的密級(jí)時(shí),該主體才能寫(xiě)相應(yīng) 的客體。的客體。 n 這兩種規(guī)則的共同點(diǎn)在于它們均禁止了擁有高許可證級(jí)別的主體這兩種規(guī)則的共同點(diǎn)在于它們均禁止了擁有高

10、許可證級(jí)別的主體 更新低密級(jí)的數(shù)據(jù)對(duì)象,從而防止了敏感數(shù)據(jù)的泄漏。更新低密級(jí)的數(shù)據(jù)對(duì)象,從而防止了敏感數(shù)據(jù)的泄漏。 9 n 自主訪問(wèn)控制自主訪問(wèn)控制 n優(yōu)點(diǎn):優(yōu)點(diǎn):有高度的靈活性,這使得它適用于多個(gè)應(yīng)用領(lǐng)域。有高度的靈活性,這使得它適用于多個(gè)應(yīng)用領(lǐng)域。 n缺點(diǎn):缺點(diǎn):防范惡意攻擊的脆弱性。因?yàn)橐坏┍皇跈?quán)用戶訪問(wèn)以防范惡意攻擊的脆弱性。因?yàn)橐坏┍皇跈?quán)用戶訪問(wèn)以 后,自主授權(quán)模型就不能對(duì)如何傳播和如何使用信息進(jìn)行任后,自主授權(quán)模型就不能對(duì)如何傳播和如何使用信息進(jìn)行任 何的控制了。何的控制了。 n 強(qiáng)制訪問(wèn)控制強(qiáng)制訪問(wèn)控制 n優(yōu)點(diǎn):優(yōu)點(diǎn):可以保證更高程度的保護(hù),防止了信息的非法流動(dòng)。可以保證更高程度

11、的保護(hù),防止了信息的非法流動(dòng)。 適用于需要高度保護(hù)的政府、軍事等應(yīng)用。適用于需要高度保護(hù)的政府、軍事等應(yīng)用。 n缺點(diǎn):缺點(diǎn):過(guò)于嚴(yán)格,要求將主體和客體嚴(yán)格地劃分到安全級(jí)別過(guò)于嚴(yán)格,要求將主體和客體嚴(yán)格地劃分到安全級(jí)別 中,因此僅適用于少數(shù)環(huán)境。中,因此僅適用于少數(shù)環(huán)境。 10 2.2.自主存取控制的實(shí)現(xiàn)自主存取控制的實(shí)現(xiàn) (1) (1) 用戶分類和權(quán)限用戶分類和權(quán)限 用戶用戶: : 系統(tǒng)用戶系統(tǒng)用戶(DBA)(DBA)、數(shù)據(jù)對(duì)象屬主、數(shù)據(jù)對(duì)象屬主(owner)(owner)、一般、一般 用戶、公共用戶用戶、公共用戶(public)(public)。 權(quán)限:權(quán)限:包括數(shù)據(jù)訪問(wèn)權(quán)限(讀、插入、修改

12、、刪除等)包括數(shù)據(jù)訪問(wèn)權(quán)限(讀、插入、修改、刪除等) 和數(shù)據(jù)庫(kù)模式修改權(quán)限(索引、資源、修改、撤消等)和數(shù)據(jù)庫(kù)模式修改權(quán)限(索引、資源、修改、撤消等) 兩類。兩類。 11 (2) (2) 授權(quán)授權(quán) GRANT語(yǔ)句向用戶授予操作權(quán)限。語(yǔ)句向用戶授予操作權(quán)限。 一般格式為:一般格式為: GRANT ,|ALL ON TO ,.|PUBLIC WITH GRANT OPTION 語(yǔ)義為:語(yǔ)義為:將對(duì)指定操作對(duì)象的指定操作權(quán)限授予指定的用戶。將對(duì)指定操作對(duì)象的指定操作權(quán)限授予指定的用戶。 ALL: 所有權(quán)限所有權(quán)限 PUBLIC: 公共用戶公共用戶 對(duì)不同類型的操作對(duì)象有不同的操作權(quán)限。對(duì)不同類型的操

13、作對(duì)象有不同的操作權(quán)限。 可將此權(quán)限轉(zhuǎn)授可將此權(quán)限轉(zhuǎn)授 12 例例:把查詢表:把查詢表SC和修改和修改 其學(xué)號(hào)的權(quán)限授給用戶其學(xué)號(hào)的權(quán)限授給用戶 U2和和U4。 GRANT SELECT , UPDATE(Sno) ON TABLE SC TO U2,U4; 例例:把對(duì)表:把對(duì)表SC的的INSERT權(quán)限權(quán)限 授給用戶授給用戶U5,并允許將此權(quán)限并允許將此權(quán)限 再授予其他用戶。再授予其他用戶。 GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION; U5還可以將此權(quán)限授予還可以將此權(quán)限授予U6: GRANT INSERT ON TABLE SC TO

14、U6; PUBLIC; 全體。全體。 U6能不能再能不能再 傳播此權(quán)限傳播此權(quán)限? 13 例例: DBA把在數(shù)據(jù)庫(kù)把在數(shù)據(jù)庫(kù) DB1中建立表的權(quán)限授予用戶中建立表的權(quán)限授予用戶U1。 GRANT CREATETAB ON DATABASE DB1 TO U1; U1隱含權(quán)限?隱含權(quán)限? (3) (3) 收回權(quán)限收回權(quán)限 格式:格式:REVOKE ,|ALL ON FROM,.|PUBLIC CASCADE|RESTRICT; CASCADE: 級(jí)聯(lián)級(jí)聯(lián)(但系統(tǒng)只收回但系統(tǒng)只收回直接或間接直接或間接從某處獲得的權(quán)限從某處獲得的權(quán)限) 例:例:P.214 圖圖7-4 14 (4) (4) 數(shù)據(jù)庫(kù)角

15、色的授權(quán)數(shù)據(jù)庫(kù)角色的授權(quán) 角色角色: : 是權(quán)限的集合。是權(quán)限的集合。 數(shù)據(jù)庫(kù)角色:數(shù)據(jù)庫(kù)角色:是一組對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作的權(quán)限的集合。是一組對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作的權(quán)限的集合。 將某一組用戶設(shè)置為某一角色,他將擁有該角色中的每一個(gè)權(quán)將某一組用戶設(shè)置為某一角色,他將擁有該角色中的每一個(gè)權(quán) 限。這樣只要對(duì)角色進(jìn)行權(quán)限設(shè)置便可以實(shí)現(xiàn)對(duì)所有用戶權(quán)限限。這樣只要對(duì)角色進(jìn)行權(quán)限設(shè)置便可以實(shí)現(xiàn)對(duì)所有用戶權(quán)限 的設(shè)置,大大減少了管理員的工作量,的設(shè)置,大大減少了管理員的工作量,簡(jiǎn)化了授權(quán)的過(guò)程簡(jiǎn)化了授權(quán)的過(guò)程。 用戶與角色之間存在多對(duì)多的聯(lián)系。用戶與角色之間存在多對(duì)多的聯(lián)系。 創(chuàng)建角色必須具有創(chuàng)建角色必須具有

16、create rolecreate role系統(tǒng)權(quán)限。系統(tǒng)權(quán)限。 15 創(chuàng)建角色:創(chuàng)建角色: CREATE ROLE CREATE ROLE 將權(quán)限授予角色:將權(quán)限授予角色: GRANT GRANT , ON ON TO TO , . 將角色授予用戶:將角色授予用戶: GRANT GRANT , TO TO , . WITH ADMIN OPTION WITH ADMIN OPTION 可將此權(quán)限轉(zhuǎn)授可將此權(quán)限轉(zhuǎn)授 n 回收角色的權(quán)限:回收角色的權(quán)限: REVOKEREVOKE, ON ON FROM FROM, . 16 例例7-77-7 CREATE ROLE C1;CREATE ROLE

17、 C1; GRANT SELECT,INSERTGRANT SELECT,INSERT ON TABLE StudentON TABLE Student TO C1 TO C1; GRANT C1GRANT C1 TO U1,U2,U3 TO U1,U2,U3; GRANT UPDATE,DELETEGRANT UPDATE,DELETE ON TABLE Student ON TABLE Student TO C1 TO C1; REVOKE C1REVOKE C1 FROM U3;FROM U3; REVOKE INSERTREVOKE INSERT ON TABLE StudentON

18、TABLE Student FROM C1FROM C1; 17 三、視圖機(jī)制三、視圖機(jī)制 n 通過(guò)視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取的用戶隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)通過(guò)視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取的用戶隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù) 提供一定程度的安全保護(hù)。提供一定程度的安全保護(hù)。 四、數(shù)據(jù)加密四、數(shù)據(jù)加密 是在不安全的環(huán)境中維護(hù)數(shù)據(jù)安全性的一種方法。加密技術(shù)首先使用某個(gè)預(yù)是在不安全的環(huán)境中維護(hù)數(shù)據(jù)安全性的一種方法。加密技術(shù)首先使用某個(gè)預(yù) 定的加密密鑰對(duì)數(shù)據(jù)應(yīng)用加密算法,然后結(jié)果數(shù)據(jù)必須要使用解密密鑰進(jìn)行解密,定的加密密鑰對(duì)數(shù)據(jù)應(yīng)用加密算法,然后結(jié)果數(shù)據(jù)必須要使用解密密鑰進(jìn)行解密, 以恢復(fù)原來(lái)

19、的數(shù)據(jù)。以恢復(fù)原來(lái)的數(shù)據(jù)。 五、審計(jì)五、審計(jì) 審計(jì)審計(jì)是對(duì)選定的用戶動(dòng)作的監(jiān)控和記錄,以監(jiān)測(cè)可能的不合法行為。是對(duì)選定的用戶動(dòng)作的監(jiān)控和記錄,以監(jiān)測(cè)可能的不合法行為。 審計(jì)常用于:審計(jì)常用于: (1)審查可疑的活動(dòng)。)審查可疑的活動(dòng)。 (2)監(jiān)視和收集關(guān)于數(shù)據(jù)庫(kù)活動(dòng)的數(shù)據(jù)。)監(jiān)視和收集關(guān)于數(shù)據(jù)庫(kù)活動(dòng)的數(shù)據(jù)。 18 六六. 統(tǒng)計(jì)數(shù)據(jù)庫(kù)的安全性統(tǒng)計(jì)數(shù)據(jù)庫(kù)的安全性 n 統(tǒng)計(jì)數(shù)據(jù)庫(kù):統(tǒng)計(jì)數(shù)據(jù)庫(kù):用于提供基于各種標(biāo)準(zhǔn)的統(tǒng)計(jì)信息和值匯總數(shù)據(jù)。用于提供基于各種標(biāo)準(zhǔn)的統(tǒng)計(jì)信息和值匯總數(shù)據(jù)。 只允許用戶查詢聚集類型信息,不允許查詢單個(gè)記錄信息的數(shù)據(jù)庫(kù)。只允許用戶查詢聚集類型信息,不允許查詢單個(gè)記錄信息的數(shù)據(jù)庫(kù)。

20、 n 統(tǒng)計(jì)數(shù)據(jù)庫(kù)用戶統(tǒng)計(jì)數(shù)據(jù)庫(kù)用戶:政府統(tǒng)計(jì)部門(mén)或市場(chǎng)研究公司等。他們被允許:政府統(tǒng)計(jì)部門(mén)或市場(chǎng)研究公司等。他們被允許 訪問(wèn)統(tǒng)計(jì)數(shù)據(jù)庫(kù),以檢索與人口有關(guān)的統(tǒng)計(jì)信息,但同時(shí)還需要禁訪問(wèn)統(tǒng)計(jì)數(shù)據(jù)庫(kù),以檢索與人口有關(guān)的統(tǒng)計(jì)信息,但同時(shí)還需要禁 止他們?cè)L問(wèn)有關(guān)特定個(gè)人的詳細(xì)機(jī)密性信息。止他們?cè)L問(wèn)有關(guān)特定個(gè)人的詳細(xì)機(jī)密性信息。 n 統(tǒng)計(jì)數(shù)據(jù)庫(kù)的安全性必須確保有關(guān)個(gè)人的信息不能被訪問(wèn)。統(tǒng)計(jì)數(shù)據(jù)庫(kù)的安全性必須確保有關(guān)個(gè)人的信息不能被訪問(wèn)。 19 n 在統(tǒng)計(jì)在統(tǒng)計(jì)DB中存在著特殊的安全問(wèn)題:即可能有隱蔽的信息通道,中存在著特殊的安全問(wèn)題:即可能有隱蔽的信息通道, 使合法的查詢導(dǎo)出不合法的信息。使合法的查詢導(dǎo)出

21、不合法的信息。 n 例例1: 查詢一:本單位查詢一:本單位20歲以下的教師有多少?歲以下的教師有多少? 查詢二:本單位查詢二:本單位20歲以下的教師工資總額是多少?歲以下的教師工資總額是多少? 若一的結(jié)果為若一的結(jié)果為1,則二為該職工的工資。,則二為該職工的工資。 解決:解決:限定查詢的記錄量(查詢至少涉及限定查詢的記錄量(查詢至少涉及N個(gè)以上的記錄)個(gè)以上的記錄) n 例例2: 查詢一:用戶查詢一:用戶A與其他與其他N個(gè)職工的工資總額是多少?個(gè)職工的工資總額是多少? 查詢二:用戶查詢二:用戶B與其他與其他N個(gè)職工的工資總額是多少?個(gè)職工的工資總額是多少? 假設(shè)二的查詢結(jié)果為假設(shè)二的查詢結(jié)果為

22、Y,一的查詢結(jié)果為,一的查詢結(jié)果為X,A的工資為的工資為Z, 則則B的工資的工資=Y-(X-Z) 解決:解決:限定查詢的次數(shù)(規(guī)定任意兩個(gè)查詢相交的數(shù)據(jù)項(xiàng)不能超過(guò)限定查詢的次數(shù)(規(guī)定任意兩個(gè)查詢相交的數(shù)據(jù)項(xiàng)不能超過(guò) M個(gè))個(gè)) 20 一、數(shù)據(jù)庫(kù)的完整性一、數(shù)據(jù)庫(kù)的完整性 n 數(shù)據(jù)庫(kù)的完整性數(shù)據(jù)庫(kù)的完整性:是指數(shù)據(jù)的正確性、有效性和相容性。是指數(shù)據(jù)的正確性、有效性和相容性。 說(shuō)明:說(shuō)明:完整性完整性是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò)是為了防止數(shù)據(jù)庫(kù)中存在不符合語(yǔ)義的數(shù)據(jù),防止錯(cuò) 誤信息的輸入和輸出。誤信息的輸入和輸出。 n 數(shù)據(jù)庫(kù)完整性約束條件:數(shù)據(jù)庫(kù)完整性約束條件:加在數(shù)據(jù)庫(kù)數(shù)據(jù)之

23、上的語(yǔ)義約束條件。加在數(shù)據(jù)庫(kù)數(shù)據(jù)之上的語(yǔ)義約束條件。 n 完整性檢查:完整性檢查:DBMS中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制。中檢查數(shù)據(jù)是否滿足完整性條件的機(jī)制。 n DBMS的完整性控制機(jī)制應(yīng)具有三個(gè)方面的功能:的完整性控制機(jī)制應(yīng)具有三個(gè)方面的功能: (1)定義功能:提供定義完整性約束條件的機(jī)制。)定義功能:提供定義完整性約束條件的機(jī)制。 (2)檢查功能:檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束)檢查功能:檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束 條件。條件。 (3)防范功能:如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約)防范功能:如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約 束條件,采取一

24、定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。束條件,采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。 21 n 完整性控制的規(guī)則:完整性控制的規(guī)則: 一條完整性規(guī)則可以用一個(gè)五元組一條完整性規(guī)則可以用一個(gè)五元組 (D,O,A,C,P)來(lái)表示:來(lái)表示: (1)D(Data) 約束作用的數(shù)據(jù)對(duì)象。約束作用的數(shù)據(jù)對(duì)象。 (2)O(Operation) 觸發(fā)完整性檢查的數(shù)據(jù)庫(kù)操作,即當(dāng)用戶發(fā)觸發(fā)完整性檢查的數(shù)據(jù)庫(kù)操作,即當(dāng)用戶發(fā) 出什么操作請(qǐng)求時(shí)需要檢查該完整性規(guī)則,是立即檢查還是延遲檢出什么操作請(qǐng)求時(shí)需要檢查該完整性規(guī)則,是立即檢查還是延遲檢 查。查。 (3)A(Assertion) 數(shù)據(jù)對(duì)象必須滿足的斷言或語(yǔ)義約束,這是數(shù)據(jù)對(duì)

25、象必須滿足的斷言或語(yǔ)義約束,這是 規(guī)則的主體。規(guī)則的主體。 (4)C(Condition) 選擇選擇A作用的數(shù)據(jù)對(duì)象值的謂詞。作用的數(shù)據(jù)對(duì)象值的謂詞。 (5)P(Procedure) 違反完整性規(guī)則時(shí)觸發(fā)的過(guò)程。違反完整性規(guī)則時(shí)觸發(fā)的過(guò)程。 22 n如如: 在在“講師工資不得低于講師工資不得低于1000元元”的約束中:的約束中: D 約束作用的對(duì)象為工資約束作用的對(duì)象為工資Sal屬性屬性 O 插入或修改插入或修改職工元組時(shí)職工元組時(shí) A Sal不能小于不能小于1000 C 職稱職稱=講師講師 (A僅作用于職稱僅作用于職稱=講師講師的記錄的記錄) P 拒絕拒絕執(zhí)行該操作執(zhí)行該操作 23 n 完整

26、性的語(yǔ)義約束和檢查:完整性的語(yǔ)義約束和檢查: (1 1)立即執(zhí)行約束:檢查是否違背完整性約束的時(shí)機(jī)通)立即執(zhí)行約束:檢查是否違背完整性約束的時(shí)機(jī)通 常是在一條語(yǔ)句執(zhí)行完后立即檢查。常是在一條語(yǔ)句執(zhí)行完后立即檢查。 (2 2)延遲執(zhí)行約束:完整性檢查延遲到整個(gè)事務(wù)執(zhí)行結(jié))延遲執(zhí)行約束:完整性檢查延遲到整個(gè)事務(wù)執(zhí)行結(jié) 束后再進(jìn)行,檢查正確方可提交。束后再進(jìn)行,檢查正確方可提交。 (3 3)在事務(wù)的某些特定檢查點(diǎn)檢查。)在事務(wù)的某些特定檢查點(diǎn)檢查。 (4 4)在一個(gè)維護(hù)操作請(qǐng)求之后且執(zhí)行之前檢查。)在一個(gè)維護(hù)操作請(qǐng)求之后且執(zhí)行之前檢查。 (5 5)在)在DBADBA或?qū)徲?jì)員發(fā)出檢查請(qǐng)求時(shí)?;?qū)徲?jì)員發(fā)

27、出檢查請(qǐng)求時(shí)。 24 二、完整性約束條件二、完整性約束條件 n 作用的對(duì)象:作用的對(duì)象: n關(guān)系、元組、列關(guān)系、元組、列 n 靜態(tài)約束:靜態(tài)約束:是指數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿足的約是指數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿足的約 束條件,它是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束。束條件,它是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束。 n 動(dòng)態(tài)約束:動(dòng)態(tài)約束:是指數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊是指數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊 值之間所應(yīng)滿足的約束條件,它是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束。值之間所應(yīng)滿足的約束條件,它是反映數(shù)據(jù)庫(kù)狀態(tài)變遷的約束。 25 1、靜態(tài)列級(jí)約束、靜態(tài)列級(jí)約束 是對(duì)一個(gè)

28、列的取值域的說(shuō)明:是對(duì)一個(gè)列的取值域的說(shuō)明: 對(duì)對(duì)數(shù)據(jù)類型、格式數(shù)據(jù)類型、格式的約束的約束;對(duì);對(duì)取值范圍或取取值范圍或取 值集合值集合的約束;對(duì)的約束;對(duì)空值空值的約束等。的約束等。 2、靜態(tài)元組約束、靜態(tài)元組約束 是規(guī)定元組的各個(gè)列之間的約束關(guān)系。是規(guī)定元組的各個(gè)列之間的約束關(guān)系。 例例: 講師工資不低于講師工資不低于1000元元. 3、靜態(tài)關(guān)系約束、靜態(tài)關(guān)系約束 在一個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。在一個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。 n 常見(jiàn)的靜態(tài)關(guān)系約束有:常見(jiàn)的靜態(tài)關(guān)系約束有: 實(shí)體完整性約束、參照完整性約束、函數(shù)依賴約束、統(tǒng)

29、計(jì)約束實(shí)體完整性約束、參照完整性約束、函數(shù)依賴約束、統(tǒng)計(jì)約束( (字段值與關(guān)字段值與關(guān) 系中多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系。系中多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系。如如: :經(jīng)理的工資不得高于本部門(mén)職工經(jīng)理的工資不得高于本部門(mén)職工 平均工資的平均工資的5 5倍,不得低于本部門(mén)職工平均工資的倍,不得低于本部門(mén)職工平均工資的2 2倍倍) )。 26 4、動(dòng)態(tài)列級(jí)約束、動(dòng)態(tài)列級(jí)約束 是修改列定義或列值時(shí)應(yīng)滿足的約束條件,包括下面兩方面:是修改列定義或列值時(shí)應(yīng)滿足的約束條件,包括下面兩方面: (1)(1)修改列定義時(shí)的約束修改列定義時(shí)的約束 (2)(2)修改列值時(shí)的約束(修改列值時(shí)的約束(如:如:職工工資

30、調(diào)整不得低于其原來(lái)的工資)職工工資調(diào)整不得低于其原來(lái)的工資) 5、動(dòng)態(tài)元組約束、動(dòng)態(tài)元組約束 是指修改元組的值時(shí)元組中各個(gè)字段間需要滿足某種約束條件。是指修改元組的值時(shí)元組中各個(gè)字段間需要滿足某種約束條件。 如:如:新工資不得低于原工資新工資不得低于原工資+工齡工齡*1.5 6、動(dòng)態(tài)關(guān)系約束、動(dòng)態(tài)關(guān)系約束 是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務(wù)一致性、原子性等約束是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務(wù)一致性、原子性等約束 條件。條件。 27 三、三、SQLSQL中的完整性約束中的完整性約束 n 約束分類約束分類 n列級(jí)約束:只能應(yīng)用在一列上。列級(jí)約束:只能應(yīng)用在一列上。 n表級(jí)約束

31、:可以應(yīng)用在一個(gè)表中的多列上。表級(jí)約束:可以應(yīng)用在一個(gè)表中的多列上。 當(dāng)約束用于表級(jí)時(shí),應(yīng)按下列形式設(shè)置:當(dāng)約束用于表級(jí)時(shí),應(yīng)按下列形式設(shè)置: CONSTRAINT CONSTRAINT 各種約束形式各種約束形式 例:例:CREATE TABLE book (CREATE TABLE book ( bid int bid int NOT NULLNOT NULL, , -列級(jí)約束列級(jí)約束 bname char(8) bname char(8) NOT NULLNOT NULL, , -列級(jí)約束列級(jí)約束 authorid char(10)authorid char(10) ) ) 28 1 1、

32、基本表的約束、基本表的約束 (1 1)主碼約束)主碼約束 主碼能夠惟一地確定表中的每一條記錄,主碼不能主碼能夠惟一地確定表中的每一條記錄,主碼不能 取空值。主碼約束可以保證實(shí)體的完整性。取空值。主碼約束可以保證實(shí)體的完整性。 n 格式:格式:PRIMARY KEY (PRIMARY KEY () 例:例:CREATE TABLE book (CREATE TABLE book ( bid int bid int PRIMARY KEYPRIMARY KEY, , bname char(8) bname char(8) NOT NULLNOT NULL, , authorid char(10)

33、authorid char(10) ) ) 29 例例:CREATE TABLE sc (CREATE TABLE sc ( sno char(8), sno char(8), cno char(4) , cno char(4) , grade int, grade int, CONSTRAINT pk_sc primary key(sno,cno)CONSTRAINT pk_sc primary key(sno,cno) ) ) 30 (2 2)外碼約束)外碼約束 外碼約束主要用來(lái)維護(hù)兩個(gè)表之間數(shù)據(jù)的一致性,實(shí)外碼約束主要用來(lái)維護(hù)兩個(gè)表之間數(shù)據(jù)的一致性,實(shí) 現(xiàn)表之間的參照完整性?,F(xiàn)表之間的參

34、照完整性。 格式:格式: FOREIGN KEY (FOREIGN KEY () REFERENCES REFERENCES () ON DELETE ON DELETE ON UPDATE ON UPDATE :NO ACTION:NO ACTION、CASCADECASCADE、RESTRICTRESTRICT、SET NULLSET NULL、 SET DEFAULTSET DEFAULT 31 例例:CREATE TABLE authors (CREATE TABLE authors ( authorid int PRIMARY KEY, authorid int PRIMARY KE

35、Y, authorname char(20), authorname char(20), address char(30) address char(30) ) ) CREATE TABLE book ( CREATE TABLE book ( bid int PRIMARY KEY, bid int PRIMARY KEY, bname char(8) NOT NULL, bname char(8) NOT NULL, authorid int, authorid int, CONSTRAINT fk_book CONSTRAINT fk_book FOREIGN KEY(authorid)

36、FOREIGN KEY(authorid) REFERENCES authors(authorid) REFERENCES authors(authorid) ) ) 32 n 假定被參照關(guān)系稱為父表,參照關(guān)系稱為子表。假定被參照關(guān)系稱為父表,參照關(guān)系稱為子表。 n 當(dāng)刪除當(dāng)刪除(DELETE)(DELETE)或修改或修改(UPDATE)(UPDATE)父表中的某行時(shí),對(duì)子表采取父表中的某行時(shí),對(duì)子表采取 的動(dòng)作可有下列的選擇:的動(dòng)作可有下列的選擇: CASCADE (CASCADE (級(jí)聯(lián)級(jí)聯(lián)):): 刪除或修改父表中的行并自動(dòng)刪除或修改在刪除或修改父表中的行并自動(dòng)刪除或修改在 子表中匹配的

37、行。子表中匹配的行。 RESTRICT (RESTRICT (受限受限) ):只有當(dāng)子表外碼中沒(méi)有與父表要?jiǎng)h除或修只有當(dāng)子表外碼中沒(méi)有與父表要?jiǎng)h除或修 改的主碼相同時(shí),才能刪除父表中的行,否則拒絕執(zhí)行此操作。改的主碼相同時(shí),才能刪除父表中的行,否則拒絕執(zhí)行此操作。 SET NULL (SET NULL (置空值置空值) ):刪除或修改父表中的行并將子表中的外刪除或修改父表中的行并將子表中的外 碼設(shè)置為碼設(shè)置為NULLNULL。只有當(dāng)外碼沒(méi)有被設(shè)置成。只有當(dāng)外碼沒(méi)有被設(shè)置成NOT NULLNOT NULL時(shí)才有效。時(shí)才有效。 SET DEFAULT (SET DEFAULT (置默認(rèn)值置默認(rèn)值)

38、 ):刪除或修改父表中的行并將子表中刪除或修改父表中的行并將子表中 的外碼設(shè)置為指定的默認(rèn)值。只有外碼指定了默認(rèn)值時(shí)才有效。的外碼設(shè)置為指定的默認(rèn)值。只有外碼指定了默認(rèn)值時(shí)才有效。 NOT ACTIONNOT ACTION:拒絕對(duì)父表進(jìn)行刪除或修改。拒絕對(duì)父表進(jìn)行刪除或修改。 33 (3) (3) 惟一約束惟一約束 惟一約束用于指定一個(gè)或多個(gè)列的組合值具有惟一性,以防止惟一約束用于指定一個(gè)或多個(gè)列的組合值具有惟一性,以防止 在列中輸入重復(fù)的值。在列中輸入重復(fù)的值。 應(yīng)用場(chǎng)合應(yīng)用場(chǎng)合:每個(gè)表中只能有一個(gè)主碼,因此當(dāng)表中已經(jīng)有一個(gè)主碼:每個(gè)表中只能有一個(gè)主碼,因此當(dāng)表中已經(jīng)有一個(gè)主碼 時(shí),如果還要

39、保證其他的標(biāo)識(shí)符惟一時(shí),就可以使用惟一性約束。時(shí),如果還要保證其他的標(biāo)識(shí)符惟一時(shí),就可以使用惟一性約束。 例例:CREATE TABLE student (CREATE TABLE student ( sno int PRIMARY KEY, sno int PRIMARY KEY, sname char(8) NOT NULL, sname char(8) NOT NULL, sex char (2), sex char (2), cardno char(18) cardno char(18) UNIQUEUNIQUE ) ) 34 (4 4)檢查約束)檢查約束 n 檢查約束對(duì)輸入列或者整個(gè)

40、表中的值設(shè)置檢查條件,以限制輸入檢查約束對(duì)輸入列或者整個(gè)表中的值設(shè)置檢查條件,以限制輸入 值。值。 格式:格式:CHECK (CHECK () 例例:CREATE TABLE student (CREATE TABLE student ( sno int PRIMARY KEY, sno int PRIMARY KEY, sname char(8) NOT NULL, sname char(8) NOT NULL, sex char(2) sex char(2), cardno char(18) UNIQUE,cardno char(18) UNIQUE, CONSTRAINT chk_sex

41、 check (sex in (CONSTRAINT chk_sex check (sex in (男男,女女) ) ) 35 (5) (5) 默認(rèn)約束默認(rèn)約束 默認(rèn)約束指在插入操作中沒(méi)有提供輸入值時(shí),系統(tǒng)自動(dòng)指定值。默認(rèn)約束指在插入操作中沒(méi)有提供輸入值時(shí),系統(tǒng)自動(dòng)指定值。 例例:CREATE TABLE student (CREATE TABLE student ( sno int PRIMARY KEY, sno int PRIMARY KEY, sname char(8) sname char(8) NOT NULLNOT NULL, , sex char(2) sex char(2)

42、DEFAULT DEFAULT 男男 cardno char(18) UNIQUE,cardno char(18) UNIQUE, CONSTRAINT chk_sex check (sex in (CONSTRAINT chk_sex check (sex in (男男,女女) ) ) 36 2 2、域約束、域約束 CREATE DOMAIN CREATE DOMAIN CHECK ( CHECK () 例例7.137.13 CREATE DOMAIN Grade CHAR(1) DEFAULT ? CREATE DOMAIN Grade CHAR(1) DEFAULT ? CONSTRAI

43、NT Valid_grade CONSTRAINT Valid_grade CHECK (VALUE IN CHECK (VALUE IN (A,B,C,D,E,?);(A,B,C,D,E,?); 37 3 3、斷言、斷言 n CHECKCHECK子句只對(duì)子句只對(duì)定義它的表起作用定義它的表起作用,對(duì)其它表不起作用。,對(duì)其它表不起作用。 例例7.11 7.11 對(duì)關(guān)系對(duì)關(guān)系SCSC的定義加入子句:的定義加入子句: CHECK (sno IN (SELECT sno CHECK (sno IN (SELECT sno FROM StudentFROM Student) CHECK (cno IN

44、(SELECT cno CHECK (cno IN (SELECT cno FROM CourseFROM Course) 當(dāng)對(duì)表當(dāng)對(duì)表StudentStudent中刪除一個(gè)元組時(shí),這個(gè)操作與關(guān)系中刪除一個(gè)元組時(shí),這個(gè)操作與關(guān)系SCSC的的CHECKCHECK無(wú)無(wú) 關(guān)。關(guān)。 n CHECKCHECK子句中的條件盡量不要涉及其他關(guān)系。子句中的條件盡量不要涉及其他關(guān)系。 38 n 當(dāng)約束條件涉及多個(gè)表、使用聚集操作時(shí)應(yīng)使用斷言。當(dāng)約束條件涉及多個(gè)表、使用聚集操作時(shí)應(yīng)使用斷言。 格式:格式:CREATE ASSERTION CREATE ASSERTION CHECK ( CHECK () 例例 7

45、.15 7.15 每門(mén)課程只允許每門(mén)課程只允許100100個(gè)學(xué)生選修。個(gè)學(xué)生選修。 CREATE ASSERTION Asser1CREATE ASSERTION Asser1 CHECK (ALL(SELECT COUNT(sno) CHECK (ALL(SELECT COUNT(sno) FROM SC FROM SC GROUP BY cno)=100); GROUP BY cno)=100); 例例 7.16 7.16 不允許計(jì)算機(jī)學(xué)院的學(xué)生選修不允許計(jì)算機(jī)學(xué)院的學(xué)生選修019019號(hào)課程。號(hào)課程。 CREATE ASSERTION Asser2CREATE ASSERTION Ass

46、er2 CHECK NOT EXISTS CHECK NOT EXISTS (SELECT (SELECT * * FROM Student,SC FROM Student,SC WHERE Student.sno=SC.sno AND Student.dept= WHERE Student.sno=SC.sno AND Student.dept=計(jì)計(jì) 算機(jī)學(xué)院算機(jī)學(xué)院 AND SC.cno=019);AND SC.cno=019); 39 n 觸發(fā)器:觸發(fā)器:是靠事件驅(qū)動(dòng)的特殊過(guò)程。是靠事件驅(qū)動(dòng)的特殊過(guò)程。 n 觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別:觸發(fā)器與存儲(chǔ)過(guò)程的區(qū)別: 存儲(chǔ)過(guò)程通過(guò)其他程序的調(diào)用來(lái)運(yùn)

47、行,或直接啟動(dòng)運(yùn)行,可傳存儲(chǔ)過(guò)程通過(guò)其他程序的調(diào)用來(lái)運(yùn)行,或直接啟動(dòng)運(yùn)行,可傳 遞參數(shù);而觸發(fā)器的啟動(dòng)運(yùn)行必須由一個(gè)發(fā)生的事件來(lái)激發(fā),它遞參數(shù);而觸發(fā)器的啟動(dòng)運(yùn)行必須由一個(gè)發(fā)生的事件來(lái)激發(fā),它 是自動(dòng)隱式運(yùn)行的,觸發(fā)器不能接收參數(shù),也不能被調(diào)用。是自動(dòng)隱式運(yùn)行的,觸發(fā)器不能接收參數(shù),也不能被調(diào)用。 n 觸發(fā)器的類型:觸發(fā)器的類型: n DMLDML觸發(fā)器:觸發(fā)器:它是在執(zhí)行它是在執(zhí)行insertinsert、updateupdate或或deletedelete語(yǔ)句時(shí)被語(yǔ)句時(shí)被 激發(fā)執(zhí)行的,它只能定義在表上。激發(fā)執(zhí)行的,它只能定義在表上。 n 替代觸發(fā)器:替代觸發(fā)器:是被激發(fā)用以代替執(zhí)行是被激發(fā)

48、用以代替執(zhí)行DMLDML語(yǔ)句,它可以定義語(yǔ)句,它可以定義 在表或視圖上。在表或視圖上。 n 系統(tǒng)觸發(fā)器:系統(tǒng)觸發(fā)器:它是在執(zhí)行它是在執(zhí)行createcreate、alteralter或或dropdrop語(yǔ)句;執(zhí)行語(yǔ)句;執(zhí)行 數(shù)據(jù)庫(kù)的啟動(dòng)或關(guān)閉、用戶的登錄或退出語(yǔ)句時(shí)數(shù)據(jù)庫(kù)的啟動(dòng)或關(guān)閉、用戶的登錄或退出語(yǔ)句時(shí)被激發(fā)執(zhí)行的。被激發(fā)執(zhí)行的。 n 40 n 觸發(fā)器的主要用途:觸發(fā)器的主要用途: n 審計(jì):審計(jì):可記錄登錄數(shù)據(jù)庫(kù)的用戶。將更新數(shù)據(jù)的用戶和時(shí)間可記錄登錄數(shù)據(jù)庫(kù)的用戶。將更新數(shù)據(jù)的用戶和時(shí)間 日期等信息記錄在審計(jì)表中。日期等信息記錄在審計(jì)表中。 n 實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則:實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則:如

49、將被刪除的用戶保存在用戶歷史信如將被刪除的用戶保存在用戶歷史信 息中;更新股票表只能在上市交易時(shí)間內(nèi)。息中;更新股票表只能在上市交易時(shí)間內(nèi)。 n 可進(jìn)行系統(tǒng)事件的處理:可進(jìn)行系統(tǒng)事件的處理:在表中內(nèi)容發(fā)生變更時(shí),自動(dòng)通知在表中內(nèi)容發(fā)生變更時(shí),自動(dòng)通知 其他程序采取相應(yīng)的處理。其他程序采取相應(yīng)的處理。 n 增強(qiáng)表的完整性約束:增強(qiáng)表的完整性約束:如更新職工的工資時(shí)更新后的工資不如更新職工的工資時(shí)更新后的工資不 能低于更新前的工資。能低于更新前的工資。 41 n 觸發(fā)器的組成:觸發(fā)器的組成: n 觸發(fā)事件觸發(fā)事件 n 觸發(fā)條件觸發(fā)條件 n 觸發(fā)器動(dòng)作觸發(fā)器動(dòng)作 n 觸發(fā)器的一般模型:觸發(fā)器的一般模

50、型: CREATE TRIGGER BEFORE|AFTER|INSTEAD OF ON REFERENCING OLD AS NEW AS OLD TABLE AS NEW TABLE AS FOR EACH ROW|STATEMENT WHEN 42 n : INSERT|DELETE|UPDATEOF n FOR EACH ROW|STATEMENT: 指定觸發(fā)器的粒度。指定觸發(fā)器的粒度。 n FOR EACH ROW: 為為行級(jí)行級(jí)觸發(fā)器,當(dāng)該觸發(fā)器監(jiān)視的表中的觸發(fā)器,當(dāng)該觸發(fā)器監(jiān)視的表中的 元組發(fā)生改變時(shí),就激活觸發(fā)器,每變更一行就觸發(fā)一次。元組發(fā)生改變時(shí),就激活觸發(fā)器,每變更一行就

51、觸發(fā)一次。 n FOR EACH STATEMENT(默認(rèn)默認(rèn)): 為為語(yǔ)句級(jí)語(yǔ)句級(jí)觸發(fā)器。在被監(jiān)觸發(fā)器。在被監(jiān) 控表上執(zhí)行控表上執(zhí)行INSERT、DELETE或或UPDATE語(yǔ)句,就會(huì)激活觸語(yǔ)句,就會(huì)激活觸 發(fā)器,而不管該語(yǔ)句的執(zhí)行會(huì)改變多少元組(即使沒(méi)有改變發(fā)發(fā)器,而不管該語(yǔ)句的執(zhí)行會(huì)改變多少元組(即使沒(méi)有改變發(fā) 生也會(huì)激活觸發(fā)器)。該觸發(fā)器就在語(yǔ)句執(zhí)行之前或之后只激生也會(huì)激活觸發(fā)器)。該觸發(fā)器就在語(yǔ)句執(zhí)行之前或之后只激 發(fā)一次。發(fā)一次。 n REFERENCING: 指向更新前或更新后的內(nèi)容。指向更新前或更新后的內(nèi)容。 n BEFORE|AFTER|INSTEAD OF: 指定觸發(fā)器執(zhí)行

52、的時(shí)機(jī)。指定觸發(fā)器執(zhí)行的時(shí)機(jī)。 43 n 在行級(jí)觸發(fā)器中,在行級(jí)觸發(fā)器中,REFERENCING的格式:的格式: REFERENCING OLD AS NEW AS 觸發(fā)事件觸發(fā)事件 舊行別名舊行別名 新行別名新行別名 insert 無(wú)無(wú) 指定指定 update 指定指定 指定指定 delete 指定指定 無(wú)無(wú) 44 n BEFORE 觸發(fā)器觸發(fā)器 (前觸發(fā)器前觸發(fā)器) 在觸發(fā)事件之前執(zhí)行。不允許它們修改數(shù)據(jù)庫(kù),但可以檢測(cè)在觸發(fā)事件之前執(zhí)行。不允許它們修改數(shù)據(jù)庫(kù),但可以檢測(cè) WHEN子句中定義的前提條件,接受或終止觸發(fā)事件。子句中定義的前提條件,接受或終止觸發(fā)事件。BEFORE 觸發(fā)器的一個(gè)典

53、型用途是觸發(fā)器的一個(gè)典型用途是保持應(yīng)用指定的數(shù)據(jù)完整性保持應(yīng)用指定的數(shù)據(jù)完整性。 n 例:例:有關(guān)系有關(guān)系 Transcript(sno,cno,semester,grade) CrsLimits(cno,semester,limit) 創(chuàng)建一個(gè)觸發(fā)器,它監(jiān)控插入到創(chuàng)建一個(gè)觸發(fā)器,它監(jiān)控插入到Transcript中的元組,以限制中的元組,以限制 課程注冊(cè)的人數(shù)。課程注冊(cè)的人數(shù)。 CREATE TRIGGER CountCheck BEFORE INSERT ON Transcript REFERENCING NEW AS N FOR EACH ROW WHEN (SELECT COUNT(T.

54、sno) FROM Transcript T WHERE T.cno=N.cno AND T.semester=N.semester) =(SELECT limit FROM CrsLimits L WHERE L.cno=N.cno AND L.semester=N.semester) ROLLBACK 45 n AFTER 觸發(fā)器觸發(fā)器 (后觸發(fā)器后觸發(fā)器) 在觸發(fā)事件已經(jīng)改變數(shù)據(jù)庫(kù)之后執(zhí)行。允許它們可以改變數(shù)據(jù)在觸發(fā)事件已經(jīng)改變數(shù)據(jù)庫(kù)之后執(zhí)行。允許它們可以改變數(shù)據(jù) 庫(kù),因此它們可以激活其他觸發(fā)器。庫(kù),因此它們可以激活其他觸發(fā)器。AFTER觸發(fā)器作用于觸發(fā)器作用于應(yīng)用邏應(yīng)用邏 輯的擴(kuò)展輯的

55、擴(kuò)展。 n 例:例:有關(guān)系有關(guān)系 EMP(eno,ename,esex,salary,dno) 創(chuàng)建一個(gè)觸發(fā)器,它監(jiān)控雇員工資的漲幅不能超過(guò)創(chuàng)建一個(gè)觸發(fā)器,它監(jiān)控雇員工資的漲幅不能超過(guò)5%。 CREATE TRIGGER LimitSalaryRaise AFTER UPDATE OF salary ON EMP REFERENCING OLD AS O NEW AS N FOR EACH ROW WHEN (N.salary-O.salary0.05*O.salary) UPDATE EMP SET salary=1.05*O.salary WHERE eno=O.eno 46 例例7.18

56、7.18 規(guī)定修改規(guī)定修改SCSC表的表的gradegrade值時(shí),修改后的值不能低于修改前值時(shí),修改后的值不能低于修改前 的值。的值。 CREATE TRIGGER Trig_gradeCREATE TRIGGER Trig_grade AFTER UPDATE OF grade AFTER UPDATE OF grade ON SC ON SC REFERENCING OLD AS oldg NEW AS newg REFERENCING OLD AS oldg NEW AS newg FOR EACH ROW FOR EACH ROW WHEN (oldg.gradenewg.grade

57、) WHEN (oldg.gradenewg.grade) UPDATE SC UPDATE SC SET grade=oldg.grade SET grade=oldg.grade WHERE cno=o; WHERE cno=o; 觸發(fā)事件觸發(fā)事件 觸發(fā)條件觸發(fā)條件 觸發(fā)器動(dòng)作觸發(fā)器動(dòng)作 47 n 例:例:有關(guān)系有關(guān)系 EMP(eno,ename,esex,salary,dno) 創(chuàng)建一個(gè)觸發(fā)器,每次工資增長(zhǎng)之后將所有雇員新的平均工資創(chuàng)建一個(gè)觸發(fā)器,每次工資增長(zhǎng)之后將所有雇員新的平均工資 記錄到記錄到LOG表中。表中。 CREATE TRIGGER RecordNewAverage AFT

58、ER UPDATE OF salary ON EMP FOR EACH STATEMENT INSERT INTO LOG VALUES (CURRENT_DATE, (SELECT AVG(salary) FROM EMP) 48 n 例:例:有關(guān)系:有關(guān)系:Transcript(sno,cno,semester,grade) Teaching(tno,cno,semester) 有視圖:有視圖:IdleTeaching(cno,semester),該視圖僅包含那該視圖僅包含那 些些Teaching表中與表中與Transcript表中沒(méi)有相關(guān)元組的課程(既沒(méi)有表中沒(méi)有相關(guān)元組的課程(既沒(méi)有

59、學(xué)生選修的課程)。學(xué)生選修的課程)。 創(chuàng)建一個(gè)觸發(fā)器,當(dāng)學(xué)生放棄或修改選修的課程時(shí),從創(chuàng)建一個(gè)觸發(fā)器,當(dāng)學(xué)生放棄或修改選修的課程時(shí),從 Teaching表中刪除所有在表中刪除所有在IdleTeaching中發(fā)現(xiàn)的元組。中發(fā)現(xiàn)的元組。 CREATE TRIGGER MainTainCoursesNonEmpty AFTER DELETE,UPDATE OF cno,semester ON Transcript FOR EACH STATEMENT DELETE FROM Teaching WHERE EXISTS (SELECT * FROM IdleTeaching T WHERE semes

60、ter=T.semester AND cno=T.cno) 49 n INSTEAD OF 觸發(fā)器觸發(fā)器 (替換觸發(fā)器替換觸發(fā)器) INSTEAD OF觸發(fā)器最普遍的應(yīng)用是觸發(fā)器最普遍的應(yīng)用是對(duì)視圖的維護(hù)對(duì)視圖的維護(hù)。視圖上的更。視圖上的更 新事件可以通過(guò)觸發(fā)器監(jiān)控,但替換更新的是視圖的基礎(chǔ)表。新事件可以通過(guò)觸發(fā)器監(jiān)控,但替換更新的是視圖的基礎(chǔ)表。 n 例:例:有關(guān)系有關(guān)系 EMP(eno,ename,esex,salary,dno) DEPT(dno,dname) 有下面的視圖:有下面的視圖: CREATE VIEW WorksIn(eno,dname) AS SELECT (EMP.eno

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論