《數(shù)據(jù)庫安全》第三章 數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的安全語義_第1頁
《數(shù)據(jù)庫安全》第三章 數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的安全語義_第2頁
《數(shù)據(jù)庫安全》第三章 數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的安全語義_第3頁
《數(shù)據(jù)庫安全》第三章 數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的安全語義_第4頁
《數(shù)據(jù)庫安全》第三章 數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的安全語義_第5頁
已閱讀5頁,還剩321頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 第 三 章數(shù)據(jù)庫及其應(yīng)用系統(tǒng)的安全語義2022/7/181本 章 概 要 3.1 安全的基本體系3.2 系統(tǒng)安全基本原則3.3 數(shù)據(jù)庫安全的發(fā)展3.4 數(shù)據(jù)庫保護2022/7/1823.1 安全的基本體系3.1.1 安全的特征安全的五個基本特征:機密性:是防止信息泄漏給非授權(quán)個人、實體或過程,只允許授權(quán)用戶訪問的特性。完整性:完整性是信息在未經(jīng)合法授權(quán)時不能被改變的特性,也就是數(shù)據(jù)在生成、存儲或傳輸過程中保證不被偶然或蓄意地刪除、修改、偽造、亂序、插入等破壞和丟失的特性。完整性要求保持數(shù)據(jù)的原樣,即信息的正確生成、存儲和傳輸。2022/7/183可用性:可用性是數(shù)據(jù)庫系統(tǒng)中,在需要時允許授權(quán)

2、用戶或?qū)嶓w使用的特性;或者是不正常情況下能自我恢復(fù)及狀態(tài)保護,為授權(quán)用戶提供有效服務(wù)的特性./延遲和拒絕使用非抵賴性:非抵賴性也稱作不可否認性,即在數(shù)據(jù)庫系統(tǒng)的信息交互過程中所有參與者都不可能否認或抵賴曾經(jīng)完成的操作的特性??煽匦裕涸谑跈?quán)范圍內(nèi)控制信息流向和行為方式,對信息的傳播和信息的內(nèi)容具有控制能力。機密性、完整性和可用性是信息安全的核心三要素,也是數(shù)據(jù)庫安全的三要素。2022/7/1843.1.2 基本安全服務(wù)安全服務(wù)的種類:鑒別服務(wù):提供對通信中對等實體和數(shù)據(jù)來源的鑒別。也稱為認證服務(wù)。(安全入口)對等實體鑒別:這種服務(wù)在連接建立或在數(shù)據(jù)傳送階段的某些時刻提供使用, 用以證實一個或多個

3、連接實體的身份。數(shù)據(jù)來源鑒別:為數(shù)據(jù)單元的來源提供確認,鑒別數(shù)據(jù)項是否來自某個聲稱的實例. 鑒別服務(wù)對數(shù)據(jù)單元的復(fù)制或篡改不提供保護2022/7/185訪問控制服務(wù):根據(jù)規(guī)定的安全策略和安全模式,對合法用戶進行授權(quán),防止對任何資源的非法訪問。所謂非法訪問是指未經(jīng)授權(quán)的使用、泄露、銷毀以及發(fā)布等及合法授權(quán)用戶的非法訪問。(實現(xiàn)最基本的安全目標)機密性服務(wù):確保數(shù)據(jù)交換安全,防止非法截獲或泄漏給非授權(quán)個人、實體或過程,只允許授權(quán)用戶訪問的特性。對付被動攻擊。被動攻擊:竊聽和監(jiān)視數(shù)據(jù)傳輸。獲取數(shù)據(jù)。被動攻擊兩種形式是內(nèi)容泄露和流量分析。2022/7/186完整性服務(wù):主要是防止數(shù)據(jù)被非法增刪、修改或

4、替代,從而改變數(shù)據(jù)的價值或存在。這種服務(wù)對付主動攻擊。主動攻擊:對數(shù)據(jù)流篡改或偽造數(shù)據(jù)流,劃分為四類:重放、假冒、篡改消息和拒絕服務(wù)??沟仲嚪?wù):限制合法授權(quán)用戶的安全責(zé)任,為安全行為糾紛提供可以取證的憑據(jù)。以防止發(fā)送方或接收方否認已發(fā)送或已接收一個消息的事實。2022/7/187安全服務(wù)主要安全服務(wù)全稱認證(AU)對等實體認證數(shù)據(jù)起源認證訪問控制(AC)自主訪問控制強制訪問控制機密性(CO)連接機密性無連接機密性選擇字段機密性業(yè)務(wù)流機密性完整性(IN)可恢復(fù)的連接完整性不可恢復(fù)的連接完整性選擇字段的連接完整性無連接完整性選擇字段的無連接完整性非否認(ND)數(shù)據(jù)起源的非否認傳遞過程的非否認20

5、22/7/1883.1.3 系統(tǒng)安全的八大機制安全機制(security mechanism):用來檢測、防范安全攻擊,或者可恢復(fù)系統(tǒng)的機制。數(shù)據(jù)加密機制訪問控制機制數(shù)據(jù)完整性機制數(shù)字簽名機制鑒別交換機制業(yè)務(wù)填充機制路由控制機制公證機制2022/7/189一、數(shù)據(jù)加密機制向數(shù)據(jù)和業(yè)務(wù)信息流提供保密性,對其他安全機制起補充作用。加密算法: 對稱密碼體制 非對稱密碼體制需要加密層選擇、加密算法選擇和密鑰管理。密鑰管理:包括密鑰的產(chǎn)生、存儲、密鑰分配、銷毀、更新及應(yīng)用。實現(xiàn)服務(wù)種類:鑒別服務(wù)、機密性服務(wù)、完整性服務(wù)2022/7/1810二、訪問控制機制訪問控制的目的是防止對信息資源的非授權(quán)訪問和非授

6、權(quán)使用信息資源。它允許用戶對其常用的信息庫進行適當權(quán)限的訪問,限制他隨意刪除、修改或拷貝信息文件。實現(xiàn)服務(wù)種類:訪問控制服務(wù)2022/7/1811訪問控制采用最小特權(quán)原則:即在給用戶分配權(quán)限時,根據(jù)每個用戶的任務(wù)特點使其獲得完成自身任務(wù)的最低權(quán)限,不給用戶賦予其工作范圍之外的任何權(quán)力。使用的技術(shù):訪問控制矩陣、權(quán)限、安全標記、訪問時間等。2022/7/1812三、數(shù)據(jù)完整性機制是保護數(shù)據(jù),以免未授權(quán)的數(shù)據(jù)亂序、丟失、重放、插入和纂改。實現(xiàn)服務(wù)種類:完整性服務(wù)、抗抵賴服務(wù)。2022/7/1813例1通常通過消息驗證碼來提供完整性。Hash算法特點:可以把任意長度的字符串經(jīng)過運算生成固定長度的字符

