教學(xué)第7章數(shù)據(jù)庫(kù)的安全保護(hù)課件_第1頁(yè)
教學(xué)第7章數(shù)據(jù)庫(kù)的安全保護(hù)課件_第2頁(yè)
教學(xué)第7章數(shù)據(jù)庫(kù)的安全保護(hù)課件_第3頁(yè)
教學(xué)第7章數(shù)據(jù)庫(kù)的安全保護(hù)課件_第4頁(yè)
教學(xué)第7章數(shù)據(jù)庫(kù)的安全保護(hù)課件_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第7章數(shù)據(jù)庫(kù)的安全保護(hù)第7章數(shù)據(jù)庫(kù)的安全保護(hù)17.1數(shù)據(jù)庫(kù)的安全性及SQLServer的安全保護(hù)技術(shù)用戶(hù)DBMSOSDB用戶(hù)標(biāo)識(shí)和鑒別存取控制操作系統(tǒng)安全保護(hù)密碼存儲(chǔ)數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止不合法的使用造成的數(shù)據(jù)泄密、更改或破壞。7.1.1數(shù)據(jù)庫(kù)安全性控制的一般方法圖1數(shù)據(jù)庫(kù)系統(tǒng)的安全模型7.1數(shù)據(jù)庫(kù)的安全性及SQLServer的安全保護(hù)技術(shù)21.用戶(hù)標(biāo)識(shí)與鑒別(1)用輸入用戶(hù)名(用戶(hù)標(biāo)識(shí)號(hào))來(lái)標(biāo)明用戶(hù)身份。

系統(tǒng)內(nèi)部記錄著所有合法用戶(hù)的標(biāo)識(shí)。系統(tǒng)對(duì)輸入的用戶(hù)名與合法用戶(hù)名對(duì)照,鑒別此用戶(hù)是否為合法用戶(hù)。(2)通過(guò)回答口令標(biāo)識(shí)用戶(hù)身份。

系統(tǒng)常常要求用戶(hù)輸入口令,只有口令正確才能進(jìn)入系統(tǒng)。為保密起見(jiàn),口令由用戶(hù)自己定義并可以隨時(shí)變更。為防止口令被人竊取,用戶(hù)在終端上輸入口令時(shí),不把口令的內(nèi)容顯示在屏幕上,而用字符“*”替代其內(nèi)容。(3)通過(guò)回答對(duì)隨機(jī)數(shù)的運(yùn)算結(jié)果表明用戶(hù)身份。

系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶(hù)根據(jù)預(yù)先約定的計(jì)算過(guò)程或計(jì)算函數(shù)進(jìn)行計(jì)算,并將計(jì)算結(jié)果輸給到計(jì)算機(jī)。系統(tǒng)根據(jù)用戶(hù)計(jì)算結(jié)果判定用戶(hù)是否合法。

1.用戶(hù)標(biāo)識(shí)與鑒別(1)用輸入用戶(hù)名(用戶(hù)標(biāo)識(shí)號(hào))來(lái)標(biāo)明32.存取控制授權(quán)定義

具有授權(quán)資格的用戶(hù),如數(shù)據(jù)庫(kù)管理員DBA或建表戶(hù)DBO,通過(guò)數(shù)據(jù)控制語(yǔ)言DCL,將授權(quán)決定告知數(shù)據(jù)庫(kù)管理系統(tǒng)。(1)數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)以下3步來(lái)實(shí)現(xiàn)數(shù)據(jù)控制:存權(quán)處理數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS把授權(quán)的結(jié)果編譯后存入數(shù)據(jù)字典中。查權(quán)操作當(dāng)用戶(hù)提出操作請(qǐng)求時(shí),系統(tǒng)要在數(shù)據(jù)字典中查找該用戶(hù)的數(shù)據(jù)操作權(quán)限,當(dāng)用戶(hù)擁有該操作權(quán)時(shí)才能執(zhí)行其操作,否則系統(tǒng)將拒絕其操作。2.存取控制授權(quán)定義(1)數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)以下3步來(lái)實(shí)現(xiàn)數(shù)據(jù)4(2)關(guān)系中的用戶(hù)權(quán)限

用戶(hù)權(quán)限主要包括數(shù)據(jù)對(duì)象和操作類(lèi)型兩個(gè)要素。通過(guò)授權(quán)規(guī)定用戶(hù)可以對(duì)哪些數(shù)據(jù)對(duì)象進(jìn)行哪些類(lèi)型的操作。數(shù)據(jù)對(duì)象操作類(lèi)型模式、外模式、內(nèi)模式建立、修改、檢索表或者記錄、字段查找、插入、修改、刪除(3)SQL的數(shù)據(jù)控制功能SQL的數(shù)據(jù)控制功能為GRANT語(yǔ)句(授權(quán))和REVOKE語(yǔ)句(收權(quán))。系統(tǒng)特權(quán):GRANT

CREATEDATABASE,BACKUPDATABASETO

王平對(duì)象特權(quán):GRANTselect,update(s#)onsto王平(2)關(guān)系中的用戶(hù)權(quán)限

用戶(hù)權(quán)限主要包括數(shù)據(jù)對(duì)象和操作類(lèi)型兩5(4)授權(quán)機(jī)制

授權(quán)粒度:用戶(hù)權(quán)限定義中數(shù)據(jù)對(duì)象范圍。在關(guān)系數(shù)據(jù)庫(kù)中,授權(quán)粒度包括關(guān)系、記錄或?qū)傩?。授?quán)粒度越細(xì),授權(quán)子系統(tǒng)就越靈活,但系統(tǒng)定義與檢查權(quán)限的開(kāi)銷(xiāo)也會(huì)相應(yīng)地增大。

DBA不需要進(jìn)行授權(quán)就可進(jìn)行數(shù)據(jù)庫(kù)內(nèi)的任何操作。數(shù)據(jù)對(duì)象的創(chuàng)建者(dbo)自動(dòng)獲得對(duì)于該數(shù)據(jù)對(duì)象的所有操作權(quán)限。獲得數(shù)據(jù)操作權(quán)的用戶(hù)可以通過(guò)GRANT語(yǔ)句把權(quán)限轉(zhuǎn)授給其他用戶(hù)。(4)授權(quán)機(jī)制

授權(quán)粒度:用戶(hù)權(quán)限定義中數(shù)據(jù)對(duì)象范圍。D6T-SQL語(yǔ)句權(quán)限說(shuō)明CREATEDATABASE創(chuàng)建數(shù)據(jù)庫(kù),只能由SA授予SQL服務(wù)器用戶(hù)CREATEPROCETURE創(chuàng)建存儲(chǔ)過(guò)程CREATERULE創(chuàng)建規(guī)則CREATETABLE創(chuàng)建表CREATEVIEW創(chuàng)建視圖BACKUPDATABASE備份數(shù)據(jù)庫(kù)BACKUPLOG備份日志文件SQLSERVER中系統(tǒng)特權(quán)適用的語(yǔ)句和權(quán)限說(shuō)明T-SQL語(yǔ)句權(quán)限說(shuō)明CREATEDATABASE創(chuàng)建數(shù)7對(duì)象特權(quán):類(lèi)似于數(shù)據(jù)庫(kù)操作語(yǔ)言DML的語(yǔ)句權(quán)限,它指用戶(hù)對(duì)數(shù)據(jù)庫(kù)中的表、視圖、存儲(chǔ)過(guò)程等對(duì)象的操作權(quán)限。對(duì)象對(duì)象特權(quán)語(yǔ)義表、視圖Select,insert,update,delete對(duì)表或視圖的查詢(xún)、插入、修改和刪除操作表和視圖的字段Select(<字段名>),update(<字段名>)允許對(duì)指定的字段查看或修改存儲(chǔ)過(guò)程execute運(yùn)行存儲(chǔ)過(guò)程對(duì)象特權(quán):類(lèi)似于數(shù)據(jù)庫(kù)操作語(yǔ)言DML的語(yǔ)句權(quán)限,它指用戶(hù)對(duì)數(shù)83.視圖視圖:為不同的用戶(hù)定義不同的視圖,通過(guò)視圖把數(shù)據(jù)對(duì)象限制在一定范圍內(nèi),把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取的用戶(hù)隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。4、審計(jì)審計(jì)功能就是把用戶(hù)對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái)放入審計(jì)日志中。一旦發(fā)生數(shù)據(jù)被非法存取,DBA可以利用審計(jì)跟蹤的信息,重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。3.視圖視圖:為不同的用戶(hù)定義不同的視圖,通過(guò)視圖把數(shù)據(jù)對(duì)9

加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintext)變換為不可直接識(shí)別的格式(密文,Ciphertext),從而使得不知道解密算法的人無(wú)法獲得數(shù)據(jù)的內(nèi)容。加密方法主要有兩種:替換方法。使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的字符。置換方法。僅將明文的字符按不同的順序重新排列。

