




已閱讀5頁,還剩107頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
An Introduction to Database System,數(shù)據(jù)庫原理及應(yīng)用,Principles and Applications of the Database,第6章 數(shù)據(jù)庫安全性和完整性 仲愷農(nóng)業(yè)工程學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,本章導(dǎo)讀 本章主要介紹數(shù)據(jù)庫的安全性和完整性,包括數(shù)據(jù)庫安全性的定義,數(shù)據(jù)庫安全性控制采取的一些措施,數(shù)據(jù)庫完整性的定義,完整性約束條件的類型,完整性控制機(jī)制,并用SQL語句給出了如何描述授權(quán)、角色、建立視圖、約束以及觸發(fā)器的方式等。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,重點(diǎn): 1安全性的基本概念 2完整性的基本概念 難點(diǎn): 1域完整性控制方法 2實(shí)體完整性控制方法 3. 參照完整性控制方法,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,本章要點(diǎn) 安全性和完整性的基本概念 數(shù)據(jù)庫系統(tǒng)的6種安全性技術(shù) 域完整性控制方法 實(shí)體完整性控制方法 參照完整性控制方法,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,6.1 概述 6.2 數(shù)據(jù)庫的安全性 6.3 數(shù)據(jù)庫的完整性 6.4 SQL的完整性控制 本章小結(jié),仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.1 概述,數(shù)據(jù)庫的數(shù)據(jù)保護(hù)主要包括數(shù)據(jù)庫的安全性和完整性保護(hù)機(jī)制。,安全性:就是要保證數(shù)據(jù)庫中數(shù)據(jù)的安全,防止未授權(quán)用戶隨意修改數(shù)據(jù)庫中的數(shù)據(jù),確保數(shù)據(jù)的安全。,完整性:是數(shù)據(jù)庫的一個(gè)重要特征,也是保證數(shù)據(jù)庫中的數(shù)據(jù)切實(shí)有效、防止錯(cuò)誤、實(shí)現(xiàn)商業(yè)規(guī)則的一種重要機(jī)制。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.1 概述,防范對象:,安全性的防范對象:非法用戶和非法操作。,完整性的防范對象:是不合法的語義數(shù)據(jù)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,6.1 概述 6.2 數(shù)據(jù)庫的安全性 6.3 數(shù)據(jù)庫的完整性 6.4 SQL的完整性控制 本章小結(jié),仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,安全性問題是計(jì)算機(jī)系統(tǒng)中普遍存在的一個(gè)問題,而在數(shù)據(jù)庫系統(tǒng)中顯得尤為突出。 原因:數(shù)據(jù)庫系統(tǒng)中大量數(shù)據(jù)集中存放,而且為許多最終用戶直接共享。數(shù)據(jù)庫系統(tǒng)建立在操作系統(tǒng)之上,而操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的核心,因此數(shù)據(jù)庫系統(tǒng)的安全性與計(jì)算機(jī)系統(tǒng)的安全性息息相關(guān)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,在一般計(jì)算機(jī)系統(tǒng)中,安全措施是一層一層設(shè)置的,下圖是常見的計(jì)算機(jī)系統(tǒng)安全模型。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,6.2.1 用戶標(biāo)識與鑒別 6.2.2 存取控制 6.2.3 視圖 6.2.4 數(shù)據(jù)加密 6.2.5 跟蹤審計(jì) 6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.1 用戶標(biāo)識與鑒別,用戶標(biāo)識與鑒別是系統(tǒng)提供的最外層安全保護(hù)措施。 當(dāng)用戶進(jìn)入數(shù)據(jù)庫系統(tǒng)時(shí),需要提供用戶的標(biāo)識,系統(tǒng)根據(jù)標(biāo)識鑒別此用戶是不是合法用戶: 對于合法的用戶,進(jìn)一步開放數(shù)據(jù)庫的訪問權(quán)限; 對于非法用戶,則拒絕該用戶對數(shù)據(jù)庫進(jìn)行存取操作。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.1 用戶標(biāo)識與鑒別,用戶標(biāo)識與鑒別的方法比較多,常用的有下幾種:,1輸入用戶名標(biāo)識合法身份,2回答用戶口令標(biāo)識身份,3通過回答隨機(jī)數(shù)的運(yùn)算結(jié)果標(biāo)識合法身份,4通過個(gè)人特征鑒別標(biāo)識合法身份,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,6.2.1 用戶標(biāo)識與鑒別 6.2.2 存取控制 6.2.3 視圖 6.2.4 數(shù)據(jù)加密 6.2.5 跟蹤審計(jì) 6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,數(shù)據(jù)庫安全性所關(guān)心的主要是DBMS的存取控制機(jī)制。存取控制是確保具有授權(quán)資格的用戶訪問數(shù)據(jù)庫的權(quán)限,同時(shí)使得所有未被授權(quán)的人員無法訪問數(shù)據(jù)庫的機(jī)制。,1存取控制機(jī)制的構(gòu)成部分,(1)定義用戶權(quán)限:用戶權(quán)限是指用戶對于數(shù)據(jù)對象能夠執(zhí)行的操作種類。進(jìn)行用戶權(quán)限定義,系統(tǒng)必須提供有關(guān)用戶定義權(quán)限的語言。,(2)系統(tǒng)進(jìn)行權(quán)限檢查:每當(dāng)用戶發(fā)出存取數(shù)據(jù)庫的操作請求后,DBMS首先查找數(shù)據(jù)字典,進(jìn)行合法權(quán)限檢查,如果用戶的操作請求沒有超出其數(shù)據(jù)操作權(quán)限,則準(zhǔn)予執(zhí)行其數(shù)據(jù)操作;否則,拒絕其執(zhí)行此操作。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,2存取機(jī)制的類別,(1)自主存取控制 :在自主存取控制方法中,用戶對于不同的對象有不同的存取權(quán)限;不同的用戶對同一對象的存取權(quán)限也不同;用戶也可以將自己擁有的權(quán)限傳授給其他用戶。,(2)強(qiáng)制存取控制 :在強(qiáng)制存取控制中,每一個(gè)數(shù)據(jù)對象被標(biāo)以一定的密級;每一個(gè)用戶也被授予某個(gè)級別的訪問許可證;對于任意一個(gè)對象,只有具有合法許可證的用戶才可以存取。與自主存取控制相比,強(qiáng)制存取控制比較嚴(yán)格。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,3. 自主訪問控制方法,(1)用戶分類與權(quán)限,對于一個(gè)數(shù)據(jù)庫,不同的用戶有不同的訪問要求和使用權(quán)限。 一般可以將數(shù)據(jù)庫的用戶分為四類:,數(shù)據(jù)庫管理員,數(shù)據(jù)庫對象的屬主,一般數(shù)據(jù)庫用戶,公共用戶,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,數(shù)據(jù)庫管理員 (Database Administrator,DBA) 擁有支配整個(gè)數(shù)據(jù)庫資源的特權(quán),對數(shù)據(jù)庫擁有最大的特權(quán),因而也對數(shù)據(jù)庫負(fù)有特別的責(zé)任。DBA特權(quán)命令包括給各個(gè)獨(dú)立的帳戶、用戶或者用戶組授予特權(quán)和回收特權(quán),以及把某個(gè)適當(dāng)?shù)陌踩诸惣墑e指派給某個(gè)用戶帳戶。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,數(shù)據(jù)庫對象的屬主 是數(shù)據(jù)庫的創(chuàng)建者,他除了一般數(shù)據(jù)庫用戶擁有的權(quán)力外,還可以授予或收回其他用戶對其所創(chuàng)建的數(shù)據(jù)庫的存取權(quán)。,一般數(shù)據(jù)庫用戶 就是通過授權(quán)可對數(shù)據(jù)庫進(jìn)行操作的用戶。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,公共用戶 是為了方便共享數(shù)據(jù)操作而設(shè)置的,它代表全體數(shù)據(jù)庫用戶,如果把某個(gè)數(shù)據(jù)對象的某項(xiàng)操作授權(quán)給公共用戶,則一個(gè)合法的數(shù)據(jù)庫用戶都能進(jìn)行該項(xiàng)數(shù)據(jù)操作。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,用戶使用數(shù)據(jù)庫的方式稱為權(quán)限。使用數(shù)據(jù)庫的權(quán)限分為二類:訪問數(shù)據(jù)特權(quán)和修改數(shù)據(jù)庫模式的特權(quán)。,訪問數(shù)據(jù)特權(quán)包括: 讀數(shù)據(jù)權(quán)限、插入數(shù)據(jù)權(quán)限、修改數(shù)據(jù)權(quán)限和刪除數(shù)據(jù)權(quán)限。 修改數(shù)據(jù)庫模式的特權(quán)包括: 創(chuàng)建和刪除索引的索引權(quán)限,創(chuàng)建新表的資源權(quán)限,允許修改表結(jié)構(gòu)的修改權(quán)限,允許撤銷關(guān)系表的撤銷權(quán)限等。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,(2)SQL的數(shù)據(jù)控制功能,SQL對自主存取控制提供了支持,其DCL主要是GRANT(授權(quán))語句和REVOKE(收權(quán))語句。, 授權(quán),由于不同的用戶對數(shù)據(jù)庫具有不同的存取權(quán),因此為了保證用戶只能訪問他有權(quán)存取的數(shù)據(jù),必須對每個(gè)用戶授予不同的數(shù)據(jù)庫存取權(quán)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授 權(quán),在SQL中,授權(quán)語句有兩種:授予權(quán)限語句和授予角色語句。,一個(gè)角色是一組被命名的零個(gè)或多個(gè)特權(quán)。授權(quán)一個(gè)角色給一個(gè)用戶,則允許該用戶使用被授權(quán)的角色所擁有的每一個(gè)特權(quán)。用戶與角色之間存在多對多的聯(lián)系;一個(gè)用戶允許被授予多個(gè)角色使用,同一個(gè)角色的使用被授權(quán)予多個(gè)用戶。一個(gè)角色的使用也可以被授權(quán)予另一個(gè)角色。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予權(quán)限語句,語句基本形式為: GRANT 權(quán)限ON 數(shù)據(jù)對象TO受權(quán)者WITH GRANT OPTION 數(shù)據(jù)對象:=基表視圖屬性 受權(quán)者:= PUBLIC授權(quán)ID 語義:將某作用在指定操作對象上的操作權(quán)限,限授予指定的用戶。(即數(shù)據(jù)庫對象的訪問權(quán)限的管理),如果指定WITH GRANT OPTION子句,則獲得某種權(quán)限的用戶可以把這種權(quán)限在授予其他用戶。如沒有指定該子句,獲得授權(quán)的用戶將不能傳播權(quán)限(轉(zhuǎn)授)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予權(quán)限語句,【例6-1】在數(shù)據(jù)庫XSBOOK中,將表STUDENT的SELECT操作權(quán)限授予所有的用戶。 注意:PUBLIC是一個(gè)特殊的保留字,代替該數(shù)據(jù)庫系統(tǒng)的全體用戶。對于大部分可以公開的數(shù)據(jù),可以一次性地授權(quán)給PUBLIC,而不必對每個(gè)用戶逐個(gè)授權(quán)。,GRANT SELECT ON TABLE STUDENT TO PUBLIC;,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予權(quán)限語句,【例6-2】在數(shù)據(jù)庫XSBOOK中,將表STUDENT的借書證號、姓名字段的UPDATE權(quán)限授予給liu。 【例6-3】將對表STUDENT的所有操作特權(quán)授予liu。,GRANT UPDATE(借書證號,姓名) ON STUDENT TO liu;,GRANT ALL PRIVILEGES ON TABLE STUDENT TO liu;,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予權(quán)限語句,【例6-4】將對表STUDENT中借書證號和專業(yè)名的INSERT特權(quán)授予liu,并允許他將此特權(quán)轉(zhuǎn)授給其他用戶。,GRANT INSERT(借書證號,專業(yè)名) ON STUDENT TO liu WITH GRANT OPTION;,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予角色語句,該語句基本形式為(oracle) GRANT 角色I(xiàn)D,角色I(xiàn)D TO受權(quán)者 WITH ADMIN OPTION,該語句將一個(gè)或多個(gè)角色的使用授予,若有WITH ADMIN OPTION,則受權(quán)者可將此角色轉(zhuǎn)授給其他。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予角色語句,在下列語句中,Accounting_role,Import_role都是己建立的角色。 【例6-5】將角色Accounting _role和Import _role授予所有的用戶。,GRANT Accounting _role,Import_role TO PUBLIC;,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,授予角色語句,【例6-6】將角色Accounting _role授予用戶zhang,并允許他將此角色轉(zhuǎn)授給其他人。,GRANT Accounting _role TO zhang WITH ADMIN OPTION;,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,將用戶test加入至角色manager Exec sp_addrolemember manager,test,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,用戶 Jean 擁有表 Plan_Data。Jean 將表 Plan_Data 的 SELECT 權(quán)限授予 Accounting 角色(指定 WITH GRANT OPTION 子句)。用戶 Jill 是 Accounting 的成員,他要將表 Plan_Data 上的 SELECT 權(quán)限授予用戶 Jack,Jack 不是 Accounting 的成員。 因?yàn)閷Ρ?Plan_Data 用 GRANT 語句授予其他用戶 SELECT 權(quán)限的權(quán)限是授予 Accounting 角色而不是顯式地授予 Jill,不能因?yàn)橐咽谟?Accounting 角色中成員該權(quán)限,而使 Jill 能夠授予表的權(quán)限。Jill 必須用 AS 子句來獲得 Accounting 角色的授予權(quán)限。 /* User Jean */ GRANT SELECT ON Plan_Data TO Accounting WITH GRANT OPTION /* User Jill */ GRANT SELECT ON Plan_Data TO Jack AS Accounting,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,當(dāng)用戶將某些權(quán)限授給其他用戶后,有時(shí)還需要把權(quán)限收回。收權(quán)需要使用REVOKE語句。 收回權(quán)限的REVOKE語句: 收回角色的REVOKE語句:, 收回權(quán)限,REVOKE 權(quán)限ON 數(shù)據(jù)對象 FROM 受權(quán)者,受權(quán)者,REVOKE 角色I(xiàn)DFROM 受權(quán)者,受權(quán)者,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,【例6-7】將liu對STUDENT表的INSERT權(quán)限收回。,REVOKE INSERT ON STUDENT FROM liu,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,(3)自主存取控制的不足之處,自主存取控制能夠通過授權(quán)機(jī)制有效地控制用戶對敏感數(shù)據(jù)的存取,但也存在著一定的缺陷,其主要問題是系統(tǒng)對權(quán)限的授予狀況無法進(jìn)行有效的控制,因而可能造成數(shù)據(jù)的無意泄漏。,但是,強(qiáng)制存取控制方法可以有效地解決這一問題。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,所謂MAC是指系統(tǒng)為保證更高程度的安全性,它不是用戶能直接感知或進(jìn)行控制的。MAC適用于那些對數(shù)據(jù)有嚴(yán)格而固定密級分類的部門,例如軍事部門或政府部門。,4強(qiáng)制存取控制方法(MAC),在MAC中,DBMS所管理的全部實(shí)體被分為主體和客體兩大類。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,主體系統(tǒng)中的活動(dòng)實(shí)體,既包括DBMS所管理的實(shí)際用戶,也包括代表用戶的各進(jìn)程。,客體系統(tǒng)中的被動(dòng)實(shí)體,是受主體操縱的,包括文件、基表、索引、視圖等等。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,當(dāng)某一用戶(或一主體)以標(biāo)記label注冊入系統(tǒng)時(shí),系統(tǒng)要求他對任何客體的存取必須遵循如下規(guī)則: (1)僅當(dāng)主體的許可證級別大于或等于客體的密級時(shí),該主體才能讀取相應(yīng)的客體; (2)僅當(dāng)主體的許可證級別等于客體的密級時(shí),該主體才能寫相應(yīng)的客體。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.2 存取控制,一般強(qiáng)制存取控制采用以下幾種方法實(shí)現(xiàn):,(1)限制訪問控制,(2)過程控制,(3)系統(tǒng)限制,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,6.2.1 用戶標(biāo)識與鑒別 6.2.2 存取控制 6.2.3 視圖 6.2.4 數(shù)據(jù)加密 6.2.5 跟蹤審計(jì) 6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.3 視圖,視圖技術(shù)是當(dāng)前數(shù)據(jù)庫技術(shù)中保持?jǐn)?shù)據(jù)庫安全性的重要手段之一。通過為不同的用戶定義不同的視圖,可以將要保密的數(shù)據(jù)對無權(quán)存取的用戶隱藏起來,從而自動(dòng)地給數(shù)據(jù)提供一定程度的安全保護(hù)。例如,給某用戶定義了一個(gè)只讀視圖,并且這個(gè)視圖的數(shù)據(jù)來源于關(guān)系R,則此用戶只能讀R中的有關(guān)信息,數(shù)據(jù)庫中一切其他信息對他都是隱藏的。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.3 視圖,【例6-8】允許一個(gè)用戶查詢學(xué)生表STUDENT的記錄,但是只允許他查詢計(jì)算機(jī)專業(yè)學(xué)生的情況。,CREATE VIEW STUDENT_SUBJECT AS SELECT 借書證號,姓名,專業(yè)名,性別,出生時(shí)間,借書數(shù) FROM STUDENT WHERE 專業(yè)名計(jì)算機(jī),使用這個(gè)視圖STUDENT_SUBJECT的用戶看到的只是基本表STUDENT的一個(gè)“水平子集”,或稱行子集。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,6.2.1 用戶標(biāo)識與鑒別 6.2.2 存取控制 6.2.3 視圖 6.2.4 數(shù)據(jù)加密 6.2.5 跟蹤審計(jì) 6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.4 數(shù)據(jù)加密,數(shù)據(jù)加密技術(shù)是防止數(shù)據(jù)庫中數(shù)據(jù)在存儲或者傳輸中失密的有效手段。 加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)(明文)變換成不可直接識別的格式(密文),從而使得不知道解密算法的人無法獲知數(shù)據(jù)的內(nèi)容。這樣可以保證只有掌握了密鑰的用戶才能訪問數(shù)據(jù),而且即使數(shù)據(jù)被非法地從數(shù)據(jù)庫中竊取,或者在數(shù)據(jù)傳輸過程中被截取,竊取者都無法知道密碼數(shù)據(jù)的含義。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.4 數(shù)據(jù)加密,數(shù)據(jù)加密的主要方法有兩種:,1替換方法 該方法使用密鑰(Encryption Key)將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的字符。 2置換方法 該方法僅將明文的字符按不同的順序重新排列。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,6.2.1 用戶標(biāo)識與鑒別 6.2.2 存取控制 6.2.3 視圖 6.2.4 數(shù)據(jù)加密 6.2.5 跟蹤審計(jì) 6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.5 跟蹤審計(jì),跟蹤審計(jì)(Audit Trial)是一種監(jiān)視措施,數(shù)據(jù)庫運(yùn)行中,DBMS跟蹤用戶對一些敏感數(shù)據(jù)的存取活動(dòng),把用戶對數(shù)據(jù)庫的操作自動(dòng)記錄下來放入審計(jì)日志(Audit Log)中,有許多DBMS的跟蹤審計(jì)記錄文件與系統(tǒng)的運(yùn)行日志合在一起。系統(tǒng)能利用這些審計(jì)跟蹤的信息,重現(xiàn)導(dǎo)致數(shù)據(jù)庫現(xiàn)狀的一系列事件。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.5 跟蹤審計(jì),跟蹤審計(jì)的記錄一般包括以下內(nèi)容:請求(源文本)、操作類型(如修改、查詢等)、操作終端標(biāo)識與操作者標(biāo)識、操作日期和時(shí)間、操作所涉及的對象(表、視圖、記錄、屬性等)、數(shù)據(jù)的前映象和后映象。DBMS提供相應(yīng)的語句供施加和撤銷跟蹤審計(jì)之用。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2 數(shù)據(jù)庫的安全性,6.2.1 用戶標(biāo)識與鑒別 6.2.2 存取控制 6.2.3 視圖 6.2.4 數(shù)據(jù)加密 6.2.5 跟蹤審計(jì) 6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,統(tǒng)計(jì)數(shù)據(jù)庫是一種特殊類型的數(shù)據(jù)庫,它和一般的數(shù)據(jù)庫相比,有很多共同點(diǎn),但是也有許多獨(dú)特之處。 統(tǒng)計(jì)數(shù)據(jù)庫,它回答給用戶的只能是統(tǒng)計(jì)信息。如國家的人口統(tǒng)計(jì)數(shù)據(jù)庫、經(jīng)濟(jì)統(tǒng)計(jì)數(shù)據(jù)庫等。統(tǒng)計(jì)數(shù)據(jù)庫存儲了大量敏感的數(shù)據(jù),但只給用戶提供這些原始數(shù)據(jù)的統(tǒng)計(jì)數(shù)據(jù)(如平均值、總計(jì)等),而不允許用戶查看單個(gè)的原始數(shù)據(jù)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,用戶使用合法的統(tǒng)計(jì)查詢可以推斷出他不應(yīng)了解的數(shù)據(jù)。,例如,一個(gè)學(xué)生想要知道另一個(gè)學(xué)生A的成績,他可以通過查詢包含A在內(nèi)的一些學(xué)生的平均成績,然后對于上述學(xué)生集合P,他可用自己的學(xué)號取代A后得集合P的平均成績。通過這樣兩次查詢得到的平均成績的差和自己的成績,就可以推斷出學(xué)生A的成績。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.2.6 統(tǒng)計(jì)數(shù)據(jù)庫的安全,為了堵塞這類漏洞,必須對數(shù)據(jù)庫的訪問進(jìn)行推斷控制?,F(xiàn)在常用的方法有數(shù)據(jù)擾動(dòng)、查詢控制和歷史相關(guān)控制等。這些方法雖然都獲得了應(yīng)用,取得了很好的效果,但是迄今為止,統(tǒng)計(jì)數(shù)據(jù)庫的安全問題尚未徹底解決。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,6.1 概述 6.2 數(shù)據(jù)庫的安全性 6.3 數(shù)據(jù)庫的完整性 6.4 SQL的完整性控制 本章小結(jié),仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3 數(shù)據(jù)庫的完整性,。,數(shù)據(jù)庫的完整性是指數(shù)據(jù)庫中數(shù)據(jù)的正確性和相容性,即為了防止數(shù)據(jù)庫中存在不符合語義的數(shù)據(jù),防止錯(cuò)誤信息的輸入和輸出。,例如: 學(xué)生的學(xué)號一定是唯一的,學(xué)號的長度是13至15個(gè)字符串;學(xué)生的年齡是整數(shù),取值范圍為1145; 當(dāng)一個(gè)用戶向數(shù)據(jù)庫插入一個(gè)新的學(xué)生記錄或修改一個(gè)學(xué)生的數(shù)據(jù)時(shí)必須滿足這些條件。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3 數(shù)據(jù)庫的完整性,數(shù)據(jù)庫的完整性保證了真實(shí)反映現(xiàn)實(shí)世界,凡是已經(jīng)失真的數(shù)據(jù)都可以說其完整性受到了破壞,這種情況下就不能再使用數(shù)據(jù)庫,否則可能造成嚴(yán)重的后果。,完整性受破壞的常見原因:,1錯(cuò)誤的數(shù)據(jù),2錯(cuò)誤的更新操作,3并發(fā)訪問,4各種硬件故障,5人為的破壞,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3 數(shù)據(jù)庫的完整性,6.3.1 完整性的語義約束 6.3.2 完整性語義檢查,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,。,完整性約束條件作用的對象可以是列、元組、關(guān)系三種。,列約束:主要是列類型、取值范圍、精度、排序等約束條件 。 元組約束:是元組中各個(gè)字段間的聯(lián)系的約束。 關(guān)系的約束:是若干元組間、關(guān)系集合上以及關(guān)系間的聯(lián)系的約束。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,完整性約束條件的類型可以分為兩大類型: 靜態(tài)約束和動(dòng)態(tài)約束。,1靜態(tài)約束,靜態(tài)約束是指數(shù)據(jù)庫每一確定狀態(tài)時(shí)的數(shù)據(jù)對象所應(yīng)滿足的約束條件,它是反映數(shù)據(jù)庫狀態(tài)合理性的約束,這是最重要的一類完整性約束。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,根據(jù)約束作用的對象的不同,又可分為下面三種:,靜態(tài)列約束 對一個(gè)列的取值域等的說明或限制,這是最常見、最容易實(shí)現(xiàn)的一類完整性約束,它包括以下幾個(gè)方面:, 對數(shù)據(jù)類型的約束,例如,數(shù)據(jù)的類型、長度、單位、精度等。 對數(shù)據(jù)格式的約束,例如,學(xué)生的學(xué)號的格式中前四位表示入學(xué)年份,中間三位為院號+系號,后三位為班級號+順序編號。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束, 對取值范圍或取值集合的約束,例如,大學(xué)本科學(xué)生年齡范圍的取值范圍為1145。 對空值的約束,空值表示未定義或未知的值,與零值和空格不同。有的列允許空值,有的不允許,例如,規(guī)定學(xué)生的姓名不允許取空值;學(xué)號成績可以為空值。 其他約束,例如,關(guān)于列的排序說明、組合列等。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,(2) 靜態(tài)元組約束,一個(gè)元組是由若干列值組成的,靜態(tài)元組約束規(guī)定組成一個(gè)元組的各個(gè)列之間的約束關(guān)系。 例如,一個(gè)學(xué)生的科目成績列,規(guī)定每科成績?nèi)≈挡坏玫陀?,也不得高于100。,(3) 靜態(tài)關(guān)系約束,靜態(tài)關(guān)系約束反映了一個(gè)關(guān)系中各個(gè)元組之間或者若干關(guān)系之間存在的聯(lián)系或約束。它包括:,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束, 實(shí)體完整性約束。即關(guān)鍵字段的值不為空。 參照完整性約束。即一個(gè)關(guān)系的外碼的取值與另一個(gè)關(guān)系的關(guān)鍵字的值有關(guān)。 函數(shù)依賴約束。大部分函數(shù)依賴約束都在關(guān)系模式中定義。 統(tǒng)計(jì)約束。即某個(gè)字段值與一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間的約束關(guān)系。例如對學(xué)生平均成績的約束等,這里的平均成績就是統(tǒng)計(jì)值。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,動(dòng)態(tài)約束是指數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊值之間滿足的約束條件,它反映了數(shù)據(jù)庫狀態(tài)改變時(shí)應(yīng)遵守的約束。按照約束對象不同,它又分為下面三種。,1動(dòng)態(tài)約束,(1) 動(dòng)態(tài)列約束,(2) 動(dòng)態(tài)元組約束,(3) 動(dòng)態(tài)關(guān)系約束,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,動(dòng)態(tài)列約束規(guī)定修改列定義或列值時(shí)應(yīng)滿足的約束條件,它包括: 修改列定義時(shí)的約束。例如,將允許空值的列改為不允許空值時(shí),如果該列目前已存在空值,則拒絕這種修改。 修改列值時(shí)的約束。修改列值時(shí)需要參照其舊值,并且新舊值之間需要滿足某種約束條件。例如,學(xué)生的年齡只能增長。,(1) 動(dòng)態(tài)列約束,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.1 完整性的語義約束,動(dòng)態(tài)元組約束是指修改某個(gè)元組的值時(shí)元組中的各個(gè)字段之間要滿足某種約束條件。例如,職工津貼不得高于個(gè)人基本工資的20%等。,(2) 動(dòng)態(tài)元組約束,(3) 動(dòng)態(tài)關(guān)系約束,動(dòng)態(tài)關(guān)系約束是加在關(guān)系變化時(shí)的限制條件,例如,事務(wù)一致性、原子性等約束條件。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3 數(shù)據(jù)庫的完整性,6.3.1 完整性的語義約束 6.3.2 完整性語義檢查,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.3.2 完整性語義檢查,現(xiàn)代數(shù)據(jù)庫技術(shù)采用對數(shù)據(jù)完整性的語義約束和檢查來保護(hù)數(shù)據(jù)庫的完整性, 實(shí)現(xiàn)方式有兩種:一種是通過定義和使用完整性約束規(guī)則,另一種是通過觸發(fā)器和存儲過程來實(shí)現(xiàn)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,第6章 數(shù)據(jù)庫安全性和完整性,6.1 概述 6.2 數(shù)據(jù)庫的安全性 6.3 數(shù)據(jù)庫的完整性 6.4 SQL的完整性控制 本章小結(jié),仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4 SQL的完整性控制,SQL中的完整性約束主要分為三類:域完整性、實(shí)體完整性和參照完整性。但是,SQL尚不支持動(dòng)態(tài)完整性約束。,6.4.1 域完整性 6.4.2 實(shí)體完整性 6.4.3 參照完整性,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,域完整性又稱為列完整性,指列數(shù)據(jù)輸入的有效性。實(shí)現(xiàn)域完整性的方法可通過定義相應(yīng)的約束、規(guī)則等方法實(shí)現(xiàn)。,1列約束 定義列約束規(guī)定某個(gè)屬性的值必須符合某種數(shù)據(jù)類型并且取自某個(gè)數(shù)據(jù)定義域。域完整性約束施加于單個(gè)數(shù)據(jù)上。,(1)長途電話號碼格式為:9999999999; (2)倉庫庫存量0; (3)圖書管理系統(tǒng)中允許讀者當(dāng)前在借圖書量最多為20本。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,域完整性可以使用CHECK約束、NOT NULL約束、UNIQUE約束在表定義的時(shí)候?qū)崿F(xiàn)。,CHECK約束:是字段輸入時(shí)的驗(yàn)證規(guī)則,表示一個(gè)字段的輸入內(nèi)容必須滿足CHECK約束的條件,若不滿足,則數(shù)據(jù)無法正常輸入。,NOT NULL約束:約束表示列值的非空性,此列不允許為空;,UNIQUE約束:表示列值唯一性。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,【例6-9】定義表STUDENT的同時(shí),定義字段的非空性和借書數(shù)字段的約束條件。,CREATE TABLE STUDENT ( 借書證號 char(8) NOT NULL, 姓名 char(8) NOT NULL, 專業(yè)名 char(12) NOT NULL, 性別 bit NOT NULL, 借書數(shù) tinyint CHECK(借書數(shù)=0 and 借書數(shù)=20) NULL ),NOT NULL約束限定了借書證號、姓名、專用名、性別不能為空值;CHECK約束限定限定了借書數(shù)的取值范圍。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,【例6-10】建立一個(gè)貨物表GOODS,要求貨品編號Gno列取值唯一,貨品名稱Gname列不允許為空。,CREATE TABLE GOODS ( Gno char(7) UNIQUE, Gname char(8) NOT NULL, Nums int ),仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,2規(guī)則,規(guī)則對象的使用步驟如下: (1)定義規(guī)則對象 語法格式:,CREATE RULE rule AS condition_expression,參數(shù)含義:參數(shù)rule為定義的新規(guī)則名,規(guī)則名必須符合標(biāo)識符規(guī)則;參數(shù)condition _expression為規(guī)則的條件表達(dá)式,該條件表達(dá)式可為WHERE子句中任何有效的表達(dá)式,但規(guī)則表達(dá)式中不能包含列或其他數(shù)據(jù)庫對象,可以包含不引用數(shù)據(jù)庫對象的內(nèi)置函數(shù)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,(2)將規(guī)則對象綁定到列或用戶自定義類型,規(guī)則對象的綁定,使用的是系統(tǒng)存儲過程sp_bindrule,語法格式如下:,sp_bindrule rulename = rule , objname = object_name , futureonly = futureonly_flag ,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,參數(shù)含義:參數(shù)rule為CREATE RULE語句創(chuàng)建的規(guī)則名,要用單引號括起來。參數(shù)object_name為綁定到規(guī)則的列或用戶定義的數(shù)據(jù)類型,如果object_name采用“表名.字段名”格式,則認(rèn)為綁定到表的列,否則綁定到用戶定義的數(shù)據(jù)類型;參數(shù)futureonly_flag僅當(dāng)將規(guī)則綁定到用戶定義的數(shù)據(jù)類型時(shí)才使用,如果futureonly_flag設(shè)置為futureonly,用戶定義數(shù)據(jù)類型的現(xiàn)有列不繼承新規(guī)則。如果futureonly_flag為NULL,當(dāng)被綁定的數(shù)據(jù)類型當(dāng)前無規(guī)則時(shí),新規(guī)則將綁定到用戶定義數(shù)據(jù)類型的每一列。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,【例6-11】創(chuàng)建一個(gè)規(guī)則,并綁定到STUDENT表的借書證號字段。,CREATE RULE num_rule AS num like 1-61-61-9 1-9 1-9 1-9 0-9 0-9 0-9 GO EXEC sp_bindrule num_rule, STUDENT.借書證號,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,(3)規(guī)則對象的刪除,刪除規(guī)則對象前,首先應(yīng)使用系統(tǒng)存儲過程sp_unbindrule,解除被綁定對象與規(guī)則對象之間的綁定關(guān)系。 語法格式: sp_unbindrule object_name = object_name , futureonly = futureonly_flag ,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,在解除列或自定義類型與規(guī)則對象之間的綁定關(guān)系后,就可以刪除規(guī)則對象了。 語法格式: 參數(shù)含義:參數(shù)rule指定刪除的規(guī)則名,可以包含規(guī)則所有者名;參數(shù)n表示可以指定多個(gè)規(guī)則同時(shí)刪除。,DROP RULE rule,n,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,【例6-12】解除num_rule規(guī)則對象與STUDENT表的借書證號的綁定關(guān)系,然后刪除規(guī)則對象num_rule。,EXEC sp_unbindrule num_rule DROP RULE num_rule,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,3觸發(fā)器 觸發(fā)器就是一類靠事件驅(qū)動(dòng)的特殊過程,一旦由某個(gè)用戶定義,任何用戶對該數(shù)據(jù)的增、刪、改操作均由服務(wù)器自動(dòng)激活相應(yīng)的觸發(fā)器,在核心層進(jìn)行集中的完整性控制。 一個(gè)觸發(fā)器應(yīng)包括下面兩個(gè)功能: (1)指明什么條件下觸發(fā)器被執(zhí)行。 (2)指明觸發(fā)器執(zhí)行什么動(dòng)作。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,SQL觸發(fā)器定義的語法如下:,:=CREATE TRIGGER ON WITH ENCRYPTION /*說明是否采用加密方式*/ FOR| AFTER|INSTEAD OF /*定義觸發(fā)器的類型*/ AS IF UPDATE(column)AND|ORUPDATE(column) n | IF(COLUMNS_UPDATED()bitwise_operator updated_bitmask) /*兩個(gè)IF子句用于說明觸發(fā)器執(zhí)行的條件*/ Sql_statements /*T-SQL語句序列*/,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,【例6-13】在數(shù)據(jù)庫XSBOOK中創(chuàng)建一觸發(fā)器,當(dāng)向BORROW表插入一記錄時(shí),檢查該記錄的借書證號在STUDENT表是否存在,檢查圖書的ISBN號在BOOK表中是否存在,及圖書的庫存量是否大于0,若有一項(xiàng)為否,則不允許插入。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,CREATE TRIGGER jy_insert ON BORROW FOR INSERT AS IF EXISTS( select * from inserted a where a.借書證號 not in ( select b.借書證號 from STUDENT b) or a.ISBN not in(select c.ISBN from BOOK c) OR EXISTS(select * from book where 庫存量=0) BEGIN RAISERROR(違背數(shù)據(jù)一致性,16,1) ROLLBACK TRANSACTION END,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,ELSE BEGIN UPDATE STUDENT SET 借書數(shù)=借書數(shù)+1 WHERE STUDENT.借書證號 IN (select inserted.借書證號 from inserted) UPDATE BOOK SET 庫存量=庫存量-1 WHERE book.ISBN IN (select inserted.ISBN from inserted) END,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,inserted 邏輯表:當(dāng)向表中插入數(shù)據(jù)時(shí),INSERT觸發(fā)器觸發(fā)執(zhí)行,新的記錄插入到觸發(fā)器表和inserted表中。,觸發(fā)器中使用的特殊表,執(zhí)行觸發(fā)器時(shí),系統(tǒng)創(chuàng)建了兩個(gè)特殊的邏輯表Inserted表和deleted表。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.1 域完整性,deleted邏輯表:用于保存已從表中刪除的記錄,當(dāng)觸發(fā)一個(gè)DELETE觸發(fā)器時(shí),被刪除的記錄存放到deleted邏輯表中。 修改一條記錄等于插入一新記錄,同時(shí)刪除舊記錄。當(dāng)對定義了UPDATE觸發(fā)器的表記錄修改時(shí),表中原記錄移動(dòng)到DELETE表中,修改過的記錄插入到inserted表中。觸發(fā)器可檢查deleted表、inserted表及被修改的表。,觸發(fā)器中使用的特殊表,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4 SQL的完整性控制,6.4.1 域完整性 6.4.2 實(shí)體完整性 6.4.3 參照完整性,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.2 實(shí)體完整性,實(shí)體完整性又稱為行的完整性,要求表中有一個(gè)主鍵,其值不能為空且唯一地標(biāo)識對應(yīng)的記錄。SQL在CREATE TABLE語句中提供PRIMARY KEY創(chuàng)建主碼列,實(shí)現(xiàn)數(shù)據(jù)的實(shí)體完整性。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.2 實(shí)體完整性,一個(gè)表只能有一個(gè)PRIMARY KEY約束,而且PRIMARY KEY約束中的列不能取空值。當(dāng)為表定義PRIMARY KEY約束時(shí),SQL為主鍵創(chuàng)建唯一索引,實(shí)現(xiàn)主鍵數(shù)據(jù)的唯一性,在查詢中,該索引可用來對數(shù)據(jù)進(jìn)行快速訪問。如果PRIMARY KEY約束是由多列組合定義的,則某一列的值可以重復(fù),但PRIMARY KEY約束定義中所有列的組合值必須唯一。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.2 實(shí)體完整性,【例6-14】在圖書管理系統(tǒng)里面,創(chuàng)建一個(gè)學(xué)生借閱表BORROW。,CREATE TABLE BORROW ( 借書證號 char(5), ISBN char(10), 借書時(shí)間 datetime, 應(yīng)還時(shí)間 datetime, PRIMARY KEY(借書證號,ISBN) ),用PRIMARY KEY約束定義了關(guān)系的主碼后,每當(dāng)用戶程序?qū)χ鞔a列進(jìn)行更新操作時(shí),系統(tǒng)自動(dòng)進(jìn)行完整性檢查,凡操作使主碼值為空值或使主碼值在表中不唯一,系統(tǒng)拒絕此操作,從而保證了實(shí)體完整性。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4 SQL的完整性控制,6.4.1 域完整性 6.4.2 實(shí)體完整性 6.4.3 參照完整性,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,參照完整性是關(guān)系模式的另一種重要約束,又稱為引用完整性。參照完整性保證主表中的數(shù)據(jù)與從表中數(shù)據(jù)的一致性,通過定義從表中的外碼與主表中的主碼之間的對應(yīng)關(guān)系實(shí)現(xiàn)。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,在SQL中,有兩種方法用于說明一個(gè)外部關(guān)鍵字:,第一種方法: 如果外部關(guān)鍵字只有一個(gè)屬性,可以在它的屬性名和類型后面直接用“REFERENCES”說明它參照了某個(gè)被參照表的某些屬性(必須是主關(guān)鍵字),其格式為: REFERENCES (),另一種方法: 在CREATE TABLE語句的屬性列表后面增加一個(gè)或幾個(gè)外部關(guān)鍵字說明,其格式為: FOREIGN KEY REFERENCES (),仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,下面將詳細(xì)討論實(shí)現(xiàn)參照完整性要考慮的幾個(gè)問題。,1外碼的取值規(guī)則,【例6-15】 設(shè)有一個(gè)關(guān)系模式, 學(xué)生(Sno,Sname,Ssex,Subno) 其中,Sno是主關(guān)鍵字,專業(yè)號Subno是外部關(guān)鍵字,并參照了關(guān)系模式 專業(yè)(Subno,Subname) 中的Subno,這時(shí)可以直接說明“學(xué)生.Subno”參照了“專業(yè).Subno”,稱專業(yè)為被參照關(guān)系,學(xué)生為參照關(guān)系。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,在這個(gè)例子中,看一下學(xué)生實(shí)體中的Subno取值的限制。如果一個(gè)學(xué)生還沒有分配專業(yè),取值為空值。如果分配了專業(yè),那么必須是專業(yè)實(shí)體中的某個(gè)專業(yè),也就是其取值必須是專業(yè)表中存在的某個(gè)專業(yè)號,這就是參照完整性。因?yàn)椤皩W(xué)生.Subno”必須參照“專業(yè).Subno”取值。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,取值規(guī)則,6.4.3 參照完整性,若屬性或?qū)傩越MF是基本關(guān)系R的外碼,它與基本關(guān)系S的主碼Ks相對應(yīng),則對于R中的每個(gè)元組在F上的取值必須為: 或者取空值(F的每個(gè)屬性均為空值); 或者等于S中某個(gè)元組的主碼值。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,(1)拒絕插入,一般當(dāng)參照關(guān)系插入元組,被參照關(guān)系的主碼字段存在相應(yīng)的值,則允許參照關(guān)系插入元組。而被參照關(guān)系如不存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值不相同,這時(shí)可有以下策略:,2參照表中增加元組,僅當(dāng)被參照關(guān)系中存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同時(shí),系統(tǒng)才執(zhí)行插入操作,否則拒絕此操作。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,(2)遞歸插入 首先向被參照關(guān)系中插入相應(yīng)的元組,其主碼值等于參照關(guān)系插入元組的外碼值,然后向參照關(guān)系插入元組。 例如對于上面的情況,系統(tǒng)將首先向?qū)I(yè)關(guān)系插入Subno=10的元組,然后再向?qū)W生表插入(981601,張麗,0,10)元組。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,3參照表中修改一個(gè)元組的外碼,當(dāng)參照關(guān)系修改某元組中外碼值,被參照關(guān)系主碼值與參照關(guān)系修改后元組的外碼值相同,則允許參照關(guān)系修改元組。而若被參照關(guān)系如不存在相應(yīng)的外碼值,則拒絕修改。如例6-15中,將學(xué)生表的某個(gè)“專業(yè)號.Subno”的值修改為專業(yè)表中不存在的某個(gè)非空值,則被拒絕修改。,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,4被參照表中刪除一個(gè)元組 當(dāng)在被參考表中刪除一個(gè)元組,如果參考關(guān)系的外碼沒有對應(yīng)值,則可以順利刪除此元組。但是如果參考關(guān)系存在若干元組,其外碼值與被參考關(guān)系刪除元組的主碼值相同,可以有三種不同的策略:,(1)拒絕刪除,(2)級聯(lián)刪除,(3)置空操作,仲愷農(nóng)業(yè)工程學(xué)院,計(jì)算機(jī)科學(xué)與工程學(xué)院,6.4.3 參照完整性,(1)拒絕刪除 仍以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)生青春成長路上的困惑解讀
- 醫(yī)療器械產(chǎn)品使用不當(dāng)風(fēng)險(xiǎn)免責(zé)協(xié)議書
- 農(nóng)業(yè)生產(chǎn)應(yīng)急管理與風(fēng)險(xiǎn)防范方案
- 高考文言文一輪復(fù)習(xí):《元史》專練
- 高考語文答題技巧指導(dǎo)
- 商務(wù)往來溝通文書寫作指南
- 企業(yè)法務(wù)顧問服務(wù)協(xié)議書與風(fēng)險(xiǎn)提示告知書
- 涵洞工程勞務(wù)分包合同
- 高考語文一輪復(fù)習(xí)-文言實(shí)詞盤點(diǎn)8:敝、蔽、便
- 《數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)指導(dǎo):算法與程序設(shè)計(jì)基礎(chǔ)》
- 《基于舞弊風(fēng)險(xiǎn)因子的輝山乳業(yè)公司財(cái)務(wù)舞弊案例探析》15000字(論文)
- 2025年山西省國有資本運(yùn)營有限公司招聘筆試參考題庫含答案解析
- 2025年湖南生物機(jī)電職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- DB1331T 102-2025雄安新區(qū)應(yīng)急物資儲備庫建設(shè)規(guī)范
- 北京市豐臺區(qū)2024-2025學(xué)年九年級上學(xué)期期末道德與法治試題(含答案)
- 醫(yī)院培訓(xùn)課件:《PET-CT的臨床應(yīng)用》
- 《從外觀看豬病診治》課件
- 《莫比烏斯環(huán)》課件
- 2025海南省交通投資控股限公司招聘30人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《工業(yè)機(jī)器人現(xiàn)場編程》課件-任務(wù)3.涂膠機(jī)器人工作站
- 富饒的西沙群島課件
評論
0/150
提交評論