7、串,并且這個產(chǎn)生的字符串代表著原來字符串里的所有字符。通常叫消息摘要。如:“admin”加密后:16位8f00b204e980099832位d41d8cd98f00b204e9800998ecf8427e該算法是不可逆的,即不能還原源代碼。2022/7/1814如MD5算法生成128位比特的摘要消息。設(shè)A發(fā)給B內(nèi)容為“Hello”了一個Email, 當B收到后使用了Hash算法來確定這封Email在傳送過程中沒被修改過,以保證數(shù)據(jù)的完整性工作方式如下:1.A寫一封Email內(nèi)容為Hello2.A用Hash算法對Hello進行編碼3.A將原始Email的Hello 及經(jīng)過Hash算法編碼過后的原

8、始Email的消息摘要,一起發(fā)送給B2022/7/18154.B接收到了A的Email,首先分離由2部分組成的郵件。5.B通過Hash算法,根據(jù)收到的Email的內(nèi)容,重新計算出該Email的摘要信息.6.B將自己計算出的摘要信息和收到的摘要信息進行比較,如果比較結(jié)果一樣,則認為這封Email在中途沒有被修改過,否則的話,這封Email在中途一定被修改過,因此內(nèi)容不可信。保證了原始數(shù)據(jù)的完整性。2022/7/1816例2 數(shù)據(jù)庫設(shè)計中設(shè)計參照完整性時注意的 幾個方面。1 外鍵的取名規(guī)則。2 參照完整性約束中,主表中被參考的字段與從表中被定義為外鍵的字段,無論是數(shù)據(jù)類型還是數(shù)據(jù)的長度都必須一致。

9、3 主表中的某個字段被其他表作為外鍵的話,則這個表的修改與刪除就會受到限制??赏ㄟ^“級聯(lián)修改”或者“級聯(lián)刪除”實現(xiàn)這個功能。2022/7/1817在數(shù)據(jù)庫分別建立表t_food(菜單)和表t_book(訂單),如下所示:t_food:food_id(主鍵) food_name food_price1 蘋果 2.42 香蕉 3.5t_book:idfood_id(外鍵) num1 1 52 2 42022/7/1818如果你想刪除t_food中的某一行數(shù)據(jù),就有可能會出現(xiàn)如下錯誤: Cannot delete or update a parent row: a foreign key const