5、數(shù)據(jù)加密機(jī)制加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintex107.1.2SQLServer的安全體系結(jié)構(gòu)和安全認(rèn)證模式

1.SQLServer的安全體系結(jié)構(gòu)

(1)操作系統(tǒng)的安全防線(xiàn):網(wǎng)絡(luò)管理員負(fù)責(zé)建立用戶(hù)組,設(shè)置帳號(hào)并注冊(cè),決定不同的用戶(hù)對(duì)不同系統(tǒng)資源的訪(fǎng)問(wèn)級(jí)別。(2)SQLServer的運(yùn)行安全防線(xiàn):通過(guò)另一種帳號(hào)設(shè)置來(lái)創(chuàng)建附加安全層。(3)SQLServer數(shù)據(jù)庫(kù)的安全防線(xiàn):特定數(shù)據(jù)庫(kù)都有自己的用戶(hù)和角色,該數(shù)據(jù)庫(kù)只能由它的用戶(hù)或角色訪(fǎng)問(wèn),其他用戶(hù)無(wú)權(quán)訪(fǎng)問(wèn)其數(shù)據(jù)。(4)SQLServer數(shù)據(jù)庫(kù)對(duì)象的安全防線(xiàn):對(duì)權(quán)限進(jìn)行管理,TSQL的DCL功能保證合法用戶(hù)既使進(jìn)入了數(shù)據(jù)庫(kù)也不能有超越權(quán)限的數(shù)據(jù)存取操作。7.1.2SQLServer的安全體系結(jié)構(gòu)和安全認(rèn)證模112.SQLServer的安全認(rèn)證模式(1)Windows(S)安全認(rèn)證模式

SQL服務(wù)器通過(guò)使用Windows網(wǎng)絡(luò)用戶(hù)的安全性來(lái)控制用戶(hù)對(duì)SQL服務(wù)器的登錄訪(fǎng)問(wèn)。它允許一個(gè)網(wǎng)絡(luò)用戶(hù)登錄到一個(gè)SQL服務(wù)器上時(shí)不必再提供一個(gè)單獨(dú)的登錄帳號(hào)及口令,從而實(shí)現(xiàn)SQL服務(wù)器與Windows(S)登錄的安全集成。(2)混合安全認(rèn)證模式

使用Windows(S)安全認(rèn)證模式或SQLServer安全認(rèn)證模式。SQLServer安全認(rèn)證模式要求用戶(hù)必須輸入有效的SQLServer登錄帳號(hào)及口令。在混合安全模式下,可以使用Windows網(wǎng)絡(luò)服務(wù)器的用戶(hù)賬號(hào)或SQLServer自身驗(yàn)證身份的登錄帳號(hào),兩者均有效。2.SQLServer的安全認(rèn)證模式(1)Window122.數(shù)據(jù)庫(kù)用戶(hù)的管理

(1)dbo用戶(hù)

dbo用戶(hù)即數(shù)據(jù)庫(kù)擁有者或數(shù)據(jù)庫(kù)創(chuàng)建者,dbo在其所擁有的數(shù)據(jù)庫(kù)中擁有所有的操作權(quán)限。dbo的身份可被重新分配給另一個(gè)用戶(hù),系統(tǒng)管理員Sa可以作為他所管理系統(tǒng)的任何數(shù)據(jù)庫(kù)的dbo用戶(hù)。(2)guest用戶(hù)

如果guest用戶(hù)在數(shù)據(jù)庫(kù)存在,則允許任意一個(gè)登錄用戶(hù)作為guest用戶(hù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),其中包括那些不是數(shù)據(jù)庫(kù)用戶(hù)的SQL服務(wù)器用戶(hù)。除系統(tǒng)數(shù)據(jù)庫(kù)master和臨時(shí)數(shù)據(jù)庫(kù)tempdb的guest用戶(hù)不能被刪除外,其他數(shù)據(jù)庫(kù)都可以將自己guest用戶(hù)刪除,以防止非數(shù)據(jù)庫(kù)用戶(hù)的登錄用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪(fǎng)問(wèn)。2.數(shù)據(jù)庫(kù)用戶(hù)的管理(1)dbo用戶(hù)

db137.2.1完整性約束條件及完整性控制7.2數(shù)據(jù)庫(kù)完整性及SQLServer的完整性控制根據(jù)約束條件針對(duì)的數(shù)據(jù)庫(kù)對(duì)象不同,可以分為:表級(jí)約束,若干元組間、關(guān)系中以及關(guān)系之間聯(lián)系的約束;元組級(jí)約束,元組中各個(gè)字段間聯(lián)系的約束;屬性級(jí)約束,針對(duì)列的類(lèi)型、取值范圍、精度、排序等而制定的約束條件。數(shù)據(jù)庫(kù)的完整性:指數(shù)據(jù)的正確性和相容性。完整性檢查:系統(tǒng)用一定的機(jī)制來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否滿(mǎn)足規(guī)定的條件(完整性約束條件),這些完整性約束條件將作為模式的一部分存入數(shù)據(jù)庫(kù)中。7.2.1完整性約束條件及完整性控制7.2數(shù)據(jù)庫(kù)完整141、靜態(tài)約束,數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿(mǎn)足的約束條件;(1)對(duì)數(shù)據(jù)類(lèi)型的約束。包括數(shù)據(jù)類(lèi)型、長(zhǎng)度、精度等。(2)對(duì)數(shù)據(jù)格式的約束:如規(guī)定學(xué)號(hào)的前兩位表示入學(xué)年份,第三位表示系的編號(hào),第四位表示專(zhuān)業(yè)編號(hào),第五位代表班的編號(hào)等等。(3)對(duì)取值范圍的約束:如學(xué)生的成績(jī)?nèi)∈狗秶鸀?一100。大學(xué)生的年齡為大于14等。(4)對(duì)空值的約束:

(5)靜態(tài)元組級(jí)約束:

是元組中各個(gè)字段之間聯(lián)系的約束

。如:開(kāi)始日期小于結(jié)束日期,發(fā)貨數(shù)量小于等于訂貨數(shù)量等,職工的最低工資不能低于規(guī)定的最低值等。(6)靜態(tài)表級(jí)約束:指若干元組之間、關(guān)系之間聯(lián)系的約束。約束條件所涉及對(duì)象的狀態(tài)不同,完整性約束可分為:1、靜態(tài)約束,數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿(mǎn)足的約束條15

數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊值之間所應(yīng)滿(mǎn)足的約束條件。如:將允許空值的列改為不允許空值時(shí),如果該列目前已存在空值,則拒絕這種修改。又:職工的工齡只能增加,職工工資在更改時(shí),規(guī)定新值不得少于舊值。2、動(dòng)態(tài)約束:數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊值之間所應(yīng)滿(mǎn)足16

7.2.2DBMS的完整性控制功能定義功能,提供定義完整性約束條件的機(jī)制。2)檢查功能,檢查用戶(hù)發(fā)出的操作請(qǐng)求,看其是否違背了完整性約束條件。3)控制功能,監(jiān)視數(shù)據(jù)操作的整個(gè)過(guò)程,如果發(fā)現(xiàn)有違背了完整性約束條件的情況,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。

7.2.2DBMS的完整性控制功能定義功能,提供定義177.2.3SQLServer數(shù)據(jù)完整性實(shí)現(xiàn)方法1.SQLServer的數(shù)據(jù)完整性的種類(lèi)實(shí)體完整性。實(shí)體完整性為表級(jí)完整性,它要求表中所有的元組都應(yīng)該有一個(gè)惟一的標(biāo)識(shí)符(主碼)。(2)參照完整性。

參照完整性是表級(jí)完整性,它維護(hù)參照表中的外碼與被參照表中主碼的相容關(guān)系。

如:在SC表中,有學(xué)號(hào)為’98001’的選課記錄,則S表中不允許刪除該學(xué)生的記錄。(3)域完整性。

域完整性為列級(jí)和元組級(jí)完整性。它為列或列組指定一個(gè)有效的數(shù)據(jù)集,并確定該列是否允許為空。7.2.3SQLServer數(shù)據(jù)完整性實(shí)現(xiàn)方法1.S182.SQLServer實(shí)現(xiàn)數(shù)據(jù)完整性的兩種方式完整性類(lèi)型約束類(lèi)型完整性功能描述域完整性DEFAULT插入數(shù)據(jù)時(shí),如果沒(méi)有明確提供列值,則用缺省值作為該列的值CHECK指定某個(gè)列或列組可以接受值的范圍,或指定數(shù)據(jù)應(yīng)滿(mǎn)足的條件實(shí)體完整性PRIMARYKEY指定主碼,確保主碼值不重復(fù),并不允許主碼為空值UNIQUE指出數(shù)據(jù)應(yīng)具有惟一值,防止出現(xiàn)冗余參照完整性FOREIGNKEY定義外碼、被參照表和其主碼(1)聲明數(shù)據(jù)完整性。

