




已閱讀5頁(yè),還剩46頁(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)介
第 五 章 數(shù)據(jù)庫(kù)安全保護(hù),數(shù)據(jù)庫(kù)系統(tǒng)中的數(shù)據(jù)是由DBMS統(tǒng)一進(jìn)行管理和控制的。 為了適應(yīng)和滿足數(shù)據(jù)共享的環(huán)境和要求,DBMS要保證整個(gè)系統(tǒng)的正常運(yùn)轉(zhuǎn),防止數(shù)據(jù)意外丟失和不一致數(shù)據(jù)的產(chǎn)生,以及當(dāng)數(shù)據(jù)庫(kù)遭受破壞后能迅速地恢復(fù)正常,這就是數(shù)據(jù)庫(kù)的安全保護(hù)。 DBMS對(duì)數(shù)據(jù)庫(kù)的安全保護(hù)功能是通過(guò)四方面實(shí)現(xiàn)的,即安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)庫(kù)恢復(fù)。,第 五 章 數(shù)據(jù)庫(kù)安全保護(hù),5.1 數(shù)據(jù)庫(kù)安全性 5.2 完整性控制 5.3 并發(fā)控制 5.4 數(shù)據(jù)庫(kù)的恢復(fù),5.1 數(shù)據(jù)庫(kù)安全性,數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞。 安全性控制的一般方法 對(duì)有意的非法活動(dòng)可采用加密存、取數(shù)據(jù)的方法控制; 對(duì)有意的非法操作可使用用戶身份驗(yàn)證、限制操作權(quán)來(lái)控制; 對(duì)無(wú)意的損壞可采用提高系統(tǒng)的可靠性和數(shù)據(jù)備份等方法來(lái)控制。,5.1 數(shù)據(jù)庫(kù)安全性,圖5-1 計(jì)算機(jī)系統(tǒng)的安全控制模型,5.1 數(shù)據(jù)庫(kù)安全性,根據(jù)圖5.1的安全模型,當(dāng)用戶進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)時(shí),系統(tǒng)首先根據(jù)輸入的用戶標(biāo)識(shí)進(jìn)行身份的鑒定,只有合法的用戶才準(zhǔn)許進(jìn)入系統(tǒng)。 對(duì)已進(jìn)入系統(tǒng)的用戶,DBMS還要驗(yàn)證此用戶是否具有操作權(quán),有操作權(quán)才能進(jìn)行操作。 DBMS是建立在操作系統(tǒng)之上的,在操作系統(tǒng)一級(jí)設(shè)有相應(yīng)的保護(hù)措施,比如設(shè)置文件的訪問(wèn)權(quán)限。 數(shù)據(jù)可以通過(guò)加密的形式存儲(chǔ)到數(shù)據(jù)庫(kù)中,5.1 數(shù)據(jù)庫(kù)安全性,一. 用戶身份驗(yàn)證 用一個(gè)用戶名或用戶標(biāo)識(shí)符來(lái)標(biāo)明用戶的身份,系統(tǒng)以此來(lái)鑒別用戶的合法性。如果正確,則可進(jìn)入下一步的核實(shí),否則,不能使用計(jì)算機(jī)。 用戶標(biāo)識(shí)符是用戶公開(kāi)的標(biāo)識(shí),它不足以成為鑒別用戶身份的憑證。為了進(jìn)一步核實(shí)用戶身份,常采用用戶名與口令(Password)相結(jié)合的方法,系統(tǒng)通過(guò)核對(duì)口令判別用戶身份的真?zhèn)巍?系統(tǒng)有一張用戶口令表,為每個(gè)用戶保持一個(gè)記錄,包括用戶名和口令兩部分?jǐn)?shù)據(jù)。 用戶先輸入用戶名,然后系統(tǒng)要求用戶輸入口令。 為了保密,用戶在終端上輸入的口令不顯示在屏幕上。 系統(tǒng)核對(duì)口令以鑒別用戶身份。,5.1 數(shù)據(jù)庫(kù)安全性,一. 用戶身份驗(yàn)證,通過(guò)用戶名和口令來(lái)鑒定用戶的方法簡(jiǎn)單易行,但該方法在使用時(shí),由于用戶名和口令的產(chǎn)生和使用比較簡(jiǎn)單,也容易被竊取,因此還可采用更復(fù)雜的方法。,例如,每個(gè)用戶都預(yù)先約定好一個(gè)過(guò)程或者函數(shù),鑒別用戶身份時(shí),系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶根據(jù)自己預(yù)先約定的計(jì)算過(guò)程或者函數(shù)進(jìn)行計(jì)算,系統(tǒng)根據(jù)計(jì)算結(jié)果辨別用戶身份的合法性。 例如,讓用戶記住一個(gè)表達(dá)式,如T=X+2Y,系統(tǒng)告訴用戶X=1,Y=2,如果用戶回答T=5,則證實(shí)了該用戶的身份。 當(dāng)然,這是一個(gè)簡(jiǎn)單的例子,在實(shí)際使用中,還可以設(shè)計(jì)復(fù)雜的表達(dá)式,以使安全性更好。系統(tǒng)每次提供不同的X,Y值,其他人可能看到的是X、Y的值,但不能推算出確切的變換公式T。,5.1 數(shù)據(jù)庫(kù)安全性,二. 用戶操作權(quán)限管理,1.權(quán)限的種類(lèi) 對(duì)數(shù)據(jù)庫(kù)管理系統(tǒng)進(jìn)行維護(hù)的權(quán)限 對(duì)數(shù)據(jù)庫(kù)中的對(duì)象和數(shù)據(jù)進(jìn)行操作的權(quán)限 對(duì)數(shù)據(jù)庫(kù)對(duì)象的權(quán)限,包括創(chuàng)建、刪除和修改數(shù)據(jù)庫(kù)對(duì)象 對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的操作權(quán),包括對(duì)表、視圖數(shù)據(jù)的增、刪、改、查權(quán) 2.數(shù)據(jù)庫(kù)用戶的分類(lèi) (1)數(shù)據(jù)庫(kù)系統(tǒng)管理員:具有一切權(quán)限。 (2)數(shù)據(jù)庫(kù)對(duì)象擁有者:對(duì)其所擁有的對(duì)象具有一切權(quán)限。 (3)普通用戶:只具有對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的增、刪、改、查權(quán)。,5.2 完整性控制,一. 數(shù)據(jù)庫(kù)完整性的含義 數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容 性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)造成無(wú)效操作。,有關(guān)完整性的含義在第一章中已作簡(jiǎn)要介紹。 比如年齡屬于數(shù)值型數(shù)據(jù),只能含0,1,9,不能含字母或 特殊符號(hào); 月份只能用112之間的正整數(shù)表示; 表示同一事實(shí)的兩個(gè)數(shù)據(jù)應(yīng)相同,否則就不相容,如一個(gè)人 不能有兩個(gè)學(xué)號(hào)。,顯然,維護(hù)數(shù)據(jù)庫(kù)的完整性非常重要,數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否具備 完整性關(guān)系到數(shù)據(jù)能否真實(shí)地反映現(xiàn)實(shí)世界。,5.2 完整性控制,數(shù)據(jù)庫(kù)的完整性和安全性是數(shù)據(jù)庫(kù)保護(hù)的兩個(gè)不同的方面。 安全性是保護(hù)數(shù)據(jù)庫(kù),以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞,安全性措施的防范對(duì)象是非法用戶和非法操作; 完整性是防止合法用戶使用數(shù)據(jù)庫(kù)時(shí)向數(shù)據(jù)庫(kù)中加入不符合語(yǔ)義的數(shù)據(jù),完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。 但從數(shù)據(jù)庫(kù)的安全保護(hù)角度來(lái)講,安全性和完整性又是密切相關(guān)的。,5.2 完整性控制,二. 完整性規(guī)則的組成 為了實(shí)現(xiàn)完整性控制,數(shù)據(jù)庫(kù)管理員應(yīng)向DBMS提出一組完整性規(guī)則,來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù),看其是否滿足語(yǔ)義約束。 這些語(yǔ)義約束構(gòu)成了數(shù)據(jù)庫(kù)的完整性規(guī)則,這組規(guī)則作為DBMS控制數(shù)據(jù)完整性的依據(jù)。 它定義了何時(shí)檢查、檢查什么、查出錯(cuò)誤又怎樣處理等事項(xiàng)。 具體地說(shuō),完整性規(guī)則主要由以下三部分構(gòu)成: 1 觸發(fā)條件:規(guī)定系統(tǒng)什么時(shí)候使用規(guī)則檢查數(shù)據(jù); 2 約束條件:規(guī)定系統(tǒng)檢查用戶發(fā)出的操作請(qǐng)求違背了什么樣的完整性約束條件; 3 違約響應(yīng):規(guī)定系統(tǒng)如果發(fā)現(xiàn)用戶的操作請(qǐng)求違背了完整性約束條件,應(yīng)該采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性,即違約時(shí)要做的事情。,5.2 完整性控制,關(guān)系模型的完整性包括實(shí)體完整性,參照完整性和用戶定義完整性。 對(duì)于違反實(shí)體完整性和用戶定義完整性規(guī)則的操作一般都是采用拒絕執(zhí)行的方式進(jìn)行處理。 而對(duì)于違反參照完整性的操作,并不都是簡(jiǎn)單的拒絕執(zhí)行,一般在接受這個(gè)操作的同時(shí),執(zhí)行一些附加的操作,以保證數(shù)據(jù)庫(kù)的狀態(tài)仍然是正確的。 例如:在刪除被參照關(guān)系中的元組時(shí),應(yīng)該將參照關(guān)系中所有的外碼值與被參照關(guān)系中要?jiǎng)h除元組主碼值相對(duì)應(yīng)的元組一起刪除。 比如,要?jiǎng)h除S關(guān)系中SNO=S1的元組,而SC關(guān)系中又有兩個(gè)SNO=S1的元組。 這時(shí)根據(jù)應(yīng)用環(huán)境的語(yǔ)義,因?yàn)楫?dāng)一個(gè)學(xué)生畢業(yè)或退學(xué)后,他的個(gè)人記錄從S關(guān)系中刪除,選課記錄也應(yīng)隨之從SC表中刪除,所以應(yīng)該將SC關(guān)系中兩個(gè)SNO=S1的元組一起刪除。,5.2 完整性控制,數(shù)據(jù)完整性的實(shí)現(xiàn)一般是在服務(wù)器端完成的 服務(wù)器端實(shí)現(xiàn)數(shù)據(jù)完整性的方法: 在定義表的時(shí)候聲明數(shù)據(jù)完整性 在服務(wù)器端編寫(xiě)觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)完整性 一旦進(jìn)入系統(tǒng),就開(kāi)始執(zhí)行數(shù)據(jù)完整性規(guī)則。 其主要優(yōu)點(diǎn)是違約由系統(tǒng)來(lái)處理,而不是由用戶處理。 數(shù)據(jù)庫(kù)系統(tǒng)的整個(gè)完整性控制都是圍繞著完整性約束條件進(jìn)行的,從這個(gè)角度來(lái)看,完整性約束條件是完整性控制機(jī)制的核心。,5.2 完整性控制,三. 完整性約束條件的作用對(duì)象,完整性約束條件的作用對(duì)象可以是表、元組和列。,1.列級(jí)約束:即對(duì)數(shù)據(jù)類(lèi)型、數(shù)據(jù)格式、取值范圍等進(jìn)行規(guī)定。 對(duì)數(shù)據(jù)類(lèi)型的約束,包括數(shù)據(jù)的類(lèi)型、長(zhǎng)度、單位和精度等。 例如,規(guī)定學(xué)生姓名的數(shù)據(jù)類(lèi)型應(yīng)為字符型,長(zhǎng)度為8。 對(duì)數(shù)據(jù)格式的約束。 例如,規(guī)定出生日期的數(shù)據(jù)格式為YY.MM.DD。 對(duì)取值范圍的約束。 例如,月份的取值范圍為112,日期131 對(duì)空值的約束??罩当硎疚炊x或未知的值,它與零值 空格不同。有的列值允許空值,有的則不允許。 例如,學(xué)號(hào)和課程號(hào)不可以為空值,但成績(jī)可以為空值,5.2 完整性控制,三. 完整性約束條件的作用對(duì)象,2.元組約束 元組的約束是元組中各個(gè)字段之間的聯(lián)系的約束,如:開(kāi)始日期小于結(jié)束日期,職工的最低工資不能低于規(guī)定的最低保障金等。 3.關(guān)系約束 關(guān)系約束是指若干元組之間、關(guān)系之間的聯(lián)系的約束。比如學(xué)號(hào)的取值不能重復(fù)也不能取空值,學(xué)生修課表中的學(xué)號(hào)的取值受學(xué)生表中的學(xué)號(hào)取值的約束等 。,5.3 并發(fā)控制,每個(gè)用戶在存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)時(shí),可能是串行執(zhí)行,即每個(gè)時(shí)刻只有一個(gè)用戶程序運(yùn)行,也可能是多個(gè)用戶并行地存取數(shù)據(jù)庫(kù)。 數(shù)據(jù)庫(kù)的最大特點(diǎn)之一就是數(shù)據(jù)資源是共享的,串行執(zhí)行意味著一個(gè)用戶在運(yùn)行程序時(shí),其他用戶程序必須等到這個(gè)用戶程序結(jié)束才能對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取,這樣如果一個(gè)用戶程序涉及大量數(shù)據(jù)的輸入/輸出交換,則數(shù)據(jù)庫(kù)系統(tǒng)的大部分時(shí)間將處于閑置狀態(tài)。,因此,為了充分利用數(shù)據(jù)庫(kù)資源,很多時(shí)候數(shù)據(jù)庫(kù)用戶都是對(duì) 數(shù)據(jù)庫(kù)系統(tǒng)并行存取數(shù)據(jù),這樣就會(huì)發(fā)生多個(gè)用戶并發(fā)存取同一 數(shù)據(jù)塊的情況,如果對(duì)并發(fā)操作不加控制可能會(huì)產(chǎn)生不正確的數(shù) 據(jù),破壞數(shù)據(jù)的完整性,并發(fā)控制就是解決這類(lèi)問(wèn)題,以保持?jǐn)?shù) 據(jù)庫(kù)中數(shù)據(jù)的一致性,即在任何一個(gè)時(shí)刻數(shù)據(jù)庫(kù)都將以相同的形式 給用戶提供數(shù)據(jù)。,5.3 并發(fā)控制,一. 事務(wù)(Transaction),事務(wù)是用戶定義的數(shù)據(jù)操作系列,這些操作作為一個(gè)完整的工作單元. 一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條SQL語(yǔ)句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。 一個(gè)事務(wù)內(nèi)的所有語(yǔ)句被作為一個(gè)整體,要么全部執(zhí)行,要么全部不執(zhí)行。 例如:對(duì)于一個(gè)轉(zhuǎn)帳活動(dòng):A帳戶轉(zhuǎn)帳給B帳戶n元錢(qián),這個(gè)活動(dòng)包含兩個(gè)動(dòng)作: 第一個(gè)動(dòng)作:A帳戶 n 第二個(gè)動(dòng)作:B帳戶 n,1. 事務(wù)的定義,5.3 并發(fā)控制,事務(wù)的開(kāi)始與結(jié)束可以由用戶顯式控制。如果用戶沒(méi)有顯式地定義事務(wù),則由DBMS按照缺省規(guī)定自動(dòng)劃分事務(wù)。 在SQL語(yǔ)言中,定義事務(wù)的語(yǔ)句有三條: BEGIN TRANSACTION:表示事務(wù)的開(kāi)始; COMMIT(提交):表示事務(wù)的正常結(jié)束,即此時(shí)事務(wù)中所有操作都會(huì)保存到物理數(shù)據(jù)庫(kù)中,成為永久操作 ROLLBACK(回滾):表示事務(wù)的異常結(jié)束,在事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的更新操作全部撤銷(xiāo),再回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。,例: BEGIN TRANSACTION UPDATE 支付表 SET 帳戶總額 帳戶總額 n WHERE 帳戶名 A UPDATE 支付表 SET 帳戶總額 帳戶總額 n WHERE 帳戶名 B COMMIT,5.3 并發(fā)控制,2. 事務(wù)的特征 事務(wù)是由有限的數(shù)據(jù)操作序列組成,但并不是任意的數(shù)據(jù)操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要求事務(wù)具有以下四個(gè)特征: 原子性(Atomic):是指一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守“要么不做,要么全做”的原則,即不允許事務(wù)部分的完成。 一致性(Consistency):是指事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。例如前面的轉(zhuǎn)帳如果只執(zhí)行其中一個(gè)操作,則數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),帳務(wù)會(huì)出現(xiàn)問(wèn)題。也就是說(shuō),兩個(gè)操作要么全做,要么全不做,否則就不能成為事務(wù)。,5.3 并發(fā)控制,2. 事務(wù)的特征,隔離性(Isolation):指數(shù)據(jù)庫(kù)中一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的。并發(fā)控制就是為了保證事務(wù)間的隔離性。 持久性(Durability):指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。,5.3 并發(fā)控制,二.并發(fā)操作與數(shù)據(jù)的不一致性,例并發(fā)訂票操作。假設(shè)有兩個(gè)飛機(jī)訂票點(diǎn)A和B,如果A和B兩個(gè)訂票點(diǎn)恰巧同時(shí)辦理同一架航班的飛機(jī)訂票業(yè)務(wù)。該航班目前的機(jī)票余額數(shù)R =10張,A訂票點(diǎn)(事務(wù)A)賣(mài)出6張機(jī)票, B訂票點(diǎn)(事務(wù)B))賣(mài)出5張機(jī)票,如果正常操作,即事務(wù)A執(zhí)行完畢再執(zhí)行事務(wù)B ,則飛機(jī)票時(shí)不夠的。但是如果按照如下順序操作,則會(huì)有不同的結(jié)果: A訂票點(diǎn)(事務(wù)A)讀出航班目前的機(jī)票余額數(shù)R =10張; B訂票點(diǎn)(事務(wù)B)讀出航班目前的機(jī)票余額數(shù)R =10張; A訂票點(diǎn)賣(mài)出6張機(jī)票,修改機(jī)票余額數(shù)R =106=4,把R =4寫(xiě) 回到數(shù)據(jù)庫(kù); B訂票點(diǎn)賣(mài)出5張機(jī)票,修改機(jī)票余額數(shù)R =105=5,把R =5寫(xiě) 回到數(shù)據(jù)庫(kù);,結(jié)果數(shù)據(jù)庫(kù)中的票數(shù)卻只少了5張,得到這種錯(cuò)誤的結(jié)果是由兩個(gè)事務(wù) 并發(fā)操作引起的.,5.3 并發(fā)控制,數(shù)據(jù)庫(kù)的并發(fā)操作導(dǎo)致的數(shù)據(jù)庫(kù)不一致性主要 有以下四種:,丟失修改(Lost Update),污讀(Dirty Read),不可重讀(Unrepeatable Read),產(chǎn)生“幽靈”數(shù)據(jù),5.3 并發(fā)控制,1丟失修改(Lost Update) 當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)做修改,并發(fā)執(zhí)行時(shí), T2把T1或T1把T2的修改結(jié)果覆蓋掉。,5.3 并發(fā)控制,2污讀(Dirty Read) 事務(wù)T1更新了數(shù)據(jù)R,事務(wù)T2讀取了更新后的數(shù)據(jù)R,事務(wù)T1由于某種原因被撤消,修改無(wú)效,數(shù)據(jù)R恢復(fù)原值。事務(wù)T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致,這種情況稱為“污讀”。,5.3 并發(fā)控制,3不可重讀(Unrepeatable Read) 事務(wù)T1讀取了數(shù)據(jù)后,事務(wù)T2更新了T1讀取的數(shù)據(jù),當(dāng)事務(wù)T1再讀取數(shù)據(jù)以進(jìn)行相同操作時(shí),得到的兩次值不一致,這種情況稱為“不可重讀”。,5.3 并發(fā)控制,4. 產(chǎn)生“幽靈”數(shù)據(jù) 實(shí)際屬于不可重復(fù)讀的范疇。指當(dāng)事務(wù)T1按一定條件從數(shù)據(jù)庫(kù)中讀取了某些數(shù)據(jù)記錄后,事務(wù)T2刪除了其中的部分記錄,或者在其中添加了部分記錄,則當(dāng)T1再次按相同條件讀取數(shù)據(jù)時(shí),發(fā)現(xiàn)其中莫名其妙地少了(對(duì)刪除)或多了(對(duì)插入)一些記錄。這樣的數(shù)據(jù)對(duì)T1來(lái)說(shuō)就是“幽靈”數(shù)據(jù)或稱“幻影”數(shù)據(jù)。,產(chǎn)生上述四類(lèi)數(shù)據(jù)不一致性的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。 并發(fā)控制就是要求DBMS提供并發(fā)控制功能以正確的方法調(diào)度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫(kù)的完整性。,5.3 并發(fā)控制,三.并發(fā)控制措施,并發(fā)控制的主要方式是封鎖機(jī)制,即加鎖(Locking)。 加鎖就是事務(wù)T在對(duì)某個(gè)數(shù)據(jù)操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后事務(wù)T對(duì)其要操作的數(shù)據(jù)具有了一定的控制權(quán),在事務(wù)T釋放它的鎖之前,其他事務(wù)不能操作這些數(shù)據(jù)。,5.3 并發(fā)控制,共享鎖(Share Lock,又稱讀鎖,,簡(jiǎn)稱為S鎖) 其采用的原理是允許其他用戶對(duì)同一數(shù)據(jù)對(duì)象進(jìn)行查詢,但不能對(duì)該數(shù)據(jù)對(duì)象進(jìn)行修改。 事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加了S鎖,則事務(wù)T可以讀A,但不能修改A,其它事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放了A上的S鎖。 這就保證了其他事務(wù)在T釋放R上的S鎖之前,只能讀取R,而不能再對(duì)R作任何修改。,基本的封鎖類(lèi)型有兩種:排它鎖和共享鎖 排它鎖(Exclusive Lock,又稱寫(xiě)鎖,簡(jiǎn)稱為X鎖) 其采用的原理是禁止并發(fā)操作。 事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加了X鎖,則允許T讀取和修改A,但不允許其它事務(wù)再對(duì)A加任何類(lèi)型的鎖和進(jìn)行任何操作。,5.3 并發(fā)控制,四.封鎖協(xié)議,封鎖可以保證合理的進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。 在封鎖時(shí),要考慮一定的封鎖規(guī)則,例如,何時(shí)開(kāi)始封鎖、封鎖多長(zhǎng)時(shí)間、何時(shí)釋放等,這些封鎖規(guī)則稱為封鎖協(xié)議。 對(duì)封鎖方式規(guī)定不同的規(guī)則,就形成了各種不同的封鎖協(xié)議。 封鎖協(xié)議在不同程序上對(duì)正確控制并發(fā)操作提供了一定的保證。 上面講述過(guò)的并發(fā)操作所帶來(lái)的丟失更新、污讀和不可重讀等數(shù)據(jù)不一致性問(wèn)題,可以通過(guò)三級(jí)封鎖協(xié)議在不同程度上給予解決。,5.3 并發(fā)控制,1一級(jí)封鎖協(xié)議 規(guī)則是:事務(wù)T在修改數(shù)據(jù)對(duì)象之前必須對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束時(shí)才釋放鎖。 一級(jí)封鎖協(xié)議可以防止丟失修改。 一級(jí)封鎖協(xié)議只有當(dāng)修改數(shù)據(jù)時(shí)才進(jìn)行加鎖,如果只是讀取數(shù)據(jù)并不加鎖,所以它不能防止“污讀”和“重讀”數(shù)據(jù)。 例:事務(wù)T要對(duì)A進(jìn)行修改,因此在讀A之前先對(duì)A加X(jué)鎖其它事務(wù)必須等待,5.3 并發(fā)控制,一級(jí)封鎖協(xié)議舉例,5.3 并發(fā)控制,2二級(jí)封鎖協(xié)議 規(guī)則是:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后釋放S鎖。 二級(jí)封鎖協(xié)議除了可以防止丟失修改外,還可以防止讀“臟”數(shù)據(jù)。 在二級(jí)封鎖協(xié)議協(xié)議中,由于事務(wù)T讀完數(shù)據(jù)即釋放S鎖,因此,不能保證可重復(fù)讀數(shù)據(jù)。,5.3 并發(fā)控制,二級(jí)封鎖協(xié)議舉例,5.3 并發(fā)控制,3三級(jí)封鎖協(xié)議 規(guī)則是:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后并不釋放S鎖,而直到事務(wù)T結(jié)束才釋放。 三級(jí)封鎖協(xié)議除了可以防止更新丟失問(wèn)題和“污讀”數(shù)據(jù)外,還可進(jìn)一步防止不可重讀數(shù)據(jù),徹底解決了并發(fā)操作所帶來(lái)的三個(gè)不一致性問(wèn)題。,5.3 并發(fā)控制,三級(jí)封鎖協(xié)議舉例,5.3 并發(fā)控制,總結(jié):,三個(gè)封鎖協(xié)議的主要區(qū)別在于:什么操作需要申請(qǐng)封鎖,以及何時(shí)釋放鎖。,5.3 并發(fā)控制,五.死鎖,圖68,封鎖技術(shù)可有效解決并行操作的一致性問(wèn)題,但也可產(chǎn)生新的問(wèn)題,即死鎖問(wèn)題。 在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)在它能夠進(jìn)行之前,都等待著某個(gè)數(shù)據(jù)、而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(tài)稱為死鎖。,5.3 并發(fā)控制,例如,事務(wù)T1封鎖了數(shù)據(jù)R1,事務(wù)T2封鎖了數(shù)據(jù)R2,然后T1又請(qǐng)求封鎖R2,由于T2封鎖了R2,因此T1等待T2釋放R2上的鎖,然后T2又請(qǐng)求封鎖R1 ,由于T1已經(jīng)封鎖了R1,因此T2也只能等待T1釋放R2上的鎖,此時(shí)T1和T2都在等待對(duì)方先釋放鎖,因而形成死鎖。,5.3 并發(fā)控制,圖68,死鎖一旦發(fā)生,系統(tǒng)效率將會(huì)大大下降,因而要盡量避免死鎖的發(fā)生。,(1)一次封鎖法:每個(gè)事務(wù)一次將所有要使用的數(shù)據(jù)全部依次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有已加鎖成功的數(shù)據(jù)對(duì)象,然后重新開(kāi)始從頭加鎖。,預(yù)防死鎖的方法有多種,常用的方法有兩種:,一次加鎖法,前面發(fā)生死鎖的例子,可以通過(guò)一次加鎖法加以預(yù)防。 事務(wù)T1啟動(dòng)后,立即對(duì)數(shù)據(jù)R1和R2依次加鎖,加鎖成功后,執(zhí)行T1,而事務(wù)T2等待。 直到T1執(zhí)行完后釋放R1和R2上的鎖,T2繼續(xù)執(zhí)行。這樣就不會(huì)發(fā)生死鎖。 一次加鎖法雖然可以有效地預(yù)防死鎖的發(fā)生,但也存在一些問(wèn)題。 對(duì)某一事務(wù)所要使用的全部數(shù)據(jù)一次性加鎖,擴(kuò)大了封鎖的范圍,從而降低了系統(tǒng)的并發(fā)度。 數(shù)據(jù)庫(kù)中的數(shù)據(jù)是不斷變化的,原來(lái)不要求封鎖的數(shù)據(jù),在執(zhí)行過(guò)程中可能會(huì)變成封鎖對(duì)象,所以很難事先精確地確定每個(gè)事務(wù)所要封鎖的數(shù)據(jù)對(duì)象,這樣只能在開(kāi)始擴(kuò)大封鎖范圍,將可能要封鎖的數(shù)據(jù)全部加鎖,這就進(jìn)一步降低了并發(fā)度,影響了系統(tǒng)的運(yùn)行效率。,5.3 并發(fā)控制,5.3 并發(fā)控制,圖68,(2)順序封鎖法:是預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,在釋放時(shí),按逆序進(jìn)行。 例如對(duì)于前面發(fā)生的死鎖,我們可以規(guī)定封鎖順序?yàn)镽1、R2,事務(wù)T1和T2都需要按此順序加鎖。T1先封鎖R1,再封鎖R2。當(dāng)T2再請(qǐng)求封鎖R1時(shí),因?yàn)門(mén)1已經(jīng)對(duì)R1加鎖,T2只能等待。待T1釋放R1后,T2再封鎖R1,則不會(huì)發(fā)生死鎖。 順序加鎖法同一次加鎖法一樣,也存在一些問(wèn)題。因?yàn)槭聞?wù)的封鎖請(qǐng)求可以隨著事務(wù)的執(zhí)行而動(dòng)態(tài)地決定,所以很難事先確定封鎖對(duì)象,從而更難確定封鎖順序。即使確定了封鎖順序,隨著數(shù)據(jù)操作的不斷變化,維護(hù)這些數(shù)據(jù)的封鎖順序要需要很大的系統(tǒng)開(kāi)銷(xiāo)。,5.3 并發(fā)控制,上述兩種在操作系統(tǒng)中廣泛使用的預(yù)防死鎖的方法并不很適合數(shù)據(jù)庫(kù)的特點(diǎn)。 一般情況下,在數(shù)據(jù)庫(kù)系統(tǒng)中,可以允許發(fā)生死鎖,在死鎖發(fā)生后可以自動(dòng)診斷并解除死鎖。 數(shù)據(jù)庫(kù)系統(tǒng)中診斷死鎖的方法與操作系統(tǒng)類(lèi)似。,如果已經(jīng)發(fā)現(xiàn)死鎖,DBA從依賴相同資源的事務(wù)中抽出某個(gè)事務(wù)作為犧牲品,將它撤銷(xiāo),解除它的所有封鎖,釋放此事務(wù)占用的所有數(shù)據(jù)資源,分配給其他事務(wù),使其他事務(wù)得以繼續(xù)運(yùn)行下去,這樣就有可能消除死鎖。 在解除死鎖的過(guò)程中,抽取犧牲事務(wù)的標(biāo)準(zhǔn)是根據(jù)系統(tǒng)狀態(tài)及其應(yīng)用的實(shí)際情況來(lái)確定的,通常采用的方法之一是選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷(xiāo)。 不重要的用戶,取消其操作,釋放封鎖的數(shù)據(jù),恢復(fù)對(duì)數(shù)據(jù)庫(kù)所作的改變。,5.4 數(shù)據(jù)庫(kù)的恢復(fù),圖68,一.數(shù)據(jù)庫(kù)備份,數(shù)據(jù)庫(kù)備份指定期或不定期地對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行復(fù)制,可以將數(shù)據(jù)復(fù)制到本地機(jī)器上,也可以復(fù)制到其它機(jī)器上,備份的介質(zhì)可以是磁帶也可以是磁盤(pán)。 在制定備份策略時(shí),應(yīng)考慮如下幾個(gè)方面: 備份的內(nèi)容 備份數(shù)據(jù)庫(kù)應(yīng)備份數(shù)據(jù)庫(kù)中的表(結(jié)構(gòu))、數(shù)據(jù)庫(kù)用戶(包括用戶和用戶操作權(quán))、用戶定義的數(shù)據(jù)庫(kù)對(duì)象和數(shù)據(jù)庫(kù)中的全部數(shù)據(jù)。而且還應(yīng)該備份數(shù)據(jù)庫(kù)日志等內(nèi)容。 備份頻率 不同的數(shù)據(jù)庫(kù)管理系統(tǒng)提供的備份種類(lèi)不同。通常情況下,數(shù)據(jù)庫(kù)每 周備份一次,事務(wù)日志每日備份一次。對(duì)于一些主要的聯(lián)機(jī)事務(wù)處理 數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)可每日備份一次,事務(wù)日志每隔數(shù)小時(shí)備份一次。,5.4 數(shù)據(jù)庫(kù)的恢復(fù),圖68,二.數(shù)據(jù)庫(kù)恢復(fù)的含義 雖然數(shù)據(jù)庫(kù)系統(tǒng)中已采取一定的措施,來(lái)防止數(shù)據(jù)庫(kù)的安全性和完整性的破壞,保證并發(fā)事務(wù)的正確執(zhí)行,但數(shù)據(jù)庫(kù)中的數(shù)據(jù)仍然無(wú)法保證絕對(duì)不遭受破壞,比如計(jì)算機(jī)系統(tǒng)中硬件的故障、軟件的的錯(cuò)誤,操作員的失誤,惡意的破壞等都有可能發(fā)生,這些故障的發(fā)生影響數(shù)據(jù)庫(kù)數(shù)據(jù)的正確性,甚至可能破壞數(shù)據(jù)庫(kù),使數(shù)據(jù)庫(kù)中的數(shù)據(jù)全部或部分丟失。 系統(tǒng)必須具有檢測(cè)故障并把數(shù)據(jù)庫(kù)從錯(cuò)誤狀態(tài)中恢復(fù)到某一正確狀態(tài)的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。,5.4 數(shù)據(jù)庫(kù)的恢復(fù),圖68,三. 恢復(fù)策略,(1) 事務(wù)故障的恢復(fù) 事務(wù)故障是指事務(wù)在運(yùn)行到正常結(jié)束前被終止,這時(shí)恢復(fù)子系統(tǒng)可以利用日志文件撤消此事務(wù)對(duì)數(shù)據(jù)庫(kù)已進(jìn)行的修改。 日志文件是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。日志文件內(nèi)容包括事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))、操作類(lèi)型(插、刪或改)、操作前后的數(shù)據(jù)值等。目的是為數(shù)據(jù)庫(kù)的恢復(fù)保留詳細(xì)的數(shù)據(jù)。 恢復(fù)的過(guò)程為:反向掃描日志文件并執(zhí)行相應(yīng)操作的逆操作事務(wù)故障的恢復(fù)是由系統(tǒng)自動(dòng)完成的,對(duì)用戶是透明的。,數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中可能會(huì)出現(xiàn)各種各樣的故障,這些故障可分為以下三類(lèi):事務(wù)故障、系統(tǒng)故障和介質(zhì)故障。根據(jù)故障類(lèi)型的不同,應(yīng)該采取不同的恢復(fù)策略。,5.4 數(shù)據(jù)庫(kù)的恢復(fù),圖68,(2) 系統(tǒng)故障的恢復(fù) 系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原因,造成系統(tǒng)停止運(yùn)轉(zhuǎn),致使所有正在運(yùn)行的事務(wù)都以非正常方式終止,要求系統(tǒng)重新啟動(dòng)。 引起系統(tǒng)故障的原因可能有:硬件錯(cuò)誤如CPU故障、操作系統(tǒng)或DBMS代碼錯(cuò)誤、突然斷電等。 系統(tǒng)故障的恢復(fù)是系統(tǒng)在重啟時(shí)自動(dòng)完成的,不需用戶干預(yù)。 恢復(fù)過(guò)程為:正向掃描日志文件,找出故障發(fā)生前已提交的事務(wù),將其重做;同時(shí)找出故障發(fā)生時(shí)未完成的事務(wù),并撤消這些事務(wù)。,三.
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理核心考點(diǎn)試題及答案
- 高考數(shù)學(xué)考核趨勢(shì)題目及答案2023
- 敏捷項(xiàng)目管理2025年考試試題及答案
- 科學(xué)探索活動(dòng)實(shí)施方案計(jì)劃
- 課程整合幼兒園班級(jí)的有效探索計(jì)劃
- 法學(xué)概論復(fù)習(xí)季度計(jì)劃與分配試題及答案
- 2025屆吉林省長(zhǎng)春市數(shù)學(xué)七下期末檢測(cè)模擬試題含解析
- 2025屆湖北省十堰市鄖西縣八年級(jí)數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 企業(yè)戰(zhàn)略與政策風(fēng)險(xiǎn)試題及答案
- 城市交通信號(hào)控制策略重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 2023年文印服務(wù)實(shí)施方案
- 2023年醫(yī)學(xué)高級(jí)職稱-眼科(醫(yī)學(xué)高級(jí))考試沖刺-歷年真題演練帶答案
- 財(cái)務(wù)崗位筆試試題附有答案
- 二次供水水箱清洗合同
- 醫(yī)務(wù)科依法執(zhí)業(yè)自查表
- (完整word版)企業(yè)對(duì)賬函模板
- DB42-T 1107-2023 保溫裝飾板外墻外保溫系統(tǒng)工程技術(shù)規(guī)程
- 領(lǐng)導(dǎo)干部任前談話記錄表
- 普外科常見(jiàn)問(wèn)答題
- 醫(yī)療衛(wèi)生事業(yè)單位面試題型及答題技巧
- 空間信息技術(shù)基礎(chǔ)與前沿-河南理工大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
評(píng)論
0/150
提交評(píng)論