10、raint fails (t_book, CONSTRAINT FOREIGN KEY (food_id) REFERENCES t_food (food_id) 原因:刪除的數(shù)據(jù)表t_food中包含了主鍵food_id,如果直接刪除數(shù)據(jù),food_id對應(yīng)的外鍵food_id就沒有被指向,自然就會出現(xiàn)這種錯誤。解決兩種方法:第一種,也是最直接的,在刪除t_food的數(shù)據(jù)行之前,先將其所對應(yīng)的t_book中的數(shù)據(jù)行刪除。第二種,在建立數(shù)據(jù)庫時,設(shè)置主外鍵on delete cascade。這樣,在刪除主鍵對應(yīng)數(shù)據(jù)時,外鍵對應(yīng)的數(shù)據(jù)也會被刪除。2022/7/1819CREATETABLEt_bo

11、ok( idintNOTNULLPRIMARYKEY, foodid intNOTNULL, numintNULL, FOREIGNKEY(food_id) REFERENCESt_food(food_id) ONDELETECASCADE) 此外還有級聯(lián)修改,它跟級聯(lián)刪除一樣會出現(xiàn)以上問題,解決方法相似。建立數(shù)據(jù)庫時,設(shè)置主外鍵on update cascade。2022/7/1820對數(shù)據(jù)單元進行簽名和校驗。防止數(shù)據(jù)單元的偽造、假冒、篡改和否認。數(shù)字簽名:是附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作的密碼變換,來代替書寫簽名或印章。決定于兩個過程: 對數(shù)據(jù)單元簽名; 驗證簽過名的數(shù)據(jù)單

12、元。數(shù)字簽名是基于公鑰密碼體制的。它采用了雙重加密的方法來實現(xiàn)防偽、防騙 。實現(xiàn)服務(wù)種類:鑒別服務(wù)、部分完整性服務(wù)、抗抵賴服務(wù)。四、數(shù)字簽名機制2022/7/1821例3 用戶A通過銀行匯款1萬元。 1 用戶A將被發(fā)送文件m用SHA編碼加密產(chǎn)生128bit的數(shù)字摘要s。 2 用戶A具有密鑰對。其中k1為公開的加密密鑰,k2為私有的解密密鑰。用戶A用自己的私用密鑰通過sig = DK2(s)運算對摘要加密,對文件m就形成了數(shù)字簽名。 3 A將Dk2(s)作為文件m的簽名與m組合傳送給銀行。2022/7/18224 銀行通過查找A的公鑰k1,對摘要s解密:Ek1(sig) = Ek1(Dk2(s)

13、 = s,通過解密還原摘要s。同時對收到的文件m用SHA編碼加密產(chǎn)生又一摘要s。 5 將解密后的摘要s和收到的文件在接收方重新加密產(chǎn)生的摘要s相互對比。如兩者一致,則說明傳送過程中信息沒有被破壞或篡改過。確認消息確實來源于A。因為除了A之外,無人知曉k2,任何人都不能從s計算出sig來。2022/7/1823五、鑒別交換機制鑒別交換機制通過互相交換信息的方式來確定彼此的身份。用于鑒別交換技術(shù)有:認證口令:發(fā)送方與接收方則根據(jù)口令來判斷對方的身份。密碼技術(shù):發(fā)送方將加密信息發(fā)給接收方,接收方在收到已加密的信息時,通過自己掌握的密鑰解密,能夠確定信息的發(fā)送者的身份。認證實體的特征:例如磁卡、IC卡

14、、指紋、唇紋、聲音等。實現(xiàn)服務(wù)種類:鑒別服務(wù)2022/7/1824六、路由控制機制路由控制機制可使信息發(fā)送者選擇特殊的路由,以保證連接、傳輸?shù)陌踩?路由可以動態(tài)選擇,也可以預(yù)定義,以便只用物理上安全的子網(wǎng)、中繼或鏈路進行連接和傳輸;2022/7/1825七、業(yè)務(wù)填充機制流量填充機制提供針對流量分析的保護。 所謂的業(yè)務(wù)填充即使在業(yè)務(wù)閑時發(fā)送無用的隨機數(shù)據(jù),制造假的通信、產(chǎn)生欺騙性數(shù)據(jù)單元的安全機制。該機制可用于提供對各種等級的保護,用來防止對業(yè)務(wù)進行分析,同時也增加了密碼通訊的破譯難度。發(fā)送的隨機數(shù)據(jù)應(yīng)具有良好的模擬性能,能夠以假亂真。該機制只有在業(yè)務(wù)填充受到保密性服務(wù)時才有效。流量填充的實現(xiàn)

15、方法是:隨機生成數(shù)據(jù)并對其加密,再通過網(wǎng)絡(luò)發(fā)送。 2022/7/1826八、公證機制有關(guān)在兩個或多個實體之間通信的數(shù)據(jù)的性質(zhì), 如完整性、原發(fā)、時間和目的地等能夠借助公證機制而得到確保。這種保證是由第三方公證人提供的。公證人為通信實體所信任, 并掌握必要信息以一種可證實方式提供所需的保證。每個通信實例可使用數(shù)字簽名、加密和完整性機制以適應(yīng)公證人提供的服務(wù)。當這種公證機制被用到時, 數(shù)據(jù)便在參與通信的實體之間經(jīng)由受保護的通信和公證方進行通信。2022/7/1827安全服務(wù)與安全機制的關(guān)系安全服務(wù)是由安全機制來實現(xiàn)的一種安全機制可以實現(xiàn)一種或者多種安全服務(wù)一種安全服務(wù)可以由一種或者多種安全機制來實

16、現(xiàn) 2022/7/1828 機 制 服 務(wù)加密數(shù)字簽名訪問控制數(shù)據(jù)完整性認證交換業(yè)務(wù)流填充路由控制公證認證對等實體認證數(shù)據(jù)起源認證訪問控制自主訪問控制強制訪問控制機 密 性連接機密性無連接機密性選擇字段機密性業(yè)務(wù)流機密性完整性可恢復(fù)的連接完整性不可恢復(fù)的連接完整性選擇字段的連接完整性無連接完整性選擇字段的無連接完整性非否認數(shù)據(jù)起源的非否認傳遞過程的非否認安全服務(wù)與安全機制的關(guān)系2022/7/1829 3.2 系統(tǒng)安全基本原則隔離原則最小特權(quán)原則縱深防御原則用戶輸入不信任原則關(guān)卡檢察原則失效保護原則最弱連接安全化原則建立默認原則減少攻擊面原則2022/7/1830隔離原則:分解并減少攻擊面。分隔

17、基本思想:如果我們將系統(tǒng)分成盡可能多的獨立單元,那么我們可以將對系統(tǒng)可能造成損害的量降到最低。采取措施:防火墻、最小特權(quán)賬戶、最小特權(quán) 代碼。一、隔離原則2022/7/1831最小特權(quán):指的是“在完成某種操作時所賦予系統(tǒng)中每個主體(用戶或進程)必不可少的特權(quán)”。每個用戶只能擁有剛夠完成工作的最小權(quán)限。二、最小特權(quán)原則:2022/7/1832最小特權(quán)原則規(guī)定:只授予執(zhí)行操作所必需的最少訪問權(quán),對于該訪問權(quán)只準許用所需的最少時間并最小化有特權(quán)的模塊。例1 DBA在為用戶分配初始權(quán)限時,通常只賦予其相應(yīng)服務(wù)的最小權(quán)限“只讀”,然后再根據(jù)實際需求以及對用戶的了解程度提升其權(quán)限。例2 UNIX 的 pa

18、sswd 命令能用于修改密碼,只能修改密碼。2022/7/1833縱深防御原則:采取多種有效防御措施促使攻擊擱淺。思想:使用多重防御策略來管理風(fēng)險,以便在一層防御不夠時,在理想情況下,另一層防御將會阻止完全的破壞。例 某公司安全措施。公司建立防火墻來阻止入侵者侵入。對數(shù)據(jù)庫數(shù)據(jù)進行加密 三、縱深防御原則2022/7/1834失效保護原則:系統(tǒng)失效時,不能讓敏感數(shù)據(jù)喪失保護被任意訪問,返回信息既友好又不能泄露系統(tǒng)內(nèi)部詳細信息。例 備份磁帶是在網(wǎng)絡(luò)系統(tǒng)由于各種原因出現(xiàn)災(zāi)難事件時最為重要的恢復(fù)和分析的手段和依據(jù)。通過備份磁帶,一方面可以恢復(fù)被破壞的系統(tǒng)和數(shù)據(jù);另一方面,通過恢復(fù)磁帶數(shù)據(jù),攻擊者也可以

19、獲得系統(tǒng)的重要數(shù)據(jù),例如系統(tǒng)加密口令、數(shù)據(jù)庫各種存檔以及用戶其它數(shù)據(jù)直接造成重要失密事件。四、失效保護原則2022/7/1835最弱連接安全化原則:強化系統(tǒng)最薄弱環(huán)節(jié)的安全監(jiān)測和緩解措施。意識到系統(tǒng)弱點,保護整個系統(tǒng)安全。系統(tǒng)最薄弱部分就是最易受攻擊影響的部分。例 平等對待安全的各個方面而不能有偏重。如不能只防外部入侵,而忽視內(nèi)部攻擊。 五、最弱連接安全化原則2022/7/1836用戶輸入不信任原則:用戶輸入是對目標系統(tǒng)攻擊的主要武器。應(yīng)用程序應(yīng)該徹底驗證所有用戶輸入,然后再根據(jù)用戶輸入執(zhí)行操作。例 防止緩沖區(qū)溢出采取本原則,方法就是不信任用戶的輸入。 六、用戶輸入不信任原則2022/7/18

20、37不管是用戶也好,程序的攻擊者也好,當提供的數(shù)據(jù)長度大于應(yīng)用程序預(yù)期的長度時,便會發(fā)生緩沖區(qū)溢出,此時數(shù)據(jù)會溢出到內(nèi)部存儲器空間。若開發(fā)人員沒有預(yù)料到外部提供的數(shù)據(jù)會比內(nèi)部緩沖區(qū)大。溢出導(dǎo)致了內(nèi)存中其他數(shù)據(jù)結(jié)構(gòu)的破壞,這種破壞通常會被攻擊者利用,以運行惡意代碼。2022/7/1838例:void DoSomething(char *cBuffSrc, DWORD cbBuffSrc) char cBuffDest32; memcpy(cBuffDest,cBuffSrc,cbBuffSrc);如果 cBuffSrc 和 cbBuffSrc 來自可信賴的源,則這段代碼沒有任何問題。然而,如果數(shù)

21、據(jù)來自不可信賴的源,也未得到驗證,那么攻擊者(不可信賴源)很容易就可以使 cBuffSrc 比 cBuffDest 大,同時也將 cbBuffSrc 設(shè)定為比 cBuffDest 大。當 memcpy 將數(shù)據(jù)復(fù)制到 cBuffDest 中時,來自 DoSomething 的返回地址就會被更改,因為 cBuffDest 在函數(shù)的堆??蚣苌吓c返回地址相鄰,此時攻擊者即可通過代碼執(zhí)行一些惡意操作。 2022/7/1839彌補的方法就是不要信任用戶的輸入,并且不信任 cBuffSrc 和 cbBuffSrc 中攜帶的任何數(shù)據(jù): void DoSomething(char *cBuffSrc, DWOR

22、D cbBuffSrc) char cBuffDest32; const DWORD cbBuffDest = 32; memcpy(cBuffDest, cBuffSrc, min( cbBuffDest, cbBuffSrc); 2022/7/1840使用默認安全原則:需要為系統(tǒng)安全提供默認配置。如:默認賬號、權(quán)限、策略。是簡化系統(tǒng)的重要方式。創(chuàng)建安全的默認值。保護對默認帳號的訪問七、使用默認安全原則2022/7/1841關(guān)卡檢查原則:及早實施認證與授權(quán)。將攻擊阻止在第一道門檻之外。八、關(guān)卡檢查原則2022/7/1842減少攻擊面原則:禁用應(yīng)用程序不需要的模塊和組件、協(xié)議和服務(wù)。減少攻擊可

23、利用的漏洞。如果不使用服務(wù)、協(xié)議和功能的話,將其刪除或?qū)⑵浣?。來減小受攻擊的區(qū)域范圍。九、減少攻擊面原則2022/7/1843萌芽階段(60年代末-70年代中期)軍事主導(dǎo)階段(70年代中期-80年代中期)標準化階段(80年中期-90年代初)多樣化階段(90年代初-現(xiàn)在)3.3 數(shù)據(jù)庫安全的發(fā)展2022/7/1844 數(shù)據(jù)庫安全性 數(shù)據(jù)庫完整性 數(shù)據(jù)庫并發(fā)控制 數(shù)據(jù)庫備份與恢復(fù) 3.4 數(shù)據(jù)庫保護2022/7/1845數(shù)據(jù)庫的安全性數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫,防止因用戶非法使用數(shù)據(jù)庫造成數(shù)據(jù)泄露、更改或破壞。防范對象是非法用戶的非法操作3.4.1 數(shù)據(jù)庫安全性 2022/7/1846數(shù)據(jù)庫的

24、安全性控制的一般方法OSDBAP1AP2AP3DBMS訪問控制(用戶標識和鑒別與授權(quán))存取控制(視圖和查詢修改)OS安全保護數(shù)據(jù)加密存儲審計2022/7/18471、用戶身份驗證2、存取控制3、通過視圖調(diào)整授權(quán)4、保護機密數(shù)據(jù)5、審計跟蹤一、數(shù)據(jù)庫安全保護措施2022/7/18481.訪問控制訪問控制是對用戶訪問數(shù)據(jù)庫各種資源(包括基表、視圖、各種目錄以及實用程序等)時的創(chuàng)建、撤消、查詢、更新、執(zhí)行等權(quán)限的控制。DBMS通過用戶標識和鑒別、用戶授權(quán)來進行訪問控制 用戶標識和鑒別由系統(tǒng)提供一定的方式讓用戶標識自己的名字或身份,系統(tǒng)內(nèi)部記錄這些數(shù)據(jù),每次用戶請求訪問數(shù)據(jù)時系統(tǒng)進行核對,以鑒別此用戶

25、是否有權(quán)訪問。方法由數(shù)據(jù)庫系統(tǒng)管理員為用戶創(chuàng)建立用戶名和密碼。允許用戶嘗試3次,如果3次均未通過,系統(tǒng)自動退出。2022/7/18492.存取控制對有權(quán)訪問數(shù)據(jù)庫的用戶做進一步限制,定義每個數(shù)據(jù)庫用戶的各種操作權(quán)限。存取權(quán)限由數(shù)據(jù)對象和操作類型兩要素構(gòu)成。存取權(quán)限(操作類型):建立、修改、檢索(模式); 查找、插入、修改、刪除(數(shù)據(jù))。授權(quán)對象(數(shù)據(jù)對象):表、屬性列、行(記錄)在數(shù)據(jù)庫系統(tǒng)中,定義用戶存取權(quán)限稱為授權(quán) 。這些授權(quán)定義經(jīng)過編譯后以一張授權(quán)表的形式存放在數(shù)據(jù)字典中。對于授權(quán)表,一個衡量授權(quán)機制的重要指標就是授權(quán)粒度,即可以定義的數(shù)據(jù)對象的范圍,在關(guān)系數(shù)據(jù)庫中,授權(quán)粒度包括關(guān)系、記

26、錄或?qū)傩?。授?quán)粒度越細,授權(quán)子系統(tǒng)就越靈活,能夠提供的安全性就越完善。2022/7/18503.視圖機制為不同權(quán)限的用戶定義不同的視圖,把要保密的數(shù)據(jù)對無權(quán)存取這些數(shù)據(jù)的用戶隱藏起來,可以限制用戶的訪問范圍,從而自動地為數(shù)據(jù)提供一定程度的安全保護。 2022/7/18514.數(shù)據(jù)加密加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)加密成為不可直接識別的格式,數(shù)據(jù)以密文的形式存儲和傳輸。 加密方法:替換方法,該方法使用密鑰將明文中的每一個字符轉(zhuǎn)換為密文中的字符。轉(zhuǎn)換方法,該方法將明文中的字符按不同的順序重新排列。對高度敏感數(shù)據(jù),以密碼形式存儲和傳輸。數(shù)據(jù)加密和解密占用大量系統(tǒng)資源,此功能為可選項。202