通過(guò)在定義表時(shí)聲明數(shù)據(jù)完整性。包括各種約束、缺省和規(guī)則。(2)過(guò)程數(shù)據(jù)完整性。

編寫(xiě)觸發(fā)器和存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)。2.SQLServer實(shí)現(xiàn)數(shù)據(jù)完整性的兩種方式完整性類(lèi)型197.3數(shù)據(jù)庫(kù)的并發(fā)控制事務(wù)是用戶(hù)定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,是一個(gè)完整的工作單元。一個(gè)事務(wù)可以是一條或一組SQL語(yǔ)句、或整個(gè)應(yīng)用程序。

數(shù)據(jù)庫(kù)是可供多個(gè)用戶(hù)共享的信息資源,允許多個(gè)用戶(hù)同時(shí)使用的數(shù)據(jù)庫(kù)系統(tǒng)為多用戶(hù)數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)的并發(fā)控制就是控制數(shù)據(jù)庫(kù),防止多用戶(hù)并發(fā)存取同一數(shù)據(jù)時(shí)造成的數(shù)據(jù)錯(cuò)誤,保證數(shù)據(jù)庫(kù)的一致性。7.3.1事務(wù)及并發(fā)控制的基本概念

1.事務(wù)的概念7.3數(shù)據(jù)庫(kù)的并發(fā)控制事務(wù)是用戶(hù)定義的一個(gè)數(shù)據(jù)庫(kù)操作20事務(wù)是一個(gè)用戶(hù)定義的完整的工作單元,一個(gè)事務(wù)內(nèi)的所有語(yǔ)句被作為整體執(zhí)行,要么全部執(zhí)行,要么全部不執(zhí)行,是不可分割的工作單位。例1:一個(gè)交付業(yè)務(wù)活動(dòng):賬戶(hù)A支付給賬戶(hù)B若干元錢(qián)(假設(shè)為N元)。這個(gè)支付操作包含兩個(gè)動(dòng)作:·第一個(gè):賬戶(hù)A一N·第二個(gè):賬戶(hù)B十N賬戶(hù)A支付給賬戶(hù)B若干元錢(qián)(假設(shè)為N元),如果在第一個(gè)動(dòng)作完成之后,在第二個(gè)動(dòng)作還沒(méi)有完成時(shí),系統(tǒng)突然停電了,那么這個(gè)支付活動(dòng)實(shí)際上是不成功的。這時(shí)正確狀態(tài)應(yīng)該是能夠撤消掉第—個(gè)動(dòng)作,即回到交付活動(dòng)開(kāi)始前的狀態(tài)。(事務(wù)是由系統(tǒng)自動(dòng)維護(hù)的。)事務(wù)是一個(gè)用戶(hù)定義的完整的工作單元,一個(gè)事務(wù)內(nèi)的所有語(yǔ)句21BEGINTRANSACTION:表示事務(wù)的開(kāi)始。COMMIT:表示事務(wù)的提交,即將事務(wù)中所有對(duì)數(shù)據(jù)的更新寫(xiě)回到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中。ROLLBACK:表示事務(wù)的回滾,即事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的操作全部撤消,回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。在SQL語(yǔ)言中,定義事務(wù)的語(yǔ)句有三條:BEGINTRANSACTION:表示事務(wù)的開(kāi)始。在SQL22事務(wù)的特性當(dāng)事務(wù)進(jìn)行到中間出現(xiàn)異常時(shí),系統(tǒng)會(huì)自動(dòng)地撤消事務(wù)中已完成的部分,從而保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)總是處于正確的狀態(tài)。事務(wù)作為一個(gè)完整的操作單元,具有如下特性:1.原子性:事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,事務(wù)中的操作要么都做,要么都不做。2.一致性:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。3.隔離性:一個(gè)事務(wù)的執(zhí)行不能受其他事務(wù)的干擾。在多用戶(hù)的并發(fā)情況下,保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)總是正確的。4.永久性:事務(wù)一旦結(jié)束,則其對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的影響就是永久的。事務(wù)的特性當(dāng)事務(wù)進(jìn)行到中間出現(xiàn)異常時(shí),系統(tǒng)會(huì)自動(dòng)地撤消事務(wù)23例如用事務(wù)完成如下操作:在S表中添加一條學(xué)生記錄,然后將這個(gè)學(xué)生的修課情況插入到SC表中。BEGINTRANSACTION

insertintos(s#,sn,sex)values('983103','吳天玲','女')insertintosc(s#,c#,score)values('983103','A001',null)COMMIT執(zhí)行完此事務(wù)后查看一下s表和sc表中的數(shù)據(jù),我們發(fā)現(xiàn)新插入的數(shù)據(jù)均在數(shù)據(jù)庫(kù)中。如果我們將此事務(wù)最后的COMMIT改為ROLLBACK,s表和sc表中的數(shù)據(jù)有什么變化?例如用事務(wù)完成如下操作:在S表中添加一條學(xué)生記錄,然后將242.事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致性時(shí)間甲事務(wù)數(shù)據(jù)庫(kù)中R的值乙事務(wù)t01000t1讀R=1000t2

讀R=1000t3R=R-200t4R=R-300t5UPDATERt6800UPDATERt7700(1)丟失更新當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù),并發(fā)執(zhí)行修改操作時(shí),T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成了數(shù)據(jù)的丟失更新問(wèn)題,導(dǎo)致數(shù)據(jù)的不一致。2.事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致性時(shí)間甲事務(wù)數(shù)據(jù)庫(kù)中25時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t01000t1讀R=1000t2

R=R-200t3UPDATERt4800讀R=800t5Rollbackt61000(2)臟讀事務(wù)T2讀取了T1更新后的數(shù)據(jù),其后T1由于某種原因撤消修改,數(shù)據(jù)R恢復(fù)原值,導(dǎo)致T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致。時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t01000t1讀26(3)不可重讀時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t01000t1讀R(1000)t2

讀R=1000t3R=R-300t4updateRt5700t6讀R同一數(shù)據(jù)庫(kù)中往往有多個(gè)事務(wù)并發(fā)執(zhí)行,如果不進(jìn)行并發(fā)控制,就會(huì)產(chǎn)生不一致性。

事務(wù)T1讀取數(shù)據(jù)R后,T2讀取并且更新了R,當(dāng)T1再次讀取R時(shí),得到的兩次讀取值不一致,這種現(xiàn)象為不可重讀。

(3)不可重讀時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t0277.3.2封鎖及封鎖協(xié)議一個(gè)環(huán)節(jié)是申請(qǐng)加鎖,即事務(wù)在操作前要對(duì)它將使用的數(shù)據(jù)提出加鎖請(qǐng)求;第二個(gè)環(huán)節(jié)是獲得鎖,即當(dāng)條件成熟時(shí),系統(tǒng)允許事務(wù)對(duì)數(shù)據(jù)加鎖,從而事務(wù)獲得數(shù)據(jù)的控制權(quán);第三個(gè)環(huán)節(jié)是釋放鎖,即完成操作后事務(wù)放棄數(shù)據(jù)的控制權(quán)。封鎖是使事務(wù)對(duì)它要操作的數(shù)據(jù)有一定的控制能力。封鎖具有3個(gè)環(huán)節(jié):并發(fā)控制:就是要用正確的方式調(diào)度并發(fā)操作,避免造成數(shù)據(jù)的不一致性,使一個(gè)用戶(hù)事務(wù)的執(zhí)行不受其它事務(wù)的干擾。并發(fā)控制的主要方法是采用封鎖機(jī)制(Locking)。7.3.2封鎖及封鎖協(xié)議一個(gè)環(huán)節(jié)是申請(qǐng)加鎖,即事務(wù)在操作281.鎖的類(lèi)型(1)

排它鎖(ExclusiveLocks,簡(jiǎn)稱(chēng)X鎖)。

排它鎖也稱(chēng)為獨(dú)占鎖或?qū)戞i。一旦事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上排它鎖(X鎖),則只允許T讀取和修改A,其他任何事務(wù)既不能讀取和修改A,也不能再對(duì)A加任何類(lèi)型的鎖,直到T釋放A上的鎖為止。(2)

共享鎖(ShareLocks,簡(jiǎn)稱(chēng)S鎖)。

共享鎖又稱(chēng)讀鎖。如果事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上共享鎖(S鎖),其他事務(wù)只能再對(duì)A加S鎖,不能加X(jué)鎖,直到事務(wù)T釋放A上的S鎖為止。

1.鎖的類(lèi)型(1)排它鎖(ExclusiveLocks292.封鎖協(xié)議(1)一級(jí)封鎖協(xié)議。

事務(wù)T在修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。(2)二級(jí)封鎖協(xié)議。

事務(wù)T對(duì)要修改數(shù)據(jù)必須先加X(jué)鎖,直到事務(wù)結(jié)束才釋放X鎖;對(duì)要讀取的數(shù)據(jù)必須先加S鎖,讀完后即可釋放S鎖。(3)三級(jí)封鎖協(xié)議。

事務(wù)T在讀取數(shù)據(jù)之前必須先對(duì)其加S鎖,在要修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束后才釋放所有鎖。在對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,如何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等。2.封鎖協(xié)議(1)一級(jí)封鎖協(xié)議。

事務(wù)T在修改數(shù)據(jù)之前必30事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致問(wèn)題

T1T2T1T2T1T21)讀A=20

