




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1數(shù)據(jù)庫(kù)系統(tǒng)、DNS系統(tǒng)
安全防護(hù)2內(nèi)容概要
隨著計(jì)算機(jī)的普及,數(shù)據(jù)庫(kù)的使用也越來(lái)越廣泛。一個(gè)企業(yè)的全部信息,國(guó)家機(jī)構(gòu)的事務(wù)管理信息,國(guó)防情報(bào)等機(jī)密信息,都集中地存放在數(shù)據(jù)庫(kù)中。數(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ù)意外丟失以及當(dāng)數(shù)據(jù)庫(kù)遭受破壞后能迅速地恢復(fù)正常,這就是數(shù)據(jù)庫(kù)的安全保護(hù)。DBMS對(duì)數(shù)據(jù)庫(kù)的安全保護(hù)功能是通過(guò)四個(gè)方面實(shí)現(xiàn)的,即安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)庫(kù)恢復(fù)。下面從這四個(gè)方面進(jìn)行介紹。最后還簡(jiǎn)單介紹了DNS系統(tǒng)的安全威脅以及防護(hù)技術(shù)。3內(nèi)容提綱數(shù)據(jù)庫(kù)常用攻擊技術(shù)數(shù)據(jù)庫(kù)安全性控制數(shù)據(jù)庫(kù)完整性控制并發(fā)控制與封鎖數(shù)據(jù)庫(kù)恢復(fù)技術(shù)DNS安全威脅DNS安全防護(hù)4針對(duì)數(shù)據(jù)庫(kù)的攻擊有多種方式,最終目標(biāo)是控制數(shù)據(jù)庫(kù)服務(wù)器或者獲得對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限。主要的數(shù)據(jù)庫(kù)攻擊手段包括:弱口令入侵注入攻擊利用數(shù)據(jù)庫(kù)漏洞進(jìn)行攻擊5弱口令入侵獲取目標(biāo)數(shù)據(jù)庫(kù)服務(wù)器的管理員口令有多種方法和工具,例如針對(duì)SQL服務(wù)器的SQLScan字典口令攻擊、SQLdict字典口令攻擊、SQLServerSniffer嗅探口令攻擊等工具。獲取了SQL數(shù)據(jù)庫(kù)服務(wù)器的口令后,即可利用SQL語(yǔ)言遠(yuǎn)程連接并進(jìn)入SQL數(shù)據(jù)庫(kù)內(nèi)獲得敏感信息。SQL注入攻擊SQL注入攻擊的具體過(guò)程:首先是由攻擊者通過(guò)向Web服務(wù)器提交特殊參數(shù),向后臺(tái)數(shù)據(jù)庫(kù)注入精心構(gòu)造的SQL語(yǔ)句,達(dá)到獲取數(shù)據(jù)庫(kù)里表內(nèi)容的目的。它的特點(diǎn)是,攻擊者是通過(guò)提交特殊參數(shù)和精心構(gòu)造的SQL語(yǔ)句后,根據(jù)返回的頁(yè)面判斷執(zhí)行結(jié)果、獲取敏感信息。6利用數(shù)據(jù)庫(kù)漏洞進(jìn)行攻擊利用數(shù)據(jù)庫(kù)本身的漏洞實(shí)施攻擊,獲取對(duì)數(shù)據(jù)庫(kù)的控制權(quán)和對(duì)數(shù)據(jù)的訪問(wèn)權(quán),或者利用漏洞實(shí)施權(quán)限的提升。不同版本數(shù)據(jù)庫(kù)的漏洞不一樣。例如:Oracle.0存在認(rèn)證過(guò)程的緩沖區(qū)溢出漏洞,攻擊者通過(guò)提供一個(gè)非常長(zhǎng)的用戶名,會(huì)使認(rèn)證出現(xiàn)溢出,允許攻擊者獲得數(shù)據(jù)庫(kù)的控制,這使得沒(méi)有正確的用戶名和密碼也可獲得對(duì)數(shù)據(jù)庫(kù)的控制。Oracle的leftouterjoins漏洞可以實(shí)現(xiàn)權(quán)限的提升。當(dāng)攻擊者利用leftouterjoins實(shí)現(xiàn)查詢功能時(shí),數(shù)據(jù)庫(kù)不做權(quán)限檢查,使攻擊者獲得他們一般不能訪問(wèn)的表的權(quán)限。7內(nèi)容提綱數(shù)據(jù)庫(kù)常用攻擊技術(shù)數(shù)據(jù)庫(kù)安全性控制數(shù)據(jù)庫(kù)完整性控制并發(fā)控制與封鎖數(shù)據(jù)庫(kù)恢復(fù)技術(shù)DNS安全威脅DNS安全防護(hù)81.1數(shù)據(jù)庫(kù)安全性的含義數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止非法使用,而造成數(shù)據(jù)的泄露、更改或破壞。安全性問(wèn)題有許多方面,其中包括:(1)法律、社會(huì)和倫理方面,例如請(qǐng)求查詢信息的人是不有合
法的權(quán)力。(2)物理控制方面,例如計(jì)算機(jī)機(jī)房或終端是否應(yīng)該加鎖或用
其他方法加以保護(hù)。(3)政策方面,確定存取原則,允許哪些用戶存取哪些數(shù)據(jù)。(4)運(yùn)行方面,使用口令時(shí),如何使口令保持秘密。(5)硬件控制方面,CPU是否提供任何安全性方面的功能,諸
如存儲(chǔ)保護(hù)鍵或特權(quán)工作方式。1數(shù)據(jù)庫(kù)的安全性控制9(6)操作系統(tǒng)安全性方面,在主存儲(chǔ)器和數(shù)據(jù)文件用過(guò)以后,操
作系統(tǒng)是否把它們的內(nèi)容清除掉。(7)數(shù)據(jù)庫(kù)系統(tǒng)本身安全性方面。這里討論的是數(shù)據(jù)庫(kù)本身的安
全性問(wèn)題,即主要考慮安全保護(hù)的策略,尤其是控制訪問(wèn)的
策略。1.2安全性控制的一般方法安全性控制是指要盡可能地杜絕所有可能的數(shù)據(jù)庫(kù)非法訪問(wèn)。用戶非法使用數(shù)據(jù)庫(kù)可以有很多種情況。例如,編寫(xiě)合法的程序繞過(guò)DBMS授權(quán)機(jī)制,通過(guò)操作系統(tǒng)直接存取、修改或備份有關(guān)數(shù)據(jù)。用戶非法訪問(wèn)數(shù)據(jù),無(wú)論它們是有意的還是無(wú)意的,都應(yīng)該加以嚴(yán)格控制,系統(tǒng)還要考慮數(shù)據(jù)信息的流動(dòng)問(wèn)題并加以控制。10因?yàn)閿?shù)據(jù)的流動(dòng)可能使無(wú)權(quán)訪問(wèn)的用戶獲得訪問(wèn)權(quán)利。例如,甲用戶可以訪問(wèn)文件F1,但無(wú)權(quán)訪問(wèn)文件F2,如果乙用戶把文件F2移至文件F1中之后,則由于乙用戶的操作,使甲用戶獲得了對(duì)文件F2的訪問(wèn)權(quán)。可見(jiàn)安全性的實(shí)施是要花費(fèi)一定代價(jià)的,安全保護(hù)策略就是要以最小的代價(jià)來(lái)防止對(duì)數(shù)據(jù)的非法訪問(wèn),層層設(shè)置安全措施。實(shí)際上,安全性問(wèn)題并不是數(shù)據(jù)庫(kù)系統(tǒng)所獨(dú)有的,所有計(jì)算機(jī)系統(tǒng)中都存在這個(gè)問(wèn)題。在計(jì)算機(jī)系統(tǒng)中,安全措施是一級(jí)一級(jí)層層設(shè)置的,安全控制模型如下圖所示。用戶標(biāo)識(shí)和鑒定用戶用戶存取權(quán)限控制DBMS操作系統(tǒng)安全保護(hù)OS密碼存儲(chǔ)DB安全控制模型圖11根據(jù)上圖的安全模型,當(dāng)用戶進(jìn)入計(jì)算機(jī)系統(tǒng)時(shí),系統(tǒng)首先根據(jù)輸入的用戶標(biāo)識(shí)進(jìn)行身份的鑒定,只有合法的用戶才準(zhǔn)許進(jìn)入系統(tǒng)。對(duì)已進(jìn)入系統(tǒng)的用戶,DBMS還要進(jìn)行存取控制,只允許用戶進(jìn)行合法的操作。DBMS是建立在操作系統(tǒng)之上的,安全的操作系統(tǒng)是數(shù)據(jù)庫(kù)安全的前提。操作系統(tǒng)應(yīng)能保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)必須由DBMS訪問(wèn),而不允許用戶越過(guò)DBMS,直接通過(guò)操作系統(tǒng)訪問(wèn)。數(shù)據(jù)最后可以通過(guò)密碼的形式存儲(chǔ)到數(shù)據(jù)庫(kù)中。121.2.1用戶標(biāo)識(shí)和鑒定(IdentificationandAuthentication)數(shù)據(jù)庫(kù)系統(tǒng)是不允許一個(gè)未經(jīng)授權(quán)的用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的。用戶標(biāo)識(shí)和鑒定是系統(tǒng)提供的最外層的安全保護(hù)措施,其方法是由系統(tǒng)提供一定的方式讓用戶標(biāo)識(shí)自己的名字或身份,系統(tǒng)內(nèi)部記錄著所有合法用戶的標(biāo)識(shí),每次用戶要求進(jìn)入系統(tǒng)時(shí),由系統(tǒng)進(jìn)行核實(shí),通過(guò)鑒定后才提供數(shù)據(jù)庫(kù)的使用權(quán)。用戶標(biāo)識(shí)和鑒定的方法有多種,為了獲得更強(qiáng)的安全性,往往是多種方法并舉,常用的方法有以下幾種:131.用一個(gè)用戶名或用戶標(biāo)識(shí)符來(lái)標(biāo)明用戶的身份,系統(tǒng)以此來(lái)鑒別用戶的合法性。如果正確,則可進(jìn)入下一步的核實(shí)。
2.用戶標(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ù)。3.通過(guò)用戶名和口令來(lái)鑒定用戶的方法簡(jiǎn)單易行,但該方法在使用時(shí),由于用戶名和口令的產(chǎn)生和使用比較簡(jiǎn)單,也容易被竊取,因此還可采用更復(fù)雜的方法。
141.2.2用戶存取權(quán)限控制用戶存取權(quán)限指的是不同的用戶對(duì)于不同的數(shù)據(jù)對(duì)象允許執(zhí)行的操作權(quán)限。在數(shù)據(jù)庫(kù)系統(tǒng)中,每個(gè)用戶只能訪問(wèn)他有權(quán)存取的數(shù)據(jù)并執(zhí)行有權(quán)使用的操作。因此,必須預(yù)先定義用戶的存取權(quán)限。對(duì)于合法的用戶,系統(tǒng)根據(jù)其存取權(quán)限的定義對(duì)其各種操作請(qǐng)求進(jìn)行控制,確保合法操作。存取權(quán)限由兩個(gè)要素組成:數(shù)據(jù)對(duì)象和操作類型。定義一個(gè)用戶的存取權(quán)限就是要定義這個(gè)用戶可以在哪些數(shù)據(jù)對(duì)象上進(jìn)行哪些類型的操作。15在數(shù)據(jù)庫(kù)系統(tǒng)中,定義用戶存取權(quán)限稱為授權(quán)(GrantPrivileges)。授權(quán)有兩種:系統(tǒng)特權(quán)和對(duì)象特權(quán)。系統(tǒng)特權(quán)是由DBA授予某些數(shù)據(jù)庫(kù)用戶,只有得到系統(tǒng)特權(quán),才能成為數(shù)據(jù)庫(kù)用戶。對(duì)象特權(quán)可以由DBA授予,也可以由數(shù)據(jù)對(duì)象的創(chuàng)建者授予,使數(shù)據(jù)庫(kù)用戶具持有對(duì)某些數(shù)據(jù)對(duì)象進(jìn)行某些操作的特權(quán)。在系統(tǒng)初始化時(shí),系統(tǒng)中至少有一個(gè)具有DBA特權(quán)的用戶,DBA可以通過(guò)GRANT語(yǔ)句將系統(tǒng)特權(quán)或?qū)ο筇貦?quán)授予其他用戶。對(duì)于已授權(quán)的用戶可以通過(guò)REVOKE語(yǔ)句收回所授予的特權(quán)。16這些授權(quán)定義經(jīng)過(guò)編譯后以一張授權(quán)表的形式存放在數(shù)據(jù)字典中。授權(quán)表主要有三個(gè)屬性:用戶標(biāo)識(shí)、數(shù)據(jù)對(duì)象和操作類型。用戶標(biāo)識(shí)不但可以是用戶個(gè)人,也可以是團(tuán)體、程序和終端。數(shù)據(jù)對(duì)象不僅有基本表、屬性列等數(shù)據(jù)本身,還有內(nèi)模式、外模式、模式等數(shù)據(jù)字典中的內(nèi)容。下表列出了關(guān)系系統(tǒng)中的存取權(quán)限。數(shù)據(jù)對(duì)象操作類型模式模式建立、修改、檢索外模式建立、修改、檢索內(nèi)模式建立、修改、檢索數(shù)據(jù)表查找、插入、修改、刪除屬性列查找、插入、修改、刪除17對(duì)于授權(quán)表,一個(gè)衡量授權(quán)機(jī)制的重要指標(biāo)就是授權(quán)粒度,即可以定義的數(shù)據(jù)對(duì)象的范圍;在關(guān)系數(shù)據(jù)庫(kù)中,授權(quán)粒度包括關(guān)系、記錄或?qū)傩?。一般?lái)說(shuō),授權(quán)定義中粒度越細(xì),授權(quán)子系統(tǒng)就越靈活下面的例子是一個(gè)授權(quán)粒度很粗的表,它只能對(duì)整個(gè)關(guān)系授權(quán)。USER1擁有對(duì)關(guān)系S的一切權(quán)限;USER2擁有對(duì)關(guān)系C的SELECT權(quán)和對(duì)關(guān)系SC的UPDATE權(quán);USER3只可以向關(guān)系SC中插入新記錄。18授權(quán)表1用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型USER1關(guān)系SALLUSER2關(guān)系CSELECTUSER2關(guān)系SCUPDATEUSER3關(guān)系SCINSERT………19授權(quán)表2是一個(gè)授權(quán)粒度較為精細(xì),它可以精確到關(guān)系的某一屬性。USER1擁有對(duì)關(guān)系S的一切權(quán)限;USER2只能查詢關(guān)系C的CNO屬性和修改關(guān)系SC的SCORE屬性;USER3可以向關(guān)系SC中插入新記錄。
授權(quán)表2
用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型USER1關(guān)系SALLUSER2列C.CNOSELECTUSER2列SC.SCOREUPDATEUSER3關(guān)系SCINSERT………20授權(quán)表2中的授權(quán)只涉及到數(shù)據(jù)名,而未提到具體的值。系統(tǒng)不必訪問(wèn)具體的數(shù)據(jù)本身,就可以執(zhí)行這種控制。這種控制稱為“值獨(dú)立”的控制。授權(quán)表3則不但可以對(duì)屬性列授權(quán),還可以提供與數(shù)值有關(guān)的授權(quán),即可以對(duì)關(guān)系中的一組記錄授權(quán)。比如,USER1只能對(duì)計(jì)算機(jī)系的學(xué)生進(jìn)行操作。對(duì)于提供與數(shù)據(jù)值有關(guān)的授權(quán),系統(tǒng)必須能夠支持存取謂詞的操作。授權(quán)表3□用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型存取謂詞USER1關(guān)系SALLDEPT=‘計(jì)算機(jī)’USER2列C.CNOSELECT
USER2列SC.SCOREUPDATE
USER3關(guān)系SCINSERT
………
21可見(jiàn)授權(quán)粒度越細(xì),授權(quán)子系統(tǒng)就越靈活,能夠提供的安全性就越完善。但另一方面,如果用戶比較多,數(shù)據(jù)庫(kù)比較大,授權(quán)表將很大,而且每次數(shù)據(jù)庫(kù)訪問(wèn)都要用到這張表做授權(quán)檢查,這將影響數(shù)據(jù)庫(kù)的性能。所幸的是,在大部分?jǐn)?shù)據(jù)庫(kù)中,需要保密的數(shù)據(jù)是少數(shù),對(duì)于大部分公開(kāi)的數(shù)據(jù),可以一次性地授權(quán)給PUBLIC,而不必再對(duì)每個(gè)用戶個(gè)別授權(quán)。與數(shù)據(jù)值有關(guān)的授權(quán),還可以通過(guò)另外一種數(shù)據(jù)庫(kù)安全措施,即定義視圖。221.2.3定義視圖為不同的用戶定義不同的視圖,可以限制各個(gè)用戶的訪問(wèn)范圍。通過(guò)視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取這些數(shù)據(jù)的用戶隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。例如,USER1只能對(duì)計(jì)算機(jī)系的學(xué)生進(jìn)行操作,一種方法是通過(guò)授權(quán)機(jī)制對(duì)USER1授權(quán),如授權(quán)表3□
;另一種簡(jiǎn)單的方法就是定義一個(gè)計(jì)算機(jī)系的視圖。但視圖機(jī)制的安全保護(hù)功能太不精細(xì),往往不能達(dá)到應(yīng)用系統(tǒng)的要求,其主要功能在于提供了數(shù)據(jù)庫(kù)的邏輯獨(dú)立性。在實(shí)際應(yīng)用中,通常將視圖機(jī)制與授權(quán)機(jī)制結(jié)合起來(lái)使用,首先用視圖機(jī)制屏蔽一部分保密數(shù)據(jù),然后在視圖上面再進(jìn)一步定義存取權(quán)限。231.2.4數(shù)據(jù)加密(DataEncryption)前面介紹的幾種數(shù)據(jù)庫(kù)安全措施,都是防止從數(shù)據(jù)庫(kù)系統(tǒng)竊取數(shù)據(jù),不能防止通過(guò)不正常渠道非法訪問(wèn)數(shù)據(jù),例如,偷取存儲(chǔ)數(shù)據(jù)的磁盤(pán),或在通信線路上竊取數(shù)據(jù),為了防止這些竊密活動(dòng),比較好的辦法是對(duì)數(shù)據(jù)加密。數(shù)據(jù)加密是防止數(shù)據(jù)庫(kù)中數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段。加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)(術(shù)語(yǔ)為明文,Plaintext)加密成為不可直接識(shí)別的格式(術(shù)語(yǔ)為密文,Ciphertext),數(shù)據(jù)以密碼的形式存儲(chǔ)和傳輸。24加密方法有兩種:一種是替換方法,該方法使用密鑰(EncryptionKey)將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的一個(gè)字符。另一種是轉(zhuǎn)換方法,該方法將明文中的字符按不同的順序重新排列。通常將這兩種方法結(jié)合起來(lái)使用,就可以達(dá)到相當(dāng)高的安全程度。例如美國(guó)1977年制定的官方加密標(biāo)準(zhǔn),數(shù)據(jù)加密標(biāo)準(zhǔn)(DataEncryptionStandard,簡(jiǎn)稱DES)就是使用這種算法的例子。數(shù)據(jù)加密后,對(duì)于不知道解密算法的人,即使利用系統(tǒng)安全措施的漏洞非法訪問(wèn)數(shù)據(jù),也只能看到一些無(wú)法辨認(rèn)的二進(jìn)制代碼。合法的用戶檢索數(shù)據(jù)時(shí),首先提供密碼鑰匙,由系統(tǒng)進(jìn)行譯碼后,才能得到可識(shí)別的數(shù)據(jù)。
25目前不少數(shù)據(jù)庫(kù)產(chǎn)品提供了數(shù)據(jù)加密例行程序,用戶可根據(jù)要求自行進(jìn)行加密處理,還有一些未提供加密程序的產(chǎn)品也提供了相應(yīng)的接口。用密碼存儲(chǔ)數(shù)據(jù),在存入時(shí)需加密,在查詢時(shí)需解密,這個(gè)過(guò)程會(huì)占用大量系統(tǒng)資源,降低了數(shù)據(jù)庫(kù)的性能。因此數(shù)據(jù)加密功能通常允許用戶自由選擇,只對(duì)那些保密要求特別高的數(shù)據(jù),才值得采用此方法。提示261.2.5審計(jì)(Audit)前面介紹的各種數(shù)據(jù)庫(kù)安全性措施,都可將用戶操作限制在規(guī)定的安全范圍內(nèi)。但實(shí)際上任何系統(tǒng)的安全性措施都不是絕對(duì)可靠的,竊密者總有辦法打破這些控制。對(duì)于某些高度敏感的保密數(shù)據(jù),必須用審計(jì)作為預(yù)防手段。審計(jì)功能是一種監(jiān)視措施,跟蹤記錄有關(guān)數(shù)據(jù)的訪問(wèn)活動(dòng)。審計(jì)追蹤把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái),存放在一個(gè)特殊文件上中,即審計(jì)日志(AuditLog)中。記錄的內(nèi)容一般包括:操作類型,如修改、查詢等;操作終端標(biāo)識(shí)與操作者標(biāo)識(shí);操作日期和時(shí)間27操作所涉及到的相關(guān)數(shù)據(jù),如基本表、視圖、記錄、屬性等。利用這些信息,可以重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,以進(jìn)一步找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。使用審計(jì)功能會(huì)大大增加系統(tǒng)的開(kāi)銷(xiāo),所以DBMS通常將其作為可選特征,提供相應(yīng)的操作語(yǔ)句可靈活地打開(kāi)或關(guān)閉審計(jì)功能。例如,可使用如下SQL語(yǔ)句打開(kāi)對(duì)表S的審計(jì)功能,對(duì)表S的每次成功的查詢、增加、刪除、修改操作都作審計(jì)追蹤:AUDITSELECT,INSERT,DELETE,UPDATE,ONSWHENEVERSUCCESSFUL要關(guān)閉對(duì)表S的審計(jì)功能可以使用如下語(yǔ)句:NOAUDITALLONS。
28內(nèi)容提綱數(shù)據(jù)庫(kù)常用攻擊技術(shù)數(shù)據(jù)庫(kù)安全性控制數(shù)據(jù)庫(kù)完整性控制并發(fā)控制與封鎖數(shù)據(jù)庫(kù)恢復(fù)技術(shù)DNS安全威脅DNS安全防護(hù)292.1數(shù)據(jù)庫(kù)完整性的含義數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)造成無(wú)效操作。比如年齡屬于數(shù)值型數(shù)據(jù),只能含0,1,…9,不能含字母或特殊符號(hào);月份只能用1~12之間的正整數(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í)世界。2完整性控制30數(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)的。312.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í)要做的事情。32完整性規(guī)則從執(zhí)行時(shí)間上可分為立即執(zhí)行約束(ImmediateConstraints)和延遲執(zhí)行約束(DeferredConstraints)。立即執(zhí)行約束是指在執(zhí)行用戶事務(wù)過(guò)程中,某一條語(yǔ)句執(zhí)行完成后,系統(tǒng)立即對(duì)此數(shù)據(jù)進(jìn)行完整性約束條件檢查。延遲執(zhí)行約束是指在整個(gè)事務(wù)執(zhí)行結(jié)束后,再對(duì)約束條件進(jìn)行完整性檢查,結(jié)果正確后才能提交。例如,銀行數(shù)據(jù)庫(kù)中“借貸總金額應(yīng)平衡”的約束就應(yīng)該屬于延遲執(zhí)行約束,從賬號(hào)A轉(zhuǎn)一筆錢(qián)到賬號(hào)B為一個(gè)事務(wù),從賬號(hào)A轉(zhuǎn)出去錢(qián)后,賬就不平了,必須等轉(zhuǎn)入賬號(hào)B后,賬才能重新平衡,這時(shí)才能進(jìn)行完整性檢查。33內(nèi)容提綱數(shù)據(jù)庫(kù)常用攻擊技術(shù)數(shù)據(jù)庫(kù)安全性控制數(shù)據(jù)庫(kù)完整性控制并發(fā)控制與封鎖數(shù)據(jù)庫(kù)恢復(fù)技術(shù)DNS安全威脅DNS安全防護(hù)343.1數(shù)據(jù)庫(kù)并發(fā)性的含義上一節(jié)討論的完整性是保證各個(gè)事務(wù)本身能得到正確的數(shù)據(jù),只考慮一個(gè)用戶使用數(shù)據(jù)庫(kù)的情況,但實(shí)際上數(shù)據(jù)庫(kù)中有許多用戶。每個(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)。3并發(fā)控制與封鎖35為了充分利用數(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ā)控制就是解決這類問(wèn)題,以保持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的一致性。3.2事務(wù)(Transaction)3.2.1事務(wù)的定義在上一節(jié)中就曾提到過(guò)事務(wù)的概念,DBMS的并發(fā)控制也是以事務(wù)為基本單位進(jìn)行的。那么到底什么是事務(wù)呢?36事務(wù)是數(shù)據(jù)庫(kù)系統(tǒng)中執(zhí)行的一個(gè)工作單位,它是由用戶定義的一組操作序列。一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條SQL語(yǔ)句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。事務(wù)的開(kāi)始與結(jié)束可以由用戶顯式控制。如果用戶沒(méi)有顯式地定義事務(wù),則由DBMS按照缺省規(guī)定自動(dòng)劃分事務(wù)。在SQL語(yǔ)言中,定義事務(wù)的語(yǔ)句有三條:BEGINTRANSACTION---表示事務(wù)的開(kāi)始;COMMIT---表示事務(wù)的提交,即將事務(wù)中所有對(duì)數(shù)據(jù)庫(kù)的更新寫(xiě)回到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中去,此時(shí)事務(wù)正常結(jié)束;ROLLBACK---表示事務(wù)的回滾,即在事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的更新操作全部撤銷(xiāo),再回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。
373.2.2事務(wù)的特征事務(wù)是由有限的數(shù)據(jù)庫(kù)操作序列組成,但并不是任意的數(shù)據(jù)庫(kù)操作序列都能成為事務(wù),為了保護(hù)數(shù)據(jù)的完整性,一般要求事務(wù)具有以下四個(gè)特征:1.原子性(Atomic)一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守“要么不做,要么全做”(nothingorall)的原則,即不允許事務(wù)部分的完成。即使因?yàn)楣收隙故聞?wù)未能完成,它執(zhí)行的部分結(jié)果要被取消。382.一致性(Consistency)事務(wù)對(duì)數(shù)據(jù)庫(kù)的作用是數(shù)據(jù)庫(kù)從一個(gè)一致?tīng)顟B(tài)轉(zhuǎn)變到另一個(gè)一致?tīng)顟B(tài)。所謂數(shù)據(jù)庫(kù)的一致?tīng)顟B(tài)是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿足完整性約束。例如:銀行企業(yè)中,“從帳號(hào)A轉(zhuǎn)移資金額R到帳號(hào)B”是一個(gè)典型的事務(wù),這個(gè)事務(wù)包括兩個(gè)操作,從帳號(hào)A中減去資金額R和在帳號(hào)B中增加資金額R,如果只執(zhí)行其中一個(gè)操作,則數(shù)據(jù)庫(kù)處于不一致?tīng)顟B(tài),帳務(wù)會(huì)出現(xiàn)問(wèn)題。也就是說(shuō),兩個(gè)操作要么全做,要么全不做,否則就不能成為事務(wù)。可見(jiàn)事務(wù)的一致性與原子性是密切相關(guān)的。393.隔離性(Isolation)如果多個(gè)事務(wù)并發(fā)地執(zhí)行,應(yīng)像各個(gè)事務(wù)獨(dú)立執(zhí)行一樣,一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)并發(fā)的其他事務(wù)是隔離的。4.持久性(Durability)指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。事務(wù)上述四個(gè)性質(zhì)的英文術(shù)語(yǔ)的第一個(gè)字母為ACID。因此,這四個(gè)性質(zhì)以稱為事務(wù)的ACID準(zhǔn)則。40一個(gè)事務(wù)的例子,從帳號(hào)A轉(zhuǎn)移資金額R到帳號(hào)B:BEGINTRANSACTIONREADAA←A-RIFA<0
/*A款不足*/THENBEGINDISPLAY“A款不足”
ROLLBACKENDELSE/*撥款*/BEGINB←B+RDISPLAY“撥款完成”
COMMITEND41上面的例子是對(duì)一個(gè)簡(jiǎn)單事務(wù)的完整的描述。該事務(wù)有兩個(gè)出口:當(dāng)A帳號(hào)的款項(xiàng)不足時(shí),事務(wù)以ROLLBACK(撤銷(xiāo))命令結(jié)束,即撤銷(xiāo)該事務(wù)的影響;另一個(gè)出口是以COMMIT(提交)命令結(jié)束,完成從帳號(hào)A到帳號(hào)B的撥款。在COMMIT之前,即在數(shù)據(jù)庫(kù)修改過(guò)程中,數(shù)據(jù)可能是不一致的,事務(wù)本身也可能被撤銷(xiāo)。只有在COMMIT之后,事務(wù)對(duì)數(shù)據(jù)庫(kù)所產(chǎn)生的變化才對(duì)其他事務(wù)開(kāi)放,這就可以避免其他事務(wù)訪問(wèn)不一致或不存在的數(shù)據(jù)。
423.3并發(fā)操作與數(shù)據(jù)的不一致性當(dāng)同一數(shù)據(jù)庫(kù)系統(tǒng)中有多個(gè)事務(wù)并發(fā)運(yùn)行時(shí),如果不加以適當(dāng)控制,可能產(chǎn)生數(shù)據(jù)的不一致性。[例1]并發(fā)取款操作。假設(shè)存款余額R=1000元,甲事務(wù)T1取走存款100元,乙事務(wù)T2取走存款200元,如果正常操作,即甲事務(wù)T1執(zhí)行完畢再執(zhí)行乙事務(wù)T2,存款余額更新后應(yīng)該是700元。但是如果按照如下順序操作,則會(huì)有不同的結(jié)果:甲事務(wù)T1讀取存款余額R=1000元;乙事務(wù)T2讀取存款余額R=1000元;甲事務(wù)T1取走存款100元,修改存款余額R=R-100=900,把R=900寫(xiě)回到數(shù)據(jù)庫(kù);乙事務(wù)T2取走存款200元,修改存款余額R=R-200=800,把R=800寫(xiě)回到數(shù)據(jù)庫(kù)。43結(jié)果兩個(gè)事務(wù)共取走存款300元,而數(shù)據(jù)庫(kù)中的存款卻只少了200元。得到這種錯(cuò)誤的結(jié)果是由甲乙兩個(gè)事務(wù)并發(fā)操作引起的,數(shù)據(jù)庫(kù)的并發(fā)操作導(dǎo)致的數(shù)據(jù)庫(kù)不一致性主要有以下三種:1.丟失更新(LostUpdate)當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)做修改,并發(fā)執(zhí)行時(shí),
T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成了數(shù)據(jù)的丟失更新問(wèn)題,導(dǎo)致數(shù)據(jù)的不一致。
44仍以上例的操作為例進(jìn)行分析:數(shù)據(jù)庫(kù)中R的初值是1000,事務(wù)T1包含三個(gè)操作:讀入R初值(FINDR);計(jì)算(R=R-100);更新R(UPDATER)。事務(wù)T2也包含三個(gè)操作:FINDR;計(jì)算(R=R-200);UPDATER。如果事務(wù)T1和T2順序執(zhí)行,則更新后,R的值是700。但如果T1和T2并發(fā)執(zhí)行,R的值是800,得到錯(cuò)誤的結(jié)果,原因在于在t7時(shí)刻丟失了T1對(duì)數(shù)據(jù)庫(kù)的更新操作。因此,這個(gè)并發(fā)操作不正確。45丟失更新問(wèn)題時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2T0
1000
t1FINDR
t2
FINDRt3R=R-100
t4
R=R-200t5UPDATER
t6
900UPDATERt7
800
462.污讀(DirtyRead)事務(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)容不一致,這種情況稱為“污讀”。事務(wù)T1把R的值改為900,但此時(shí)尚未做COMMIT操作,事務(wù)T2將修改過(guò)的值900讀出來(lái),之后事務(wù)T1執(zhí)行ROLLBACK操作,R的值恢復(fù)為1000,而事務(wù)T2將仍在使用已被撤消了的R值900。對(duì)于這些未提交的隨后又被撤消的更新數(shù)據(jù)稱為“臟數(shù)據(jù)”。比如:這里事務(wù)T2在t2時(shí)刻讀取的就是“臟數(shù)據(jù)”。47污讀問(wèn)題
時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t0
1000
t1FINDR
t2R=R-100
t3UPDATER
t4
900FINDRt5ROLLBACK
t6
1000
483.不可重讀(UnrepeatableRead)事務(wù)T1讀取了數(shù)據(jù)R,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再讀取數(shù)據(jù)R以進(jìn)行核對(duì)時(shí),得到的兩次讀取值不一致,這種情況稱為“不可重讀”。在t0時(shí)刻事務(wù)T1讀取R的值為1000,但事務(wù)T2在t4時(shí)刻將R的值更新為為800。所以T1所使用的值已經(jīng)與開(kāi)始讀取的值不一致。時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R的值事務(wù)T2t0
1000
t1FINDR
t2
FINDRt3
R=R-200t4
UPDATERt5
800
不可重讀問(wèn)題49產(chǎn)生上述三類數(shù)據(jù)不一致性的主要原因就是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要求DBMS以正確的方式高度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫(kù)的完整性。3.4封鎖實(shí)現(xiàn)并發(fā)控制的方法主要有兩種:封鎖(Lock)技術(shù)和時(shí)標(biāo)(Time-Stamp)技術(shù)。這里只介紹封鎖技術(shù)。3.4.1封鎖類型(LockType)所謂封鎖就是當(dāng)一個(gè)事務(wù)在對(duì)某個(gè)數(shù)據(jù)對(duì)象(可以是數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)集、以至整個(gè)數(shù)據(jù)庫(kù))進(jìn)行操作之前,必須獲得相應(yīng)的鎖,以保證數(shù)據(jù)操作的正確性和一致性。50封鎖是目前DBMS普遍采用的并發(fā)控制方法,基本的封鎖類型有兩種:排它鎖和共享鎖。
1.排它鎖(ExclusiveLock)排它鎖又稱寫(xiě)鎖,簡(jiǎn)稱為X鎖,其采用的原理是禁止并發(fā)操作。當(dāng)事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象R實(shí)現(xiàn)X封鎖后,其他事務(wù)要等T解除X封鎖以后,才能對(duì)R進(jìn)行封鎖。這就保證了其他事務(wù)在T釋放R上的鎖之前,不能再對(duì)R進(jìn)行操作。2.共享鎖(ShareLock)共享鎖又稱讀鎖,簡(jiǎn)稱為S鎖,其采用的原理是允許其他用戶對(duì)同一數(shù)據(jù)對(duì)象進(jìn)行查詢,但不能對(duì)該數(shù)據(jù)對(duì)象進(jìn)行修改。當(dāng)事務(wù)T對(duì)某個(gè)數(shù)據(jù)對(duì)象R實(shí)現(xiàn)S封鎖后,其他事務(wù)只能對(duì)R加S鎖,而不能加X(jué)鎖,直到T釋放R上的S鎖。這就保證了其他事務(wù)在T釋放R上的S鎖之前,只能讀取R,而不能再對(duì)R作任何修改。513.4.2死鎖和活鎖封鎖技術(shù)可有效解決并行操作的一致性問(wèn)題,但也可產(chǎn)生新的問(wèn)題,即活鎖和死鎖問(wèn)題。1.活鎖(LiveLock)當(dāng)某個(gè)事務(wù)請(qǐng)求對(duì)某一數(shù)據(jù)的排它性封鎖時(shí),由于其他事務(wù)對(duì)該數(shù)據(jù)的操作而使這個(gè)事務(wù)處于永久等待狀態(tài),這種狀態(tài)稱為活鎖。例如,事務(wù)T1在對(duì)數(shù)據(jù)R封鎖后,事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R。當(dāng)T1釋放了R上的封鎖后首先批準(zhǔn)了T3的請(qǐng)求,T2繼續(xù)等待。然后又有又T4請(qǐng)求封鎖R,T3釋放了R上的封鎖后又批準(zhǔn)了T4的請(qǐng)求……T2可能永遠(yuǎn)處于等待狀態(tài),從而發(fā)生了活鎖。52活鎖時(shí)間事務(wù)T1事務(wù)T2事務(wù)T3事務(wù)T4t0LOCKR
t1…LOCKR
t2
WAITLOCKR
t3UNLOCKWAITWAITLOCKRt4…WAITLOCKRWAITt5
WAIT
WAITt6
WAITUNLOCKWAITt7
WAIT
LOCKRT8
WAIT
53避免活鎖的簡(jiǎn)單方法是采用先來(lái)先服務(wù)的策略,按照請(qǐng)求封鎖的次序?qū)κ聞?wù)排隊(duì),一旦記錄上的鎖釋放,就使申請(qǐng)隊(duì)列中的第一個(gè)事務(wù)獲得鎖。有關(guān)活鎖的問(wèn)題我們不再詳細(xì)討論,因?yàn)樗梨i的問(wèn)題較為常見(jiàn),這里主要討論有關(guān)死鎖的問(wèn)題。2.死鎖(Deadlock)在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)都等待著某個(gè)數(shù)據(jù)、而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(tài)稱為死鎖。例如,事務(wù)T1在對(duì)數(shù)據(jù)R1封鎖后,又要求對(duì)數(shù)據(jù)R2封鎖,而事務(wù)T2已獲得對(duì)數(shù)據(jù)R2的封鎖,又要求對(duì)數(shù)據(jù)R1封鎖,這樣兩個(gè)事務(wù)由于都不能得到封鎖而處于等待狀態(tài),發(fā)生了死鎖。54死鎖時(shí)間事務(wù)T1事務(wù)T2t0LOCKR1
t1
LOCKR2t2
…t3LOCKR2
t4WAIT
t5WAITLOCKR1t6WAITWAITt7WAITWAIT55(1)死鎖的預(yù)防死鎖一旦發(fā)生,系統(tǒng)效率將會(huì)大大下降,因而要盡量避免死鎖的發(fā)生。在操作系統(tǒng)的多道程序運(yùn)行中,由于多個(gè)進(jìn)程的并行執(zhí)行需要分別占用不同資源時(shí),也會(huì)發(fā)生死鎖。要想預(yù)防死鎖的產(chǎn)生,就得破壞形成死鎖的條件。同操作系統(tǒng)預(yù)防死鎖的方法類似,在數(shù)據(jù)庫(kù)環(huán)境下,常用的方法有以下兩種:①一次加鎖法一次加鎖法是每個(gè)事物必須將所有要使用的數(shù)據(jù)對(duì)象全部依次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有已加鎖成功的數(shù)據(jù)對(duì)象,然后重新開(kāi)始從頭加鎖。一次加鎖法的程序框圖如下圖。56YYNYN開(kāi)始加鎖加鎖第1個(gè)數(shù)據(jù)加鎖成功嗎?加鎖成功嗎?對(duì)第m個(gè)表加鎖加鎖成功嗎?加鎖第2個(gè)數(shù)據(jù)釋放所有已加鎖的數(shù)據(jù)N……一次加鎖成功一次加鎖法
57②順序加鎖法順序加鎖法是預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,并按逆序進(jìn)行釋放。順序加鎖法同一次加鎖法一樣,也存在一些問(wèn)題。即使確定了封鎖順序,隨著數(shù)據(jù)操作的不斷變化,維護(hù)這些數(shù)據(jù)的封鎖順序要需要很大的系統(tǒng)開(kāi)銷(xiāo)。58(3)死鎖的診斷與解除數(shù)據(jù)庫(kù)系統(tǒng)中診斷死鎖的方法與操作系統(tǒng)類似??梢岳檬聞?wù)信賴圖的形式來(lái)測(cè)試系統(tǒng)中是否存在死鎖。例如,事務(wù)T1需要數(shù)據(jù)R,但R已經(jīng)被事務(wù)T2封鎖,那么從T1到T2劃一個(gè)箭頭。如果在事務(wù)依賴圖中沿著箭頭方向存在一個(gè)循環(huán),那么死鎖的條件就形成了,系統(tǒng)就會(huì)出現(xiàn)死鎖。事務(wù)依賴圖
數(shù)據(jù)RT1T259如果已經(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)。解除死鎖原則60內(nèi)容提綱數(shù)據(jù)庫(kù)常用攻擊技術(shù)數(shù)據(jù)庫(kù)安全性控制數(shù)據(jù)庫(kù)完整性控制并發(fā)控制與封鎖數(shù)據(jù)庫(kù)恢復(fù)技術(shù)DNS安全威脅DNS安全防護(hù)614.1數(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ù)從錯(cuò)誤狀態(tài)中恢復(fù)到某一正確狀態(tài)的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。4數(shù)據(jù)庫(kù)的恢復(fù)624.2數(shù)據(jù)庫(kù)恢復(fù)的原理服及其實(shí)現(xiàn)技術(shù)數(shù)據(jù)庫(kù)恢復(fù)的基本原理十分簡(jiǎn)單,就是利用數(shù)據(jù)冗余。數(shù)據(jù)庫(kù)中任何一部分被破壞的或不正確的數(shù)據(jù),都可以利用存儲(chǔ)在系統(tǒng)其他地方的冗余數(shù)據(jù)來(lái)修復(fù)?;謴?fù)系統(tǒng)提供了兩種類型的功能:一種是生成冗余數(shù)據(jù),即對(duì)可能發(fā)生的故障作某些準(zhǔn)備;另一種是冗余重建,即利用這些冗余數(shù)據(jù)恢復(fù)數(shù)據(jù)庫(kù)。生成冗余數(shù)據(jù)最常用的技術(shù)是登記日志文件和數(shù)據(jù)轉(zhuǎn)儲(chǔ),在實(shí)際應(yīng)用中,這兩種方法常常結(jié)合起來(lái)一起使用。
634.2.1登記日志文件(Logging)日志文件是用來(lái)記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。對(duì)數(shù)據(jù)庫(kù)的每次修改,都將被修改項(xiàng)目的舊值和新值寫(xiě)在一個(gè)叫做運(yùn)行日志的文件中,目的是為數(shù)據(jù)庫(kù)的恢復(fù)保留詳細(xì)的數(shù)據(jù)。典型的日志文件主要包含以下內(nèi)容:1.更新數(shù)據(jù)庫(kù)的事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù));2.操作的類型(插入、刪除或修改)3.操作對(duì)象;4.更新前數(shù)據(jù)的舊值(對(duì)于插入操作而言,沒(méi)有舊值);5.更新前數(shù)據(jù)的新值(對(duì)于刪除操作而言,沒(méi)有新值);6.事務(wù)處理中的各個(gè)關(guān)鍵時(shí)刻(事務(wù)的開(kāi)始、結(jié)束及其真正回寫(xiě)的時(shí)間)。644.2.2數(shù)據(jù)轉(zhuǎn)儲(chǔ)(DataDump)數(shù)據(jù)轉(zhuǎn)儲(chǔ)是指定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備如磁帶、磁盤(pán)上保存起來(lái)的過(guò)程,它是數(shù)據(jù)庫(kù)恢復(fù)中采用的基本手段。轉(zhuǎn)儲(chǔ)的數(shù)據(jù)文本稱為后備副本或后援副本,當(dāng)數(shù)據(jù)庫(kù)遭到破壞后就可利用后援副本把數(shù)據(jù)庫(kù)有效地加以恢復(fù)。轉(zhuǎn)儲(chǔ)是十分耗費(fèi)時(shí)間和資源的,不能頻繁地進(jìn)行,應(yīng)該根據(jù)數(shù)據(jù)庫(kù)使用情況確定一個(gè)適當(dāng)?shù)霓D(zhuǎn)儲(chǔ)周期。按照轉(zhuǎn)儲(chǔ)方式轉(zhuǎn)儲(chǔ)可以分為海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)。增量轉(zhuǎn)儲(chǔ)每次只轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后被更新過(guò)的數(shù)據(jù)。654.3數(shù)據(jù)庫(kù)的故障和恢復(fù)的策略數(shù)據(jù)庫(kù)系統(tǒng)在運(yùn)行中發(fā)生故障后,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改有一部分已寫(xiě)入物理數(shù)據(jù)庫(kù)。這時(shí)數(shù)據(jù)庫(kù)就處于一種不正確的狀態(tài),或者說(shuō)是不一致的狀態(tài),這時(shí)可利用日志文件和數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)的后備副本將數(shù)據(jù)庫(kù)恢復(fù)到故障前的某個(gè)一致性狀態(tài)。數(shù)據(jù)庫(kù)運(yùn)行過(guò)程中可能會(huì)出現(xiàn)各種各樣的故障,這些故障可分為以下三類:事務(wù)故障、系統(tǒng)故障和介質(zhì)故障。根據(jù)故障類型的不同,應(yīng)該采取不同的恢復(fù)策略。664.3.1事務(wù)故障(TransactionFailure)及其恢復(fù)事務(wù)故障表示由非預(yù)期的、不正常的程序結(jié)束所造成的故障。造成程序非正常結(jié)束的原因包括輸入數(shù)據(jù)錯(cuò)誤、運(yùn)算溢出、違反存儲(chǔ)保護(hù)、并行事務(wù)發(fā)生死鎖等。發(fā)生事務(wù)故障時(shí),被迫中斷的事務(wù)可能已對(duì)數(shù)據(jù)庫(kù)進(jìn)行了修改,為了消除該事務(wù)對(duì)數(shù)據(jù)庫(kù)的影響,要利用日志文件中所記載的信息,強(qiáng)行回滾(ROLLBACK)該事務(wù),將數(shù)據(jù)庫(kù)恢復(fù)到修改前的初始狀態(tài)。為此,要檢查日志文件中由這些事務(wù)所引起的變化,取消這些事務(wù)所做的一切改變。這類操作稱為事務(wù)撤消(UNDO)。674.3.2系統(tǒng)故障(SystemFailure)及其恢復(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ò)誤、突然斷電等。此時(shí),內(nèi)存中數(shù)據(jù)庫(kù)緩沖區(qū)的內(nèi)容全部丟失,存儲(chǔ)在外部存儲(chǔ)設(shè)備上的數(shù)據(jù)庫(kù)并未破壞,但內(nèi)容不可靠了。68系統(tǒng)故障的恢復(fù)要完成兩方面的工作,既要撤消所有未完成的事務(wù),還需要重做所有己提交的事務(wù),這樣才能將數(shù)據(jù)庫(kù)真正恢復(fù)到一致的狀態(tài)。具體做法如下:1.正向掃描日志文件,查找尚未提交的事務(wù),將其
事務(wù)標(biāo)識(shí)記入撤消隊(duì)列。同時(shí)查找已經(jīng)提交的事
務(wù),將其事務(wù)標(biāo)識(shí)記入重做隊(duì)列。2.對(duì)撤消隊(duì)列中的各個(gè)事務(wù)進(jìn)行撤消處理。3.對(duì)重做隊(duì)列中的各個(gè)事務(wù)進(jìn)行重做處理,即按照
日志文件中所登記的操作內(nèi)容,重新執(zhí)行操作,
使數(shù)據(jù)庫(kù)恢復(fù)到最近某個(gè)可用狀態(tài)。694.3.3介質(zhì)故障(MediaFailure)及其恢復(fù)介質(zhì)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于輔助存儲(chǔ)器介質(zhì)受到破壞,使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部丟失。這類故障比事務(wù)故障和系統(tǒng)故障發(fā)生的可能性要小,但這是最嚴(yán)重的一種故障,破壞性很大,磁盤(pán)上的物理數(shù)據(jù)和日志文件可能被破壞,這需要裝入發(fā)生介質(zhì)故障前最新的后備數(shù)據(jù)庫(kù)副本,然后利用日志文件重做該副本后所運(yùn)行的所有事務(wù)。具體方法如下:1.裝入最新的數(shù)據(jù)庫(kù)副本,使數(shù)據(jù)庫(kù)恢復(fù)到最近一次轉(zhuǎn)儲(chǔ)時(shí)的
可用狀態(tài)。2.裝入最新的日志文件副本,根據(jù)日志文件中的內(nèi)容重做已完
成的事務(wù)。70通過(guò)以上對(duì)三類故障的分析,我們可以看出故障發(fā)生后對(duì)數(shù)據(jù)庫(kù)的影響有兩種可能性:1.?dāng)?shù)據(jù)庫(kù)沒(méi)有被破壞,但數(shù)據(jù)可能處于不一致?tīng)顟B(tài)。這是由事務(wù)故障和系統(tǒng)故障引起的,這種情況在恢復(fù)時(shí),不需要重裝數(shù)據(jù)庫(kù)副本,直接根據(jù)日志文件,撤銷(xiāo)故障發(fā)生時(shí)未完成的事務(wù),并重做己完成的事務(wù),使數(shù)據(jù)庫(kù)恢復(fù)到正確的狀態(tài)。這類故障的恢復(fù)是系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成的,不需要用戶干預(yù)。2.?dāng)?shù)據(jù)庫(kù)本身被破壞。這是由介質(zhì)故障引起的,這種情況在恢復(fù)時(shí),把最近一次轉(zhuǎn)儲(chǔ)的數(shù)據(jù)裝入,然后借助于日志文件,再在此基礎(chǔ)上對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新,從而重建了數(shù)據(jù)庫(kù)。這類故障的恢復(fù)不能自動(dòng)完成,需要DBA的介入,先由DBA重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫(kù)副本和相應(yīng)的日志文件的副本,再執(zhí)行系統(tǒng)提供的恢復(fù)命令,具體的恢復(fù)操作由DBMS來(lái)完成。71數(shù)據(jù)庫(kù)恢復(fù)的基本原理就是利用數(shù)據(jù)冗余,實(shí)現(xiàn)的方法比較清楚,但真正實(shí)現(xiàn)起來(lái)相當(dāng)復(fù)雜,實(shí)現(xiàn)恢復(fù)的程序非常龐大,常常占整個(gè)系統(tǒng)代碼的百分之十以上。數(shù)據(jù)庫(kù)系統(tǒng)所采用的恢復(fù)技術(shù)是否行之有效,不僅對(duì)系統(tǒng)的可靠程度起著決定性使用,而且對(duì)系統(tǒng)的運(yùn)行效率也有很大的影響,是衡量系統(tǒng)性能優(yōu)劣的重要指標(biāo)。兩點(diǎn)啟示72數(shù)據(jù)庫(kù)的重要特征是它能為多個(gè)用戶提供數(shù)據(jù)共享。在多個(gè)用戶使用同一數(shù)據(jù)庫(kù)系統(tǒng)時(shí),要保證整個(gè)系統(tǒng)的正常運(yùn)轉(zhuǎn),DBMS必須具備一整套完整而有效的安全保護(hù)措施。以上從安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)庫(kù)恢復(fù)等四方面討論了數(shù)據(jù)庫(kù)的安全保護(hù)功能。數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止因非法使用數(shù)據(jù)庫(kù)所造成數(shù)據(jù)的泄露、更改或破壞。實(shí)現(xiàn)數(shù)據(jù)庫(kù)系統(tǒng)安全性的方法有用戶標(biāo)識(shí)和鑒定、存取控制、視圖定義、數(shù)據(jù)加密和審計(jì)等多種,其中,最重要的是存取控制技術(shù)和審計(jì)技術(shù)。數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性。完整性和安全性是兩個(gè)不同的概念,安全性措施的防范對(duì)象是非法用戶和非法操作,完整性措施的防范對(duì)象是合法用戶的不合語(yǔ)義的數(shù)據(jù)。這些語(yǔ)義約束構(gòu)成了數(shù)據(jù)庫(kù)的三條完整性規(guī)則,即觸發(fā)條件、約束條件和違約響應(yīng)。完整性約束條件從使用對(duì)象分為值的約束和結(jié)構(gòu)的約束,從約束對(duì)象的狀態(tài)又可分為靜態(tài)約束和動(dòng)態(tài)約束。
小結(jié)
73小結(jié)并發(fā)控制是為了防止多個(gè)用戶同時(shí)存取同一數(shù)據(jù),造成數(shù)據(jù)庫(kù)的不一致性。事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,并發(fā)操作中只有保證系統(tǒng)中一切事務(wù)的原子性、一致性、隔離性和持久性,才能保證數(shù)據(jù)庫(kù)處于一致?tīng)顟B(tài)。并發(fā)操作導(dǎo)致的數(shù)據(jù)庫(kù)不一致性主要有丟失更新、污讀和不可重讀三種。實(shí)現(xiàn)并發(fā)控制的方法主要是
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保工程承包與實(shí)施合同
- 樣機(jī)報(bào)廢說(shuō)明
- 電子會(huì)議參與情況統(tǒng)計(jì)表
- 四川省達(dá)州市渠縣中學(xué)2025屆高三下學(xué)期二模考試地理試題(含答案)
- 汽車(chē)維修技術(shù)發(fā)動(dòng)機(jī)原理與故障診斷試題
- 在公司年會(huì)上的致辭報(bào)告
- 《光的三原色原理及其應(yīng)用:初中物理教學(xué)教案》
- 物流行業(yè)貨物運(yùn)輸延誤免責(zé)協(xié)議書(shū)
- 運(yùn)營(yíng)商相關(guān)知識(shí)培訓(xùn)課件
- 心理學(xué)基礎(chǔ)與應(yīng)用測(cè)試卷
- 戶外廣告制作安裝合同模板
- 廠房改公寓出租合同范例
- 污水處理廠SBR工藝的設(shè)計(jì)說(shuō)明
- 城市軌道交通行車(chē)組織 課件 項(xiàng)目二任務(wù)六 車(chē)站行車(chē)組織作業(yè)
- 2025年北方聯(lián)合電力有限責(zé)任公司招聘筆試參考題庫(kù)含答案解析
- 2025年八省聯(lián)考數(shù)學(xué)試題(原卷版)
- 高教社馬工程倫理學(xué)(第二版)教學(xué)課件02
- 《榜樣9》觀后感心得體會(huì)二
- 2024年滁州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 小學(xué)生播音主持課課件
- 二年級(jí)下冊(cè)道法大單元全冊(cè)教案
評(píng)論
0/150
提交評(píng)論