27、2/7/18525.審計審計是一種監(jiān)視措施,它利用審計日志文件記錄用戶對數(shù)據(jù)庫的更新功能,對其進行事后分析。記錄的內(nèi)容一般包括:操作類型(如修改、查詢等),操作終端標識與操作者標識,操作日期和時間,操作所涉及到的相關(guān)數(shù)據(jù)(如基本表、視圖、記錄、屬性等),數(shù)據(jù)的前象和后象等。一旦發(fā)現(xiàn)潛在的竊密企圖,例如重復(fù)的、相似的查詢,數(shù)據(jù)庫管理員就可以利用審計日志跟蹤的信息,進行事后分析和調(diào)查導(dǎo)致數(shù)據(jù)庫現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的用戶、時間和內(nèi)容。 2022/7/1853二、SQL Server 2000的安全控制機制1. SQL Server安全體系結(jié)構(gòu)SQL Server安全體系結(jié)構(gòu)由三級組

28、成: 數(shù)據(jù)庫管理系統(tǒng)級數(shù)據(jù)庫級對象與語句級SQL Server安全體系結(jié)構(gòu)2022/7/1854數(shù)據(jù)庫服務(wù)器級安全:SQL Server通過設(shè)置登錄賬號來創(chuàng)建一個安全層,用戶只有登錄成功,才能與SQL Server建立連接。數(shù)據(jù)庫級安全:SQL Server的特定數(shù)據(jù)庫都有自己的用戶和角色,用戶登錄后要使用服務(wù)器中的數(shù)據(jù)庫時,必須要有用戶帳號才能夠存取數(shù)據(jù)庫。對象與語句級安全:這一級SQL Server實施權(quán)限管理。合法用戶必須在自己的權(quán)限范圍內(nèi)進行數(shù)據(jù)操作。通過授權(quán)給用戶來指定用戶可以訪問的數(shù)據(jù)庫對象的權(quán)限。 2022/7/18552. SQL Server 的安全驗證模式安全性帳戶驗證模式