1)讀A=50讀B=100求和=150

1)讀C=100C←C*2寫(xiě)回C

2)讀A=203)A←A-1寫(xiě)回A=19

2)

讀B=100B←B*2寫(xiě)回B=2002)

讀C=2004)A←A-1寫(xiě)回A=19(A少減一次)3)讀A=50讀B=200和=250(驗(yàn)算不對(duì))

3)ROLLBACKC恢復(fù)為100(錯(cuò)誤的C值已讀出)(a)丟失數(shù)據(jù)(b)不可重復(fù)讀(c)讀“臟”數(shù)據(jù)事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致問(wèn)題T1T2T1T2T1T31T1T2T1T2T1T21)XlockA獲得

1)SlockASlockB讀A=50讀B=100A+B=150

1)XlockC讀C=100C←C*2寫(xiě)回C=200

2)讀A=20

XlockA等待3)A←A-1寫(xiě)回A=19CommitUnlockA等待等待等待

2)

XlockB等待等待2)

SlockC等待等待3)讀A=50讀B=100A+B=150CommitUnlockAUnlockB等待

3)ROLLBACK(C恢復(fù)為100)UnlockC

等待等待

4)

獲得XlockA讀A=19A←A-1寫(xiě)回A=18CommitUnlock

4)

獲得Xlock讀B=100B←B*2寫(xiě)回B=200CommitUnlockB4)

獲得SlockC讀C=100CommitCUnlockC(a)沒(méi)有丟失修改(b)可重復(fù)讀(c)不讀“臟”數(shù)據(jù)T1T2T1T2T1T21)XlockA

1)Sloc32用封鎖機(jī)制解決三種數(shù)據(jù)不一致性的例子

X鎖S鎖一致性保證

操作結(jié)束釋放事務(wù)結(jié)束釋放操作結(jié)束釋放事務(wù)結(jié)束釋放不丟失修改不讀“臟”數(shù)據(jù)可重復(fù)讀一級(jí)協(xié)議

二級(jí)協(xié)議

√√

√√

三級(jí)協(xié)議

√√√√用封鎖機(jī)制解決三種數(shù)據(jù)不一致性的例子

X鎖S鎖一致性保證

337.3.3封鎖出現(xiàn)的問(wèn)題及解決方法活鎖和死鎖活鎖。

如:事務(wù)T1封鎖了數(shù)據(jù)R,T2事務(wù)又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R,當(dāng)T1釋放了R上的鎖后,系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2仍然等待。然后T4又請(qǐng)求封鎖R,當(dāng)T3釋放了R上的鎖后,系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求…,T2可能永遠(yuǎn)等待。在多個(gè)事務(wù)請(qǐng)求對(duì)同一數(shù)據(jù)封鎖時(shí),總是使某一用戶(hù)等待的情況稱(chēng)為活鎖。解決方法:采用先來(lái)先服務(wù)的方法,即對(duì)要求封鎖數(shù)據(jù)的事務(wù)排隊(duì),使前面的事務(wù)先獲得數(shù)據(jù)的封鎖權(quán)。7.3.3封鎖出現(xiàn)的問(wèn)題及解決方法活鎖和死鎖34(2)死鎖如果事務(wù)T1和T2都需要數(shù)據(jù)R1和R2,T1封鎖了數(shù)據(jù)R1,T2封鎖了數(shù)據(jù)R2;然后T1又請(qǐng)求封鎖R2,T2請(qǐng)求封鎖R1,事務(wù)T1、T2都等待對(duì)方釋放R1或R2上的鎖,但由于T1、T2都沒(méi)有獲得必要的數(shù)據(jù),所以它們不會(huì)結(jié)束,只能繼續(xù)等待。多事務(wù)交錯(cuò)等待的僵持局面稱(chēng)為死鎖。

解決死鎖有兩類(lèi)方法:一是采用一定措施來(lái)預(yù)防死鎖的發(fā)生;二是采用一定手段定期診斷系統(tǒng)中有無(wú)死鎖,若有則解除之。(撤消事務(wù))預(yù)防死鎖的方法:1)一次封鎖法:要求每個(gè)事務(wù)必須一次將所有要使用的數(shù)據(jù)全部加鎖,否則該事務(wù)不能繼續(xù)執(zhí)行。2)順序封鎖法:預(yù)先對(duì)數(shù)據(jù)對(duì)象規(guī)定一個(gè)封鎖順序,所有事務(wù)都按這個(gè)順序?qū)嵭蟹怄i。(2)死鎖357.4數(shù)據(jù)庫(kù)恢復(fù)技術(shù)

7.4.1故障的種類(lèi)1.事務(wù)內(nèi)部的故障

事務(wù)未運(yùn)行到正常終止點(diǎn)前被終止的情況。

事務(wù)內(nèi)部的故障有的是可以通過(guò)事務(wù)程序本身發(fā)現(xiàn)的,但是更多的則是非預(yù)期的,它們不能由事務(wù)處理程序處理。例如運(yùn)算溢出、并發(fā)事務(wù)發(fā)生死鎖而被選中撤消該事務(wù)、違反了某些完整性限制等。2.系統(tǒng)故障

系統(tǒng)故障是指造成系統(tǒng)停止運(yùn)轉(zhuǎn)的任何事件,從而使得系統(tǒng)必須重新啟動(dòng)。3.介質(zhì)故障

介質(zhì)故障指外存故障,例如磁盤(pán)損壞、磁頭碰撞,瞬時(shí)磁場(chǎng)干擾等。7.4數(shù)據(jù)庫(kù)恢復(fù)技術(shù)

7.4.1故障的種類(lèi)1.事務(wù)364.計(jì)算機(jī)病毒

計(jì)算機(jī)病毒是一種人為的故障或破壞。5.用戶(hù)操作錯(cuò)誤

由于用戶(hù)有意或無(wú)意的操作也可能刪除數(shù)據(jù)庫(kù)中的有用的數(shù)據(jù)或加入錯(cuò)誤的數(shù)據(jù),這同樣會(huì)造成一些潛在的故障。4.計(jì)算機(jī)病毒

計(jì)算機(jī)病毒是一種人為的故障或破壞。377.4.2數(shù)據(jù)庫(kù)恢復(fù)策略1、事務(wù)故障的恢復(fù)利用日志文件撤消(undo)此事務(wù)數(shù)據(jù)庫(kù)進(jìn)行的修改。事務(wù)故障的恢復(fù)一般是由系統(tǒng)自動(dòng)完成的。2、系統(tǒng)故障的恢復(fù)系統(tǒng)故障的恢復(fù)也是利用日志文件:撤消(undo)未完成的事務(wù)和重做(REDO)已完成的事務(wù)。系統(tǒng)故障的恢復(fù)是由系統(tǒng)在重新啟動(dòng)時(shí)自動(dòng)完成的。3、介質(zhì)故障的恢復(fù)重裝數(shù)據(jù)庫(kù)的后備副本,并重做已完成的事務(wù)。7.4.2數(shù)據(jù)庫(kù)恢復(fù)策略1、事務(wù)故障的恢復(fù)2、系統(tǒng)故障的恢387.4.3數(shù)據(jù)恢復(fù)的實(shí)現(xiàn)技術(shù)1.數(shù)據(jù)轉(zhuǎn)儲(chǔ)是數(shù)據(jù)庫(kù)恢復(fù)中采用的基本技術(shù),即DBA定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到磁帶或另一個(gè)磁盤(pán)上保存起來(lái)的過(guò)程。這種備用的數(shù)據(jù)文本稱(chēng)為后備副本。

數(shù)據(jù)轉(zhuǎn)儲(chǔ)有以下幾類(lèi):(1)靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)

數(shù)據(jù)庫(kù)轉(zhuǎn)儲(chǔ)過(guò)程中,是否允許其他事務(wù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改操作。

靜態(tài)轉(zhuǎn)儲(chǔ)優(yōu)點(diǎn):能得到數(shù)據(jù)一致性的副本。缺點(diǎn):降低了數(shù)據(jù)庫(kù)的可用性。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)優(yōu)點(diǎn):不影響事務(wù)的運(yùn)行,但副本上的數(shù)據(jù)可能是過(guò)時(shí)的數(shù)據(jù)。7.4.3數(shù)據(jù)恢復(fù)的實(shí)現(xiàn)技術(shù)1.數(shù)據(jù)轉(zhuǎn)儲(chǔ)39(2)海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。