29、:是指系統(tǒng)確認用戶身份的方式。SQL Server 有兩種安全驗證模式,即Windows安全驗證模式和混合安全認證模式。2022/7/1856Windows安全驗證模式:是指SQL Server服務(wù)器通過使用Windows身份驗證來驗證用戶的身份。SQL Server服務(wù)器不必再提供一個單獨的登錄賬號及口令?;旌习踩炞C模式:表示用戶即可以使用Windows身份驗證,也可以使用 SQL Server身份驗證。若使用 SQL Server身份驗證,用戶必須輸入有效的SQL Server登錄賬號及口令,這里的登陸帳號是由數(shù)據(jù)庫管理員在SQL Server中創(chuàng)建并分配給用戶的。2022/7/1857

30、 Windows安全驗證模式主要有以下優(yōu)點:(1)數(shù)據(jù)庫管理員的工作可以集中在管理數(shù)據(jù)庫方面,而不是管理用戶賬戶。(2)Windows有著更強的用戶賬戶管理工具??梢栽O(shè)置賬戶鎖定、密碼期限等。(3)Windows的組策略支持多個用戶同時被授權(quán)訪問SQL Server。如果網(wǎng)絡(luò)中有多個SQL Server服務(wù)器,就可以選擇通過Windows身份驗證機制來完成。 2022/7/1858混合身份驗證模式具有以下優(yōu)點:(1)創(chuàng)建了Windows之上的另外一個安全層次。(2)支持更大范圍的用戶,如非Windows客戶、Novell網(wǎng)用戶等。(3)一個應(yīng)用程序可以使用單個的SQL Server登錄賬號和口

31、令。 2022/7/1859利用企業(yè)管理器進行認證模式的設(shè)置2022/7/1860系統(tǒng)管理員帳戶Sa: 在安裝SQL Server后,系統(tǒng)默認創(chuàng)建的登錄帳號。該用戶具有三級安全體系的所有權(quán)限,是超級用戶。對于sa賬號我們必須進行最強的保護,包括使用一個超級復(fù)雜的密碼,同時不要讓sa賬號的密碼寫于應(yīng)用程序或者腳本中。 最好不要在數(shù)據(jù)庫應(yīng)用中使用sa賬號,建議數(shù)據(jù)庫管理員新建立個擁有與sa一樣權(quán)限的超級用戶來管理數(shù)據(jù)庫。 2022/7/18613. SQL Server 的安全管理數(shù)據(jù)庫的安全管理主要是對數(shù)據(jù)庫用戶的合法性和操作權(quán)限的管理。SQL Server的安全性管理包括以下幾個方面:數(shù)據(jù)庫系

32、統(tǒng)登錄用戶管理、數(shù)據(jù)庫用戶管理、數(shù)據(jù)庫系統(tǒng)角色管理以及數(shù)據(jù)庫訪問權(quán)限的管理。2022/7/1862(1)數(shù)據(jù)庫系統(tǒng)登錄用戶管理在SQL Server中,賬號有兩種:一種是登錄服務(wù)器的登錄賬號(Login Name),另外一種是使用數(shù)據(jù)庫的用戶賬號(User Name)。登錄用戶是服務(wù)器級用戶,用戶以登錄用戶身份登錄進SQL Server系統(tǒng)。用戶可以自己創(chuàng)建登陸用戶 2022/7/1863查看服務(wù)器的登錄賬號 使用企業(yè)管理器Enterprise Manager 進入Enterprise Manager,展開“SQL Server組”,找到所要連接的SQL Server服務(wù)器;展開該服務(wù)器對應(yīng)的

33、文件夾,再展開“安全性”文件夾,單擊“登錄”選項,即可看到系統(tǒng)創(chuàng)建的默認登錄賬號及已建立的其他登錄賬號 。使用存儲過程 EXEC sp_helplogins 2022/7/1864創(chuàng)建服務(wù)器的登錄賬號使用企業(yè)管理器 SQL ServersSQL Servers組要建立登錄賬戶的服務(wù)器安全性登錄。右擊“登錄”,選擇“新建登錄”,在“新建登錄”對話框中輸入登錄用戶名,選擇身份驗證模式,選擇登錄到SQL Server之后要連接的默認數(shù)據(jù)庫。最后單擊“確定”按鈕 。使用存儲過程 格式:SP_ADDLOGIN LOGINAME=登錄名, PASSWD=口令,DEFDB=默認數(shù)據(jù)庫名 例如:SP_ADDL

34、OGIN LOGINAME=user1, PASSWD =123456,DEFDB=pubs 2022/7/1865更改登錄帳號屬性使用存儲過程sp_password可改變登錄帳號的密碼。格式是:EXEC sp_password 舊密碼, 新密碼, 登錄帳號名稱例:EXEC sp_password 123456, m123456, user1 此語句將user1帳號的密碼由原來的123456改為m123456 。刪除登錄賬號 使用企業(yè)管理器使用存儲過程 sp_droplogin 登錄賬號2022/7/1866(2) 數(shù)據(jù)庫用戶管理數(shù)據(jù)庫用戶是指具有合法身份的數(shù)據(jù)庫使用者。數(shù)據(jù)庫用戶的作用范圍局

35、限于其所屬的數(shù)據(jù)庫。數(shù)據(jù)庫用戶必須對應(yīng)到登錄用戶。登錄用戶只有成為(對應(yīng)到)數(shù)據(jù)庫用戶后才能訪問數(shù)據(jù)庫,數(shù)據(jù)庫用戶可以與登錄用戶同名,也可以不同名。每個登錄賬號在一個數(shù)據(jù)庫中只能有一個用戶賬號,但每個登錄賬號可以在不同的數(shù)據(jù)庫中各有一個用戶賬號。 2022/7/1867在企業(yè)管理器中創(chuàng)建新的數(shù)據(jù)庫用戶 在企業(yè)管理器的控制臺中展開某個數(shù)據(jù)庫,右擊“用戶”文件夾,選擇“新建數(shù)據(jù)庫用戶”命令,在新建用戶對話框的“登錄名”下拉框中選擇要創(chuàng)建的數(shù)據(jù)庫用戶對應(yīng)的登錄名,然后在“用戶名”的文本框中鍵入數(shù)據(jù)庫用戶名。利用SQL的存儲過程來創(chuàng)建數(shù)據(jù)庫用戶 格式:SP_GRANTDBACCESS LOGINAME

36、 = 登錄用戶名,NAME_IN_DB = 數(shù)據(jù)庫用戶名 例如: SP_GRANTDBACCESS LOGINAME = user1, NAME_IN_DB = user1 2022/7/1868(3)數(shù)據(jù)庫系統(tǒng)角色管理 角色:是一組訪問權(quán)限的集合。利用角色,SQL Server管理者可以將某些用戶設(shè)置為某一角色,這樣只對角色進行權(quán)限設(shè)置便可以實現(xiàn)對所有用戶權(quán)限的設(shè)置,大大減少了管理員的工作量。SQL Server提供了服務(wù)器角色和數(shù)據(jù)庫角色。固定服務(wù)器角色:在SQL Server安裝時,系統(tǒng)自動創(chuàng)建,其權(quán)限固定??梢灾概山o登錄用戶。被指派角色的用戶可以在服務(wù)器上進行相應(yīng)角色的管理操作,完全獨

37、立于某個具體的數(shù)據(jù)庫。2022/7/1869固定服務(wù)器角色2022/7/1870固定服務(wù)器角色包括: sysadmin(系統(tǒng)管理)/擁有最高權(quán)力,可以執(zhí)行服務(wù)器范圍內(nèi)的一切操作 securityadmin(安全管理) serveradmin(服務(wù)器管理) setupadmin(啟動管理) processadmin(進程管理) diskadmin(磁盤管理) dbcreator(數(shù)據(jù)庫創(chuàng)建) bulkadmin(備份管理)可以使用SQL Server企業(yè)管理器將登錄用戶添加到某一指定的固定服務(wù)器角色作為其成員。2022/7/1871 數(shù)據(jù)庫角色數(shù)據(jù)庫角色:是為用戶授予不同級別的管理或訪問數(shù)據(jù)庫以

38、及數(shù)據(jù)庫對象的權(quán)限。數(shù)據(jù)庫角色限制在單個數(shù)據(jù)庫的范圍之內(nèi),一個數(shù)據(jù)庫用戶可以具有多個數(shù)據(jù)庫角色。SQL Server提供了兩種類型的數(shù)據(jù)庫角色:即固定的數(shù)據(jù)庫角色和用戶自定義的數(shù)據(jù)庫角色。固定數(shù)據(jù)庫角色:是指SQL Server 為每個數(shù)據(jù)庫提供的固定角色。系統(tǒng)默認創(chuàng)建10個固定的標準角色。2022/7/1872固定數(shù)據(jù)庫角色2022/7/1873固定數(shù)據(jù)庫角色名稱 角色描述db_owner 在數(shù)據(jù)庫中有全部權(quán)限。db_accessadmin 可以添加或刪除用戶ID。db_securityadmin 可以管理全部權(quán)限、對象所有權(quán)、角色 和角色成員資格。 db_ddladmin 可以發(fā)出 ALL

39、 DDL,但不能發(fā)出 GRANT、REVOKE 或 DENY 語句。 db_backupoperator 可以發(fā)出 DBCC、CHECKPOINT 和 BACKUP 語句。db_datareader 可以選擇數(shù)據(jù)庫內(nèi)任何用戶表中的所有 數(shù)據(jù)。db_datawriter 可以更改數(shù)據(jù)庫內(nèi)任何用戶表中的所有 數(shù)據(jù)。db_denydatareader 不能選擇數(shù)據(jù)庫內(nèi)任何用戶表中的任何 數(shù)據(jù)。db_denydatawriter 不能更改數(shù)據(jù)庫內(nèi)任何用戶表中的任何 數(shù)據(jù)。Public 特殊的角色,每個數(shù)據(jù)庫用戶都屬于它 2022/7/1874用戶定義數(shù)據(jù)庫角色 由用戶決定它們將包含什么許可權(quán)限。用戶定

40、義的數(shù)據(jù)庫角色種類:標準角色和應(yīng)用 程序角色標準角色(Standard Role):用于正常的用戶管理,它可以包括成員。創(chuàng)建標準用戶角色格式: USE 數(shù)據(jù)庫名 EXEC sp_addrole角色名,擁有者例:USE Study EXEC sp_addroleMyrole,dbo2022/7/1875應(yīng)用程序角色(Application Role):是一種特殊角色,在編寫數(shù)據(jù)庫的應(yīng)用程序時自己定義應(yīng)用程序角色。應(yīng)用程序的操作者本身并不需要在SQL Server上有登錄帳號以及用戶帳號,通過寫的程序來間接存取SQL Server的數(shù)據(jù)。如此可以避免操作者自行登錄SQL Server。需要指定口令

41、,是一種安全機制。當某一用戶使用了應(yīng)用程序角色時,便放棄了已被賦予的所有數(shù)據(jù)庫專有權(quán)限,所擁有的只是應(yīng)用程序角色被設(shè)置的角色。2022/7/1876(4) SQL Server權(quán)限管理權(quán)限用來控制用戶如何訪問數(shù)據(jù)庫對象通常權(quán)限可以分為三種類型:對象權(quán)限、語句權(quán)限和隱含權(quán)限。 對象權(quán)限對象權(quán)限是用于控制用戶對數(shù)據(jù)庫對象執(zhí)行某些操作的權(quán)限。數(shù)據(jù)庫對象通常包括表、視圖、存儲過程。對象權(quán)限是針對數(shù)據(jù)庫對象設(shè)置的,它由數(shù)據(jù)庫對象所有者授予、禁止或撤消。2022/7/1877對象權(quán)限適用的對象和語句操作權(quán)限數(shù)據(jù)庫對象SELECT(查詢)表、視圖、表和視圖中的列UPDATE(修改)表、視圖、表的列INSER

42、T(插入)表、視圖DELETE(刪除)表、視圖EXECUTE(調(diào)用過程)存儲過程DRI(聲明參照完整性)表、表中的列2022/7/1878使用SQL Server 企業(yè)管理器管理來實現(xiàn)對對象權(quán)限的管理,從而實現(xiàn)對用戶選項的設(shè)定。(數(shù)據(jù)庫角色-屬性)2022/7/1879 語句權(quán)限語句權(quán)限是指用戶執(zhí)行一些數(shù)據(jù)庫定義語句的權(quán)利。創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫中的項目. 語句權(quán)限用于語句本身,它只能由sa或dbo授予、禁止或撤消。2022/7/1880語句權(quán)限適用的語句和權(quán)限說明 Transact-SQL語句權(quán)限說明CREATE DATABASE創(chuàng)建數(shù)據(jù)庫CREATE DEFAULT創(chuàng)建缺省CREATE PRO

43、CEDURE創(chuàng)建存儲過程CREATE RULE創(chuàng)建規(guī)則CREATE TABLE創(chuàng)建表CREATE VIEW創(chuàng)建視圖BACKUP DATABASE備份數(shù)據(jù)庫BACKUP LOG備份日志文件2022/7/1881 設(shè)置語句權(quán)限的頁特定數(shù)據(jù)庫-屬性2022/7/1882通過Transact-SQL語句進行對象和語句的授權(quán)、收回權(quán)限和拒絕權(quán)限 對象和語句的授權(quán) 給對象授權(quán):GRANT ON TO 給語句授權(quán):GRANT TO 收回用戶對象和語句的權(quán)限 收回對象的權(quán)限:REVOKE ON FROM 收回語句的權(quán)限:REVOKE FROM 2022/7/1883 隱含權(quán)限隱含權(quán)限指系統(tǒng)預(yù)定義而不需要授權(quán)就