海量轉(zhuǎn)儲(chǔ)是每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)。(對(duì)數(shù)據(jù)量大和更新頻率高的數(shù)據(jù)庫(kù),不適合頻繁地進(jìn)行。)增量轉(zhuǎn)儲(chǔ)是每次只轉(zhuǎn)儲(chǔ)上一次更新過(guò)的數(shù)據(jù)。(適合對(duì)數(shù)據(jù)量較大,且事務(wù)處理頻繁地DBS。)(2)海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是每次轉(zhuǎn)儲(chǔ)全部數(shù)402.登記日志文件(Logging)

日志文件是用來(lái)記錄對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。

(1)日志文件的作用。

日志文件的主要用于數(shù)據(jù)庫(kù)恢復(fù)。

當(dāng)數(shù)據(jù)庫(kù)文件毀壞后,可重新裝入后援副本把數(shù)據(jù)庫(kù)恢復(fù)到轉(zhuǎn)儲(chǔ)結(jié)束時(shí)刻的正確狀態(tài),再利用日志文件,把已完成的事務(wù)進(jìn)行重做處理。對(duì)未完成的事務(wù)做撤消處理。(2)登記日志文件為保證數(shù)據(jù)庫(kù)的可恢復(fù)性,登記日志文件時(shí)必須遵守兩條原則:一是登記的次序嚴(yán)格按事務(wù)執(zhí)行的時(shí)間次序,二是必須先寫(xiě)日志文件,后寫(xiě)數(shù)據(jù)庫(kù)。2.登記日志文件(Logging)

日志文件是用來(lái)記錄417.4.3SQLServer的數(shù)據(jù)備份和恢復(fù)機(jī)制SQLServer的三種備份形式:1)完全備份:將數(shù)據(jù)庫(kù)中的全部信息進(jìn)行備份,它是恢復(fù)的基線(xiàn)。不但備份數(shù)據(jù)庫(kù)的數(shù)據(jù)文件、日志文件,而且還備份文件的存儲(chǔ)位置信息以及數(shù)據(jù)庫(kù)中的全部對(duì)象。2)事務(wù)日志備份:備份發(fā)生在數(shù)據(jù)庫(kù)上的事務(wù)。3)增量備份:差異備份是備份從最近的完全備份之后對(duì)數(shù)據(jù)所作的修改,它以完全備份為基準(zhǔn)點(diǎn),即備份完全備份之后變化了的數(shù)據(jù)文件、日志文件以及數(shù)據(jù)庫(kù)中其他被修改了的對(duì)象。完全備份差異備份1差異備份2t圖6.2差異備份示意圖7.4.3SQLServer的數(shù)據(jù)備份和恢復(fù)機(jī)制SQ422.SQLServer的數(shù)據(jù)備份或恢復(fù)策略使用完全備份的策略:將最近一次的備份恢復(fù)。在完全備份基礎(chǔ)上使用事務(wù)日志備份的策略。備份步驟是:

1)定期進(jìn)行完全備份,例如一天一次或兩天一次。

2)更頻繁地進(jìn)行事務(wù)日志備份,如一小時(shí)一次或兩小時(shí)一次?;謴?fù)步驟是:

1)用最近一次完全備份恢復(fù)數(shù)據(jù)庫(kù)。

2)用最近一次完全備份之后創(chuàng)建的所有事務(wù)日志備份,按順序恢復(fù)完全備份之后發(fā)生在數(shù)據(jù)庫(kù)上的所有操作。2.SQLServer的數(shù)據(jù)備份或恢復(fù)策略使用完全備份的43同時(shí)使用三種備份的策略:在使用數(shù)據(jù)庫(kù)完全備份和事務(wù)日志備份的基礎(chǔ)上,再以增量備份作為補(bǔ)充。備份步驟是:

1)定期進(jìn)行完全備份,例如一天一次或兩天一次。

2)進(jìn)行增量備份,如六小時(shí)一次3)進(jìn)行事務(wù)日志備份,如兩小時(shí)一次。

恢復(fù)步驟是:

1)用最近一次完全備份恢復(fù)數(shù)據(jù)庫(kù)。

2)用最近一次的增量備份恢復(fù)數(shù)據(jù)庫(kù)。3)用最近一次完全備份之后創(chuàng)建的所有事務(wù)日志備份,按順序恢復(fù)完全備份之后發(fā)生在數(shù)據(jù)庫(kù)上的所有操作。同時(shí)使用三種備份的策略:在使用數(shù)據(jù)庫(kù)完全備份和事務(wù)日志備份的44本章結(jié)束本章結(jié)束45第7章數(shù)據(jù)庫(kù)的安全保護(hù)第7章數(shù)據(jù)庫(kù)的安全保護(hù)467.1數(shù)據(jù)庫(kù)的安全性及SQLServer的安全保護(hù)技術(shù)用戶(hù)DBMSOSDB用戶(hù)標(biāo)識(shí)和鑒別存取控制操作系統(tǒng)安全保護(hù)密碼存儲(chǔ)數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),以防止不合法的使用造成的數(shù)據(jù)泄密、更改或破壞。7.1.1數(shù)據(jù)庫(kù)安全性控制的一般方法圖1數(shù)據(jù)庫(kù)系統(tǒng)的安全模型7.1數(shù)據(jù)庫(kù)的安全性及SQLServer的安全保護(hù)技術(shù)471.用戶(hù)標(biāo)識(shí)與鑒別(1)用輸入用戶(hù)名(用戶(hù)標(biāo)識(shí)號(hào))來(lái)標(biāo)明用戶(hù)身份。

系統(tǒng)內(nèi)部記錄著所有合法用戶(hù)的標(biāo)識(shí)。系統(tǒng)對(duì)輸入的用戶(hù)名與合法用戶(hù)名對(duì)照,鑒別此用戶(hù)是否為合法用戶(hù)。(2)通過(guò)回答口令標(biāo)識(shí)用戶(hù)身份。

系統(tǒng)常常要求用戶(hù)輸入口令,只有口令正確才能進(jìn)入系統(tǒng)。為保密起見(jiàn),口令由用戶(hù)自己定義并可以隨時(shí)變更。為防止口令被人竊取,用戶(hù)在終端上輸入口令時(shí),不把口令的內(nèi)容顯示在屏幕上,而用字符“*”替代其內(nèi)容。(3)通過(guò)回答對(duì)隨機(jī)數(shù)的運(yùn)算結(jié)果表明用戶(hù)身份。

系統(tǒng)提供一個(gè)隨機(jī)數(shù),用戶(hù)根據(jù)預(yù)先約定的計(jì)算過(guò)程或計(jì)算函數(shù)進(jìn)行計(jì)算,并將計(jì)算結(jié)果輸給到計(jì)算機(jī)。系統(tǒng)根據(jù)用戶(hù)計(jì)算結(jié)果判定用戶(hù)是否合法。

1.用戶(hù)標(biāo)識(shí)與鑒別(1)用輸入用戶(hù)名(用戶(hù)標(biāo)識(shí)號(hào))來(lái)標(biāo)明482.存取控制授權(quán)定義

具有授權(quán)資格的用戶(hù),如數(shù)據(jù)庫(kù)管理員DBA或建表戶(hù)DBO,通過(guò)數(shù)據(jù)控制語(yǔ)言DCL,將授權(quán)決定告知數(shù)據(jù)庫(kù)管理系統(tǒng)。(1)數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)以下3步來(lái)實(shí)現(xiàn)數(shù)據(jù)控制:存權(quán)處理數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS把授權(quán)的結(jié)果編譯后存入數(shù)據(jù)字典中。查權(quán)操作當(dāng)用戶(hù)提出操作請(qǐng)求時(shí),系統(tǒng)要在數(shù)據(jù)字典中查找該用戶(hù)的數(shù)據(jù)操作權(quán)限,當(dāng)用戶(hù)擁有該操作權(quán)時(shí)才能執(zhí)行其操作,否則系統(tǒng)將拒絕其操作。2.存取控制授權(quán)定義(1)數(shù)據(jù)庫(kù)系統(tǒng)通過(guò)以下3步來(lái)實(shí)現(xiàn)數(shù)據(jù)49(2)關(guān)系中的用戶(hù)權(quán)限

用戶(hù)權(quán)限主要包括數(shù)據(jù)對(duì)象和操作類(lèi)型兩個(gè)要素。通過(guò)授權(quán)規(guī)定用戶(hù)可以對(duì)哪些數(shù)據(jù)對(duì)象進(jìn)行哪些類(lèi)型的操作。數(shù)據(jù)對(duì)象操作類(lèi)型模式、外模式、內(nèi)模式建立、修改、檢索表或者記錄、字段查找、插入、修改、刪除(3)SQL的數(shù)據(jù)控制功能SQL的數(shù)據(jù)控制功能為GRANT語(yǔ)句(授權(quán))和REVOKE語(yǔ)句(收權(quán))。系統(tǒng)特權(quán):GRANT

CREATEDATABASE,BACKUPDATABASETO