44、有的權(quán)限(內(nèi)置權(quán)限),包括固定服務(wù)器角色成員、固定數(shù)據(jù)庫角色成員、數(shù)據(jù)庫所有者(dbo)和數(shù)據(jù)庫對象所有者(dboo)所擁有的權(quán)限。例如,sysadmin固定服務(wù)器角色成員可以在服務(wù)器范圍內(nèi)做任何操作,dbo可以對數(shù)據(jù)庫做任何操作,dboo可以對其擁有的數(shù)據(jù)庫對象做任何操作,對他不需要明確的賦予權(quán)限。2022/7/1884用戶和角色的權(quán)限問題 用戶是否具有對數(shù)據(jù)庫存取的權(quán)力,要看其權(quán)限設(shè)置而定,但是,它還要受其角色的權(quán)限的限制。用戶權(quán)限繼承角色的權(quán)限數(shù)據(jù)庫角色中可以包含許多用戶,用戶對數(shù)據(jù)庫對象的存取權(quán)限也繼承自該角色。假設(shè)用戶User1屬于角色Role1,角色Role1已經(jīng)取得了對表Tabl

45、e1的SELECT權(quán)限,則用戶User1也自動取得對表Table1的SELECT權(quán)限。如果Role1對Table1沒有INSERT權(quán)限,而User1取得了對表Table1的INSERT權(quán)限,則User1最終也取得對表Table1的INSERT權(quán)限。而拒絕是優(yōu)先的,只要Role1和User1中的之一拒絕,則該權(quán)限就是拒絕的。 2022/7/1885用戶分屬不同角色如果一個用戶分屬于不同的數(shù)據(jù)庫角色如:用戶User1既屬于角色Role1,又屬于角色Role2,則用戶User1的權(quán)限基本上是以Role1和Role2的并集為準。2022/7/18861、什么是數(shù)據(jù)庫的完整性數(shù)據(jù)庫的完整性:是指數(shù)據(jù)庫中

46、數(shù)據(jù)的正確性、有效性和相容性。正確性:是指數(shù)據(jù)的真實合法性;有效性:是指數(shù)據(jù)的值是否屬于所定義的有效范圍;例: 學(xué)生的年齡必須是整數(shù),取值范圍為1429;學(xué)生的成績只能是大于或等于0的數(shù)字;學(xué)生的性別只能是男或女;相容性:是指表示同一事實的兩個或多個數(shù)據(jù)必須一致,不一致就是不相容。例如:學(xué)號必須惟一。3.4.2 數(shù)據(jù)庫的完整性2022/7/1887完整性:數(shù)據(jù)是否真實地反映現(xiàn)實世界,防止不合語義的數(shù)據(jù)進入數(shù)據(jù)庫。完整性受到破壞的常見原因:有用戶誤操作輸入錯誤的數(shù)據(jù),各種硬軟件故障,并發(fā)更新數(shù)據(jù),人為破壞等。2022/7/18882. 完整性約束條件與完整性控制機制為維護數(shù)據(jù)庫的完整性,DBMS

47、必須提供一種機制來檢查數(shù)據(jù)庫中的數(shù)據(jù),看其是否滿足語義規(guī)定的條件,這些加在數(shù)據(jù)庫數(shù)據(jù)之上的語義約束條件稱為數(shù)據(jù)庫的“完整性約束條件” 簡稱為“完整性約束”,它們作為模式的一部分存入數(shù)據(jù)庫中。而DBMS中保障數(shù)據(jù)滿足完整性條件的機制稱為完整性控制機制。2022/7/1889DBMS的完整性控制機制由以下幾部分功能組成:定義功能:即提供定義完整性約束條件的功能。檢查功能:即檢查用戶發(fā)出的操作請求是否違背了完整性約束條件。違約反應(yīng):如果發(fā)現(xiàn)用戶的操作請求使數(shù)據(jù)違背了完整性約束條件,則執(zhí)行一定的動作來保證數(shù)據(jù)的完整性。2022/7/18903. 完整性約束條件分類完整性約束條件可以從其作用對象的粒度和

48、狀態(tài)兩個角度進行分類。粒度:關(guān)系數(shù)據(jù)庫系統(tǒng)中,完整性約束條件的作用對象主要有列級、元組級和關(guān)系級三種粒度。狀態(tài):可以是靜態(tài)的,也可以是動態(tài)的。2022/7/1891完整性約束條件作用的對象可以是關(guān)系、元組和列三種。列約束主要是列的數(shù)據(jù)類型、取值范圍、精度、排序等約束條件。元組的約束是元組中各個字段間的聯(lián)系的約束。關(guān)系的約束是若干元組間、關(guān)系之間的聯(lián)系的約束。2022/7/1892完整性約束條件從約束對象的狀態(tài)分:靜態(tài)約束:是指數(shù)據(jù)庫每一確定狀態(tài)時的數(shù)據(jù)對象所應(yīng)滿足的約束條件。它是反映數(shù)據(jù)庫狀態(tài)合理性的約束。例如,一個教務(wù)管理數(shù)據(jù)庫的任何一個狀態(tài)都必須滿足條件“0學(xué)生成績100”。動態(tài)約束:是指

49、數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時,新舊值之間所應(yīng)滿足的約束條件。它是反映數(shù)據(jù)庫狀態(tài)變遷的約束。例如,更新職工表時,工資不能負增長。2022/7/1893綜合上述兩方面,完整性約束條件分為以下六類.(1)靜態(tài)列級約束 靜態(tài)列級約束是施加于單列數(shù)據(jù)上的約束,是對一個列的取值域的說明,包括以下幾方面:對數(shù)據(jù)類型的約束:包括數(shù)據(jù)的類型、長度、單位、精度等。對數(shù)據(jù)格式的約束: 例如:規(guī)定日期的格式為YYYYMMDD;2022/7/1894對取值范圍或取值集合的約束。例如,規(guī)定成績的取值范圍為0100。對空值的約束:空值表示未定義或未知的值,它與零值和空格不同。有的列允許空值,有的則不允許。2022/7

50、/1895(2)靜態(tài)元組約束 靜態(tài)元組約束是施加于單個關(guān)系的元組上的約束,它規(guī)定組成一個元組的各個列之間的約束關(guān)系。 例:訂貨關(guān)系中發(fā)貨量=訂貨量(3)靜態(tài)關(guān)系約束 靜態(tài)關(guān)系約束是一個關(guān)系的各個元組之間或者若干關(guān)系之間存在的各種聯(lián)系或約束。常見的靜態(tài)關(guān)系約束有以幾種:2022/7/1896實體完整性約束:實體完整性約束是指構(gòu)成關(guān)系主鍵的屬性或?qū)傩约喜荒転榭铡⒄胀暾约s束:參照完整性約束維護關(guān)系間的參照完整性不被破壞。統(tǒng)計約束:統(tǒng)計約束指一個關(guān)系的某屬性的值與該關(guān)系的多個元組的統(tǒng)計值之間的關(guān)系。 例:職工平均工資的2倍=部門經(jīng)理的工 資= 原來工資, 年齡只能增長。2022/7/1898(5

51、)動態(tài)元組約束 動態(tài)元組約束是指修改某個元組的值時需要參照其舊值,并且新舊值之間需要滿足某種約束條件。 例如,職工工資調(diào)資調(diào)整時,新工資=原來工資+工齡*1.2。(6)動態(tài)關(guān)系約束 動態(tài)關(guān)系約束是指加在關(guān)系變化前后狀態(tài)上的限制條件。動態(tài)關(guān)系約束實現(xiàn)起來開銷較大。2022/7/18994.實現(xiàn)參照完整性考慮的問題(1)刪除被參照關(guān)系的元組時的問題 刪除被參照關(guān)系的某個元組而參照關(guān)系有若干元組的外碼值與被刪除的被參照關(guān)系的主碼值相同 例1:學(xué)生選課數(shù)據(jù)庫 要刪除Student關(guān)系中Sno=950001的元組,而SC關(guān)系中又有4個元組的Sno都等于950001。2022/7/18100 系統(tǒng)可有三種

52、策略級聯(lián)刪除(CASCADES)受限刪除(RESTRICTED)置空值刪除(NULLIFIES)這三種處理方法,哪一種是正確的,要依應(yīng)用環(huán)境的語義來定2022/7/18101級聯(lián)刪除將參照關(guān)系中外碼值與被參照關(guān)系中要刪除元組主碼值相對應(yīng)的元組一起刪除。例1中將SC關(guān)系中所有4個Sno=950001的元組一起刪除。如果參照關(guān)系同時又是另一個關(guān)系的被參照關(guān)系,則這種刪除操作會繼續(xù)級聯(lián)下去 受限刪除當參照關(guān)系中沒有任何元組的外碼值與要刪除的被參照關(guān)系的元組的主碼值相對應(yīng)時,系統(tǒng)才執(zhí)行刪除操作,否則拒絕此刪除操作例1中,系統(tǒng)將拒絕執(zhí)行此刪除操作。 2022/7/18102置空值刪除刪除被參照關(guān)系的元組

53、,并將參照關(guān)系中與被參照關(guān)系中被刪除元組主碼值相等的外碼值置為空值。置空值刪除:將SC關(guān)系中所有Sno=950001的元組的Sno值置為空值。在學(xué)生選課數(shù)據(jù)庫中,只有第一種方法是對的。另外兩種方法不符合應(yīng)用環(huán)境語義。如一個同學(xué)退學(xué)其所有元組會被全部刪除。(2)修改被參照關(guān)系中主碼的問題 系統(tǒng)所采取的三種策略與刪除類似2022/7/181035. 數(shù)據(jù)完整性約束的定義方法 在具體的DBMS中,定義數(shù)據(jù)完整性約束一般是在服務(wù)器端完成的,其定義方法通常有兩種:(1)聲明式定義 即通過聲明的方式定義完整性,如實體完整性約束、一些簡單的域約束都是通過聲明的方式定義。2022/7/18104例1:在學(xué)生選

54、課數(shù)據(jù)庫中建立表的約束,當對主表student進行更新或刪除操作時,對從表sc采用級聯(lián)操作;當對主表course進行更新或刪除操作時,對從表sc采用cascade, no action方式(用SQL Server 實現(xiàn))。Create table student(sno char(9) primary key,sname)Create table course (cno char(4) primary key,sname)2022/7/18105Create table sc(sno char(9) CONSTRAINT PK_SNOforeign key (sno) references s

55、tudent(sno) on delete cascade on update cascade,cno char(4) CONSTRAINT PK_CNO foreign key (cno) references course(cno) on delete no action on update no action ,Grade smallint );-cascade表示主從表刪除時一致,進行級聯(lián)刪除-no action 表示回滾主表的刪除操作,為默認設(shè)置2022/7/18106(2)過程式定義 即通過編寫特殊的程序,如觸發(fā)器(Trigger)來定義和實現(xiàn)完整性控制,觸發(fā)器是用戶編寫的一系列S

56、QL語句組成的程序,當對數(shù)據(jù)庫做修改(包括插入、刪除和更新)時,它自動被系統(tǒng)執(zhí)行,以實現(xiàn)一些用戶自定義的完整性約束。2022/7/18107例2:對于數(shù)據(jù)庫中的數(shù)據(jù)表sc,創(chuàng)建一個觸發(fā)器,插入記錄時,當字段grade小于60時,自動改為0(用SQL Server 實現(xiàn))。CREATE TRIGGER sc_grade ON scFOR insertAS beginupdate sc set grade =0 where grade=0 AND Grade= 18 and age 1 beginprint Cannot insertrollback transaction end2022/7/1

57、8145INSTEAD OF觸發(fā)器可以在表和視圖上定義INSTEAD OF觸發(fā)器。INSTEAD OF觸發(fā)器代替原觸發(fā)動作執(zhí)行,增加了視圖上所能進行的更新的種類。每個表上對每個觸發(fā)動作(INSERT、UPDATE或DELETE)只能定義一個INSTEAD OF觸發(fā)器。不能在具有WITH CHECK OPTION選項的視圖上創(chuàng)建INSTEAD OF觸發(fā)器。2022/7/18146例:創(chuàng)建一個包括學(xué)生和教師編號、姓名以及類別的視圖,在視圖上建立更新觸發(fā)器,可通過視圖更新結(jié)果返回到源基本表中。 create view s_t(ID,Name,Type) as SELECT gh , xm, teac

58、her FROM js UNION SELECT xh , xm, student FROM xs2022/7/18147CREATE TRIGGER s_t_updateON s_tINSTEAD OF UPDATEASbegin IF UPDATE(Name) begin declare ID varchar(255),name varchar(255), type varchar(15) select ID=ID,name=name,type=type from inserted if type=student update xs set xm=name where xh=ID if t

59、ype=teacher update js set xm=name where gh=ID endend2022/7/181481.插入選課記錄時,檢查若該門課選課人數(shù)已滿50人,則拒絕插入。CREATE TRIGGER SC_insert ON SC AFTER INSERTASIF(SELECT COUNT(*) FROM SC ,INSERTED WHERE SC.CNO=INSERTED.CNO )50 BEGINPRINT 選課已滿ROLLBACK transactionEND練習(xí)2022/7/181492.使用觸發(fā)器實現(xiàn)級聯(lián)刪除。CREATE TRIGGER student_del

60、ete ON sAFTER DELETE AS DELETE FROM sc WHERE sno in (select sno from deleted) 它的作用是在student表中刪除某學(xué)生記錄后,能自動(級聯(lián))地從sc表中刪去有關(guān)該學(xué)生的選課記錄。2022/7/181503.在訂單表(ORDER)中插入或修改訂購數(shù)量(NUM),必須滿足客戶相應(yīng)等級的數(shù)量上限和下限。CUSTOMERCUSTOMERLEVELORDER2022/7/18151CREATE TRIGGER CHECK_NUM ON ORDER AFTER INSERT, UPDATEASIF UPDATE(NUM)BEGI

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論