王平對(duì)象特權(quán):GRANTselect,update(s#)onsto王平(2)關(guān)系中的用戶(hù)權(quán)限

用戶(hù)權(quán)限主要包括數(shù)據(jù)對(duì)象和操作類(lèi)型兩50(4)授權(quán)機(jī)制

授權(quán)粒度:用戶(hù)權(quán)限定義中數(shù)據(jù)對(duì)象范圍。在關(guān)系數(shù)據(jù)庫(kù)中,授權(quán)粒度包括關(guān)系、記錄或?qū)傩?。授?quán)粒度越細(xì),授權(quán)子系統(tǒng)就越靈活,但系統(tǒng)定義與檢查權(quán)限的開(kāi)銷(xiāo)也會(huì)相應(yīng)地增大。

DBA不需要進(jìn)行授權(quán)就可進(jìn)行數(shù)據(jù)庫(kù)內(nèi)的任何操作。數(shù)據(jù)對(duì)象的創(chuàng)建者(dbo)自動(dòng)獲得對(duì)于該數(shù)據(jù)對(duì)象的所有操作權(quán)限。獲得數(shù)據(jù)操作權(quán)的用戶(hù)可以通過(guò)GRANT語(yǔ)句把權(quán)限轉(zhuǎn)授給其他用戶(hù)。(4)授權(quán)機(jī)制

授權(quán)粒度:用戶(hù)權(quán)限定義中數(shù)據(jù)對(duì)象范圍。D51T-SQL語(yǔ)句權(quán)限說(shuō)明CREATEDATABASE創(chuàng)建數(shù)據(jù)庫(kù),只能由SA授予SQL服務(wù)器用戶(hù)CREATEPROCETURE創(chuàng)建存儲(chǔ)過(guò)程CREATERULE創(chuàng)建規(guī)則CREATETABLE創(chuàng)建表CREATEVIEW創(chuàng)建視圖BACKUPDATABASE備份數(shù)據(jù)庫(kù)BACKUPLOG備份日志文件SQLSERVER中系統(tǒng)特權(quán)適用的語(yǔ)句和權(quán)限說(shuō)明T-SQL語(yǔ)句權(quán)限說(shuō)明CREATEDATABASE創(chuàng)建數(shù)52對(duì)象特權(quán):類(lèi)似于數(shù)據(jù)庫(kù)操作語(yǔ)言DML的語(yǔ)句權(quán)限,它指用戶(hù)對(duì)數(shù)據(jù)庫(kù)中的表、視圖、存儲(chǔ)過(guò)程等對(duì)象的操作權(quán)限。對(duì)象對(duì)象特權(quán)語(yǔ)義表、視圖Select,insert,update,delete對(duì)表或視圖的查詢(xún)、插入、修改和刪除操作表和視圖的字段Select(<字段名>),update(<字段名>)允許對(duì)指定的字段查看或修改存儲(chǔ)過(guò)程execute運(yùn)行存儲(chǔ)過(guò)程對(duì)象特權(quán):類(lèi)似于數(shù)據(jù)庫(kù)操作語(yǔ)言DML的語(yǔ)句權(quán)限,它指用戶(hù)對(duì)數(shù)533.視圖視圖:為不同的用戶(hù)定義不同的視圖,通過(guò)視圖把數(shù)據(jù)對(duì)象限制在一定范圍內(nèi),把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取的用戶(hù)隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。4、審計(jì)審計(jì)功能就是把用戶(hù)對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái)放入審計(jì)日志中。一旦發(fā)生數(shù)據(jù)被非法存取,DBA可以利用審計(jì)跟蹤的信息,重現(xiàn)導(dǎo)致數(shù)據(jù)庫(kù)現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。3.視圖視圖:為不同的用戶(hù)定義不同的視圖,通過(guò)視圖把數(shù)據(jù)對(duì)54

加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintext)變換為不可直接識(shí)別的格式(密文,Ciphertext),從而使得不知道解密算法的人無(wú)法獲得數(shù)據(jù)的內(nèi)容。加密方法主要有兩種:替換方法。使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的字符。置換方法。僅將明文的字符按不同的順序重新排列。

5、數(shù)據(jù)加密機(jī)制加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintex557.1.2SQLServer的安全體系結(jié)構(gòu)和安全認(rèn)證模式

1.SQLServer的安全體系結(jié)構(gòu)

(1)操作系統(tǒng)的安全防線(xiàn):網(wǎng)絡(luò)管理員負(fù)責(zé)建立用戶(hù)組,設(shè)置帳號(hào)并注冊(cè),決定不同的用戶(hù)對(duì)不同系統(tǒng)資源的訪(fǎng)問(wèn)級(jí)別。(2)SQLServer的運(yùn)行安全防線(xiàn):通過(guò)另一種帳號(hào)設(shè)置來(lái)創(chuàng)建附加安全層。(3)SQLServer數(shù)據(jù)庫(kù)的安全防線(xiàn):特定數(shù)據(jù)庫(kù)都有自己的用戶(hù)和角色,該數(shù)據(jù)庫(kù)只能由它的用戶(hù)或角色訪(fǎng)問(wèn),其他用戶(hù)無(wú)權(quán)訪(fǎng)問(wèn)其數(shù)據(jù)。(4)SQLServer數(shù)據(jù)庫(kù)對(duì)象的安全防線(xiàn):對(duì)權(quán)限進(jìn)行管理,TSQL的DCL功能保證合法用戶(hù)既使進(jìn)入了數(shù)據(jù)庫(kù)也不能有超越權(quán)限的數(shù)據(jù)存取操作。7.1.2SQLServer的安全體系結(jié)構(gòu)和安全認(rèn)證模562.SQLServer的安全認(rèn)證模式(1)Windows(S)安全認(rèn)證模式

SQL服務(wù)器通過(guò)使用Windows網(wǎng)絡(luò)用戶(hù)的安全性來(lái)控制用戶(hù)對(duì)SQL服務(wù)器的登錄訪(fǎng)問(wèn)。它允許一個(gè)網(wǎng)絡(luò)用戶(hù)登錄到一個(gè)SQL服務(wù)器上時(shí)不必再提供一個(gè)單獨(dú)的登錄帳號(hào)及口令,從而實(shí)現(xiàn)SQL服務(wù)器與Windows(S)登錄的安全集成。(2)混合安全認(rèn)證模式

使用Windows(S)安全認(rèn)證模式或SQLServer安全認(rèn)證模式。SQLServer安全認(rèn)證模式要求用戶(hù)必須輸入有效的SQLServer登錄帳號(hào)及口令。在混合安全模式下,可以使用Windows網(wǎng)絡(luò)服務(wù)器的用戶(hù)賬號(hào)或SQLServer自身驗(yàn)證身份的登錄帳號(hào),兩者均有效。2.SQLServer的安全認(rèn)證模式(1)Window572.數(shù)據(jù)庫(kù)用戶(hù)的管理

(1)dbo用戶(hù)

dbo用戶(hù)即數(shù)據(jù)庫(kù)擁有者或數(shù)據(jù)庫(kù)創(chuàng)建者,dbo在其所擁有的數(shù)據(jù)庫(kù)中擁有所有的操作權(quán)限。dbo的身份可被重新分配給另一個(gè)用戶(hù),系統(tǒng)管理員Sa可以作為他所管理系統(tǒng)的任何數(shù)據(jù)庫(kù)的dbo用戶(hù)。(2)guest用戶(hù)

如果guest用戶(hù)在數(shù)據(jù)庫(kù)存在,則允許任意一個(gè)登錄用戶(hù)作為guest用戶(hù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),其中包括那些不是數(shù)據(jù)庫(kù)用戶(hù)的SQL服務(wù)器用戶(hù)。除系統(tǒng)數(shù)據(jù)庫(kù)master和臨時(shí)數(shù)據(jù)庫(kù)tempdb的guest用戶(hù)不能被刪除外,其他數(shù)據(jù)庫(kù)都可以將自己guest用戶(hù)刪除,以防止非數(shù)據(jù)庫(kù)用戶(hù)的登錄用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪(fǎng)問(wèn)。2.數(shù)據(jù)庫(kù)用戶(hù)的管理(1)dbo用戶(hù)

db587.2.1完整性約束條件及完整性控制7.2數(shù)據(jù)庫(kù)完整性及SQLServer的完整性控制根據(jù)約束條件針對(duì)的數(shù)據(jù)庫(kù)對(duì)象不同,可以分為:表級(jí)約束,若干元組間、關(guān)系中以及關(guān)系之間聯(lián)系的約束;元組級(jí)約束,元組中各個(gè)字段間聯(lián)系的約束;屬性級(jí)約束,針對(duì)列的類(lèi)型、取值范圍、精度、排序等而制定的約束條件。數(shù)據(jù)庫(kù)的完整性:指數(shù)據(jù)的正確性和相容性。完整性檢查:系統(tǒng)用一定的機(jī)制來(lái)檢查數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否滿(mǎn)足規(guī)定的條件(完整性約束條件),這些完整性約束條件將作為模式的一部分存入數(shù)據(jù)庫(kù)中。7.2.1完整性約束條件及完整性控制7.2數(shù)據(jù)庫(kù)完整591、靜態(tài)約束,數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿(mǎn)足的約束條件;(1)對(duì)數(shù)據(jù)類(lèi)型的約束。包括數(shù)據(jù)類(lèi)型、長(zhǎng)度、精度等。(2)對(duì)數(shù)據(jù)格式的約束:如規(guī)定學(xué)號(hào)的前兩位表示入學(xué)年份,第三位表示系的編號(hào),第四位表示專(zhuān)業(yè)編號(hào),第五位代表班的編號(hào)等等。(3)對(duì)取值范圍的約束:如學(xué)生的成績(jī)?nèi)∈狗秶鸀?一100。大學(xué)生的年齡為大于14等。(4)對(duì)空值的約束:

(5)靜態(tài)元組級(jí)約束:

是元組中各個(gè)字段之間聯(lián)系的約束

。如:開(kāi)始日期小于結(jié)束日期,發(fā)貨數(shù)量小于等于訂貨數(shù)量等,職工的最低工資不能低于規(guī)定的最低值等。(6)靜態(tài)表級(jí)約束:指若干元組之間、關(guān)系之間聯(lián)系的約束。約束條件所涉及對(duì)象的狀態(tài)不同,完整性約束可分為:1、靜態(tài)約束,數(shù)據(jù)庫(kù)每一確定狀態(tài)時(shí)的數(shù)據(jù)對(duì)象所應(yīng)滿(mǎn)足的約束條60

數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊值之間所應(yīng)滿(mǎn)足的約束條件。如:將允許空值的列改為不允許空值時(shí),如果該列目前已存在空值,則拒絕這種修改。又:職工的工齡只能增加,職工工資在更改時(shí),規(guī)定新值不得少于舊值。2、動(dòng)態(tài)約束:數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新、舊值之間所應(yīng)滿(mǎn)足61

7.2.2DBMS的完整性控制功能定義功能,提供定義完整性約束條件的機(jī)制。2)檢查功能,檢查用戶(hù)發(fā)出的操作請(qǐng)求,看其是否違背了完整性約束條件。3)控制功能,監(jiān)視數(shù)據(jù)操作的整個(gè)過(guò)程,如果發(fā)現(xiàn)有違背了完整性約束條件的情況,則采取一定的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。

7.2.2DBMS的完整性控制功能定義功能,提供定義627.2.3SQLServer數(shù)據(jù)完整性實(shí)現(xiàn)方法1.SQLServer的數(shù)據(jù)完整性的種類(lèi)實(shí)體完整性。實(shí)體完整性為表級(jí)完整性,它要求表中所有的元組都應(yīng)該有一個(gè)惟一的標(biāo)識(shí)符(主碼)。(2)參照完整性。

參照完整性是表級(jí)完整性,它維護(hù)參照表中的外碼與被參照表中主碼的相容關(guān)系。

如:在SC表中,有學(xué)號(hào)為’98001’的選課記錄,則S表中不允許刪除該學(xué)生的記錄。(3)域完整性。

域完整性為列級(jí)和元組級(jí)完整性。它為列或列組指定一個(gè)有效的數(shù)據(jù)集,并確定該列是否允許為空。7.2.3SQLServer數(shù)據(jù)完整性實(shí)現(xiàn)方法1.S632.SQLServer實(shí)現(xiàn)數(shù)據(jù)完整性的兩種方式完整性類(lèi)型約束類(lèi)型完整性功能描述域完整性DEFAULT插入數(shù)據(jù)時(shí),如果沒(méi)有明確提供列值,則用缺省值作為該列的值CHECK指定某個(gè)列或列組可以接受值的范圍,或指定數(shù)據(jù)應(yīng)滿(mǎn)足的條件實(shí)體完整性PRIMARYKEY指定主碼,確保主碼值不重復(fù),并不允許主碼為空值UNIQUE指出數(shù)據(jù)應(yīng)具有惟一值,防止出現(xiàn)冗余參照完整性FOREIGNKEY定義外碼、被參照表和其主碼(1)聲明數(shù)據(jù)完整性。

通過(guò)在定義表時(shí)聲明數(shù)據(jù)完整性。包括各種約束、缺省和規(guī)則。(2)過(guò)程數(shù)據(jù)完整性。

編寫(xiě)觸發(fā)器和存儲(chǔ)過(guò)程來(lái)實(shí)現(xiàn)。2.SQLServer實(shí)現(xiàn)數(shù)據(jù)完整性的兩種方式完整性類(lèi)型647.3數(shù)據(jù)庫(kù)的并發(fā)控制事務(wù)是用戶(hù)定義的一個(gè)數(shù)據(jù)庫(kù)操作序列,是一個(gè)完整的工作單元。一個(gè)事務(wù)可以是一條或一組SQL語(yǔ)句、或整個(gè)應(yīng)用程序。

數(shù)據(jù)庫(kù)是可供多個(gè)用戶(hù)共享的信息資源,允許多個(gè)用戶(hù)同時(shí)使用的數(shù)據(jù)庫(kù)系統(tǒng)為多用戶(hù)數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)的并發(fā)控制就是控制數(shù)據(jù)庫(kù),防止多用戶(hù)并發(fā)存取同一數(shù)據(jù)時(shí)造成的數(shù)據(jù)錯(cuò)誤,保證數(shù)據(jù)庫(kù)的一致性。7.3.1事務(wù)及并發(fā)控制的基本概念

1.事務(wù)的概念7.3數(shù)據(jù)庫(kù)的并發(fā)控制事務(wù)是用戶(hù)定義的一個(gè)數(shù)據(jù)庫(kù)操作65事務(wù)是一個(gè)用戶(hù)定義的完整的工作單元,一個(gè)事務(wù)內(nèi)的所有語(yǔ)句被作為整體執(zhí)行,要么全部執(zhí)行,要么全部不執(zhí)行,是不可分割的工作單位。例1:一個(gè)交付業(yè)務(wù)活動(dòng):賬戶(hù)A支付給賬戶(hù)B若干元錢(qián)(假設(shè)為N元)。這個(gè)支付操作包含兩個(gè)動(dòng)作:·第一個(gè):賬戶(hù)A一N·第二個(gè):賬戶(hù)B十N賬戶(hù)A支付給賬戶(hù)B若干元錢(qián)(假設(shè)為N元),如果在第一個(gè)動(dòng)作完成之后,在第二個(gè)動(dòng)作還沒(méi)有完成時(shí),系統(tǒng)突然停電了,那么這個(gè)支付活動(dòng)實(shí)際上是不成功的。這時(shí)正確狀態(tài)應(yīng)該是能夠撤消掉第—個(gè)動(dòng)作,即回到交付活動(dòng)開(kāi)始前的狀態(tài)。(事務(wù)是由系統(tǒng)自動(dòng)維護(hù)的。)事務(wù)是一個(gè)用戶(hù)定義的完整的工作單元,一個(gè)事務(wù)內(nèi)的所有語(yǔ)句66BEGINTRANSACTION:表示事務(wù)的開(kāi)始。COMMIT:表示事務(wù)的提交,即將事務(wù)中所有對(duì)數(shù)據(jù)的更新寫(xiě)回到磁盤(pán)上的物理數(shù)據(jù)庫(kù)中。ROLLBACK:表示事務(wù)的回滾,即事務(wù)運(yùn)行的過(guò)程中發(fā)生了某種故障,事務(wù)不能繼續(xù)執(zhí)行,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫(kù)的所有已完成的操作全部撤消,回滾到事務(wù)開(kāi)始時(shí)的狀態(tài)。在SQL語(yǔ)言中,定義事務(wù)的語(yǔ)句有三條:BEGINTRANSACTION:表示事務(wù)的開(kāi)始。在SQL67事務(wù)的特性當(dāng)事務(wù)進(jìn)行到中間出現(xiàn)異常時(shí),系統(tǒng)會(huì)自動(dòng)地撤消事務(wù)中已完成的部分,從而保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)總是處于正確的狀態(tài)。事務(wù)作為一個(gè)完整的操作單元,具有如下特性:1.原子性:事務(wù)是數(shù)據(jù)庫(kù)的邏輯工作單位,事務(wù)中的操作要么都做,要么都不做。2.一致性:事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。3.隔離性:一個(gè)事務(wù)的執(zhí)行不能受其他事務(wù)的干擾。在多用戶(hù)的并發(fā)情況下,保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)總是正確的。4.永久性:事務(wù)一旦結(jié)束,則其對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的影響就是永久的。事務(wù)的特性當(dāng)事務(wù)進(jìn)行到中間出現(xiàn)異常時(shí),系統(tǒng)會(huì)自動(dòng)地撤消事務(wù)68例如用事務(wù)完成如下操作:在S表中添加一條學(xué)生記錄,然后將這個(gè)學(xué)生的修課情況插入到SC表中。BEGINTRANSACTION

insertintos(s#,sn,sex)values('983103','吳天玲','女')insertintosc(s#,c#,score)values('983103','A001',null)COMMIT執(zhí)行完此事務(wù)后查看一下s表和sc表中的數(shù)據(jù),我們發(fā)現(xiàn)新插入的數(shù)據(jù)均在數(shù)據(jù)庫(kù)中。如果我們將此事務(wù)最后的COMMIT改為ROLLBACK,s表和sc表中的數(shù)據(jù)有什么變化?例如用事務(wù)完成如下操作:在S表中添加一條學(xué)生記錄,然后將692.事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致性時(shí)間甲事務(wù)數(shù)據(jù)庫(kù)中R的值乙事務(wù)t01000t1讀R=1000t2

讀R=1000t3R=R-200t4R=R-300t5UPDATERt6800UPDATERt7700(1)丟失更新當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù),并發(fā)執(zhí)行修改操作時(shí),T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成了數(shù)據(jù)的丟失更新問(wèn)題,導(dǎo)致數(shù)據(jù)的不一致。2.事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致性時(shí)間甲事務(wù)數(shù)據(jù)庫(kù)中70時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t01000t1讀R=1000t2

R=R-200t3UPDATERt4800讀R=800t5Rollbackt61000(2)臟讀事務(wù)T2讀取了T1更新后的數(shù)據(jù),其后T1由于某種原因撤消修改,數(shù)據(jù)R恢復(fù)原值,導(dǎo)致T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致。時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t01000t1讀71(3)不可重讀時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t01000t1讀R(1000)t2

讀R=1000t3R=R-300t4updateRt5700t6讀R同一數(shù)據(jù)庫(kù)中往往有多個(gè)事務(wù)并發(fā)執(zhí)行,如果不進(jìn)行并發(fā)控制,就會(huì)產(chǎn)生不一致性。

事務(wù)T1讀取數(shù)據(jù)R后,T2讀取并且更新了R,當(dāng)T1再次讀取R時(shí),得到的兩次讀取值不一致,這種現(xiàn)象為不可重讀。

(3)不可重讀時(shí)間甲事務(wù)T1數(shù)據(jù)庫(kù)中R的值乙事務(wù)T2t0727.3.2封鎖及封鎖協(xié)議一個(gè)環(huán)節(jié)是申請(qǐng)加鎖,即事務(wù)在操作前要對(duì)它將使用的數(shù)據(jù)提出加鎖請(qǐng)求;第二個(gè)環(huán)節(jié)是獲得鎖,即當(dāng)條件成熟時(shí),系統(tǒng)允許事務(wù)對(duì)數(shù)據(jù)加鎖,從而事務(wù)獲得數(shù)據(jù)的控制權(quán);第三個(gè)環(huán)節(jié)是釋放鎖,即完成操作后事務(wù)放棄數(shù)據(jù)的控制權(quán)。封鎖是使事務(wù)對(duì)它要操作的數(shù)據(jù)有一定的控制能力。封鎖具有3個(gè)環(huán)節(jié):并發(fā)控制:就是要用正確的方式調(diào)度并發(fā)操作,避免造成數(shù)據(jù)的不一致性,使一個(gè)用戶(hù)事務(wù)的執(zhí)行不受其它事務(wù)的干擾。并發(fā)控制的主要方法是采用封鎖機(jī)制(Locking)。7.3.2封鎖及封鎖協(xié)議一個(gè)環(huán)節(jié)是申請(qǐng)加鎖,即事務(wù)在操作731.鎖的類(lèi)型(1)

排它鎖(ExclusiveLocks,簡(jiǎn)稱(chēng)X鎖)。

排它鎖也稱(chēng)為獨(dú)占鎖或?qū)戞i。一旦事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上排它鎖(X鎖),則只允許T讀取和修改A,其他任何事務(wù)既不能讀取和修改A,也不能再對(duì)A加任何類(lèi)型的鎖,直到T釋放A上的鎖為止。(2)

共享鎖(ShareLocks,簡(jiǎn)稱(chēng)S鎖)。

共享鎖又稱(chēng)讀鎖。如果事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上共享鎖(S鎖),其他事務(wù)只能再對(duì)A加S鎖,不能加X(jué)鎖,直到事務(wù)T釋放A上的S鎖為止。

1.鎖的類(lèi)型(1)排它鎖(ExclusiveLocks742.封鎖協(xié)議(1)一級(jí)封鎖協(xié)議。

事務(wù)T在修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。(2)二級(jí)封鎖協(xié)議。

事務(wù)T對(duì)要修改數(shù)據(jù)必須先加X(jué)鎖,直到事務(wù)結(jié)束才釋放X鎖;對(duì)要讀取的數(shù)據(jù)必須先加S鎖,讀完后即可釋放S鎖。(3)三級(jí)封鎖協(xié)議。

事務(wù)T在讀取數(shù)據(jù)之前必須先對(duì)其加S鎖,在要修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束后才釋放所有鎖。在對(duì)數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則,如何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等。2.封鎖協(xié)議(1)一級(jí)封鎖協(xié)議。

事務(wù)T在修改數(shù)據(jù)之前必75事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致問(wèn)題

T1T2T1T2T1T21)讀A=20

1)讀A=50讀B=100求和=150

1)讀C=100C←C*2寫(xiě)回C

2)讀A=203)A←A-1寫(xiě)回A=19

2)

讀B=100B←B*2寫(xiě)回B=2002)

讀C=2004)A←A-1寫(xiě)回A=19(A少減一次)3)讀A=50讀B=200和=250(驗(yàn)算不對(duì))

3)ROLLBACKC恢復(fù)為100(錯(cuò)誤的C值已讀出)(a)丟失數(shù)據(jù)(b)不可重復(fù)讀(c)讀“臟”數(shù)據(jù)事務(wù)并發(fā)操作可能產(chǎn)生的數(shù)據(jù)不一致問(wèn)題T1T2T1T2T1T76T1T2T1T2T1T21)XlockA獲得

1)SlockASlockB讀A=50讀B=100A+B=150

1)XlockC讀C=100C←C*2寫(xiě)回C=200

2)讀A=20

XlockA等待3)A←A-1寫(xiě)回A=19CommitUnlockA等待等待等待

2)

XlockB等待等待2)

SlockC等待等待3)讀A=50讀B=100A+B=150CommitUnlockAUnlockB等待

3)ROLLBACK(C恢復(fù)為100)UnlockC

等待等待

4)

獲得XlockA讀A=19A←A-1寫(xiě)回A=18CommitUnlock

4)

獲得Xlock讀B=100B←B*2寫(xiě)回B=200CommitUnlockB4)

獲得SlockC讀C=100CommitCUnlockC(a)沒(méi)有丟失修改(b)可重復(fù)讀(c)不讀“臟”數(shù)據(jù)T1T2T1T2T1T21)XlockA

1)Sloc77用封鎖機(jī)制解決三種數(shù)據(jù)不一致性的例子

X鎖S鎖一致性保證

操作結(jié)束釋放事務(wù)結(jié)束釋放操作結(jié)束釋放事務(wù)結(jié)束釋放不丟失修改不讀“臟”數(shù)據(jù)可重復(fù)讀一級(jí)協(xié)議

二級(jí)協(xié)議

√√

√√

三級(jí)協(xié)議

√√√√用封鎖機(jī)制解決三種數(shù)據(jù)不一致性的例子

X鎖S鎖一致性保證

787.3.3封鎖出現(xiàn)的問(wèn)題及解決方法活鎖和死鎖活鎖。

如:事務(wù)T1封鎖了數(shù)據(jù)R,T2事務(wù)又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R,當(dāng)T1釋放了R上的鎖后,系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2仍然等待。然后T4又請(qǐng)求封鎖R,當(dāng)T3釋放了R上的鎖后,系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求…,T2可能永遠(yuǎn)等待。在多個(gè)事務(wù)請(qǐng)求對(duì)同一數(shù)據(jù)封鎖時(shí),總是使某一用戶(hù)等待的情況稱(chēng)為活鎖。解決方法:采用先來(lái)先服務(wù)的方法,即對(duì)要求封鎖數(shù)據(jù)的事務(wù)排隊(duì),使前面的事務(wù)先獲得數(shù)據(jù)的封鎖權(quán)。7.3.3封鎖出現(xiàn)的問(wèn)題及解決方法活鎖和死鎖79(2)死鎖如果事務(wù)T1和T2都需要數(shù)據(jù)R1和R2,T1封鎖了數(shù)據(jù)R1,T2封鎖了數(shù)據(jù)R2;然后T1又請(qǐng)求封鎖R2,T2請(qǐng)求封鎖R1,事務(wù)T1、T2都等待對(duì)方釋放R1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論