版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)據(jù)庫(kù)安全保護(hù)第一頁(yè),共一百零二頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)的安全性5.2完整性控制5.3并發(fā)控制與封鎖5.4數(shù)據(jù)庫(kù)的恢復(fù)2第二頁(yè),共一百零二頁(yè),2022年,8月28日5.1數(shù)據(jù)庫(kù)的安全性5.1.1數(shù)據(jù)庫(kù)安全性的含義數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止非法使用所造成的數(shù)據(jù)泄露、更改或破壞。安全性問題有許多方面:(1)法律、社會(huì)和倫理方面時(shí)問題。(2)物理控制方面的問題。(3)政策方面的問題。(4)運(yùn)行方面的問題。(5)硬件控制方面的問題。(6)操作系統(tǒng)安全性方面的問題。(7)數(shù)據(jù)庫(kù)系統(tǒng)本身的安全性方面的問題。3第三頁(yè),共一百零二頁(yè),2022年,8月28日5.1.2安全性控制的一般方法安全性控制是指要盡可能地杜絕所有可能的數(shù)據(jù)庫(kù)非法訪問。圖5-1安全控制模型
4第四頁(yè),共一百零二頁(yè),2022年,8月28日安全性控制的一般方法用戶標(biāo)識(shí)和鑒定用戶存取權(quán)限控制定義視圖數(shù)據(jù)加密審計(jì)(Audit)5第五頁(yè),共一百零二頁(yè),2022年,8月28日用戶標(biāo)識(shí)和鑒定用戶標(biāo)識(shí)和鑒定是由系統(tǒng)提供一定的方式讓用戶標(biāo)識(shí)自己的名字或身份,系統(tǒng)內(nèi)部記錄著所有合法用戶的標(biāo)識(shí),每次用戶要求進(jìn)入系統(tǒng)時(shí),由系統(tǒng)進(jìn)行核實(shí),通過鑒定后才提供機(jī)器的使用權(quán)。用戶標(biāo)識(shí)和鑒定的方法用一個(gè)用戶名或用戶標(biāo)識(shí)符來標(biāo)明用戶的身份,系統(tǒng)以此來鑒別用戶的合法性。如果正確,就可以進(jìn)入下一步的核實(shí)。用戶標(biāo)識(shí)符是用戶公開的標(biāo)識(shí),它不足以成為鑒別用戶身份的憑證。常采用用戶名和與口令相結(jié)合的方法。通過用戶名和口令來鑒定用戶的方法簡(jiǎn)單易行,但該方法在使用時(shí),由于用戶名和口令的產(chǎn)生和使用比較簡(jiǎn)單,也容易被竊取,因此還可采用更復(fù)雜的方法。例如預(yù)先約定好一個(gè)過程和函數(shù),系統(tǒng)可提供一個(gè)隨機(jī)數(shù),用戶可根據(jù)函數(shù)計(jì)算出結(jié)果,系統(tǒng)根據(jù)結(jié)果來辨別用戶身份的合法性。6第六頁(yè),共一百零二頁(yè),2022年,8月28日授權(quán)表用戶標(biāo)識(shí)數(shù)據(jù)對(duì)象操作類型用戶存取權(quán)限控制用戶存取權(quán)限指的是不同的用戶對(duì)于不同的數(shù)據(jù)對(duì)象允許執(zhí)行的操作權(quán)限。在數(shù)據(jù)庫(kù)系統(tǒng)中,定義用戶存取權(quán)限稱為授權(quán)。這些授權(quán)定義經(jīng)過編譯后以一張授權(quán)表的形式存放在數(shù)據(jù)字典中。7第七頁(yè),共一百零二頁(yè),2022年,8月28日數(shù)據(jù)對(duì)象操作類型模式模式建立、修改、檢索外模式建立、修改、檢索內(nèi)模式建立、修改、檢索數(shù)據(jù)表查找、插入、修改、刪除屬性列查找、插入、修改、刪除關(guān)系系統(tǒng)中的存取權(quán)限8第八頁(yè),共一百零二頁(yè),2022年,8月28日授權(quán)粒度越細(xì),授權(quán)子系統(tǒng)就越靈活,能夠提供的安全性就越完善。對(duì)于授權(quán)表,一個(gè)衡量授權(quán)機(jī)制的重要指標(biāo)就是授權(quán)粒度,即可以定義的數(shù)據(jù)對(duì)象的范圍,在關(guān)系數(shù)據(jù)庫(kù)中,授權(quán)粒度包括關(guān)系、記錄或?qū)傩浴?/p>
衡量授權(quán)機(jī)制的另一個(gè)重要指標(biāo)就是授權(quán)表中允許的登記項(xiàng)的范圍。有些授權(quán)表的授權(quán)只涉及到數(shù)據(jù)名(關(guān)系或?qū)傩悦?,而未提到具體的值,有些授權(quán)表提供了與值有關(guān)的授權(quán)。如表5.3和表5.49第九頁(yè),共一百零二頁(yè),2022年,8月28日3.定義視圖為不同的用戶定義不同的視圖,可以限制各個(gè)用戶的訪問范圍。通過視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無權(quán)存取這些數(shù)據(jù)的用戶隱藏起來,從而自動(dòng)對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。10第十頁(yè),共一百零二頁(yè),2022年,8月28日數(shù)據(jù)加密加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)加密成為不可直接識(shí)別的格式,數(shù)據(jù)以密文的形式存儲(chǔ)和傳輸。加密方法:替換方法,該方法使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的字符。轉(zhuǎn)換方法,該方法將明文中的字符按不同的順序重新排列。通常將這兩種方法結(jié)合起來使用,就可以達(dá)到相當(dāng)高的安全程度。11第十一頁(yè),共一百零二頁(yè),2022年,8月28日審計(jì)審計(jì)功能是一種監(jiān)視措施,它跟蹤記錄有關(guān)數(shù)據(jù)的訪問活動(dòng)。審計(jì)追蹤把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來,存放在一個(gè)特殊文件中,即審計(jì)日志中。記錄的內(nèi)容一般包括:操作類型(如修改、查詢等),操作終端標(biāo)識(shí)與操作者標(biāo)識(shí),操作日期和時(shí)間,操作所涉及到的相關(guān)數(shù)據(jù)(如基本表、視圖、記錄、屬性等),數(shù)據(jù)的前象和后象等。12第十二頁(yè),共一百零二頁(yè),2022年,8月28日使用審計(jì)功能會(huì)大大增加系統(tǒng)的開銷,所以DBMS通常將其作為可選特征,提供相應(yīng)的操作語(yǔ)句可靈活打開或關(guān)閉審計(jì)功能。例如:可使用SQL語(yǔ)句打開對(duì)表S的審計(jì)功能,對(duì)表S的每次成功的查詢、增加、刪除和修改操作都作審計(jì)追蹤。AUDITSELECT,INSERT,DELETE,UPDATEONSWHENEVERSUCCESSFUL要關(guān)閉對(duì)表S的審計(jì)功能可以使用如下語(yǔ)句;NOAUDITALLONS13第十三頁(yè),共一百零二頁(yè),2022年,8月28日5.1.3SQLServer2000的數(shù)據(jù)安全性機(jī)制為了實(shí)現(xiàn)安全性,SQLServer2000對(duì)用戶的訪問進(jìn)行兩個(gè)階段的檢驗(yàn):身份驗(yàn)證階段(Authentication):身份驗(yàn)證機(jī)制決定了用戶能否連接(或登錄)到SQLServer2000服務(wù)器。權(quán)限許可確認(rèn)階段(PermissionValidation):權(quán)限許可機(jī)制決定了經(jīng)過了身份驗(yàn)證后的用戶連接到SQLServer2000服務(wù)器可以執(zhí)行的具體操作,包括服務(wù)器上的操作和具體的數(shù)據(jù)庫(kù)上的操作。14第十四頁(yè),共一百零二頁(yè),2022年,8月28日
1.Windows身份驗(yàn)證模式:
允許Windows操作系統(tǒng)用戶連接到SQLServer。當(dāng)使用Windows身份驗(yàn)證模式時(shí),用戶必須首先登錄到Windows操作系統(tǒng)中,然后再登錄到SQLServer。一般推薦使用Windows驗(yàn)證模式,因?yàn)檫@種安全模式能夠與Windows操作系統(tǒng)的安全系統(tǒng)集成在一起,以提供更多的安全功能。5.1.4SQLServer2000的身份驗(yàn)證模式15第十五頁(yè),共一百零二頁(yè),2022年,8月28日2.混合身份驗(yàn)證模式混合身份驗(yàn)證模式表示SQLServer允許Windows授權(quán)用戶和SQL授權(quán)用戶登錄到SQLServer數(shù)據(jù)庫(kù)服務(wù)器。如果希望允許非Windows操作系統(tǒng)的用戶也能登錄到SQLServer數(shù)據(jù)庫(kù)服務(wù)器上,則應(yīng)該選擇混合身份驗(yàn)證模式。如果在混合身份驗(yàn)證模式下選擇使用SQL授權(quán)用戶登錄SQLServer數(shù)據(jù)庫(kù)服務(wù)器上,則用戶必須提供登錄名和密碼兩部分內(nèi)容。16第十六頁(yè),共一百零二頁(yè),2022年,8月28日
在SQLSERVER身份認(rèn)證模式下,帳號(hào)和密碼保存在master數(shù)據(jù)庫(kù)的syslogins數(shù)據(jù)表中,當(dāng)客戶機(jī)使用用戶帳號(hào)和密碼連接數(shù)據(jù)庫(kù)服務(wù)器時(shí),在該表中查詢是否有相同的帳號(hào)和密碼,若有就接受連接。設(shè)置身份驗(yàn)證模式:1)打開企業(yè)管理器,展開“服務(wù)器組”文件夾,在服務(wù)器中單擊右鍵,在彈出的快捷菜單中選擇“編輯SQLSERVER注冊(cè)屬性”命令,在已注冊(cè)的SQLSERVER屬性對(duì)話框中設(shè)置驗(yàn)證模式。注意:修改驗(yàn)證模式后,必須首先停止SQLSERVER服務(wù),然后重啟該服務(wù),新的設(shè)置才能生效。17第十七頁(yè),共一百零二頁(yè),2022年,8月28日5.1.5SQLServer的登錄賬號(hào)和服務(wù)器角色在SQLServer中,賬號(hào)有兩種:一種是登錄服務(wù)器的登錄賬號(hào)(LoginName),另外一種是使用數(shù)據(jù)庫(kù)的用戶賬號(hào)(UserName)。查看服務(wù)器的登錄賬號(hào)方法1:使用EnterpriseManager進(jìn)入EnterpriseManager,展開“SQLServer組”,找到所要連接的SQLServer服務(wù)器;展開該服務(wù)器對(duì)應(yīng)的文件夾,再展開“安全性”文件夾,單擊“登錄”選項(xiàng),即可看到系統(tǒng)創(chuàng)建的默認(rèn)登錄賬號(hào)及已建立的其他登錄賬號(hào)。18第十八頁(yè),共一百零二頁(yè),2022年,8月28日其中:BUILTIN\Administrators:表示所有WindowsAdiminstrators組中的用戶都可以登錄到SQLServer。此組中的成員同時(shí)也具有SQLServer的系統(tǒng)管理員權(quán)限。sa:SQLServer身份驗(yàn)證模式的系統(tǒng)管理員賬戶。方法2:使用存儲(chǔ)過程查看登錄賬號(hào)。EXECsp_helplogins19第十九頁(yè),共一百零二頁(yè),2022年,8月28日創(chuàng)建服務(wù)器的登錄賬號(hào)利用EnterpriseManage展開“安全性”,單擊“登錄”節(jié)點(diǎn)。右擊內(nèi)容窗格中的空白處,從彈出式菜單中選擇“新建登錄”命令。輸入登錄賬號(hào)名稱,單擊“SQLSERVER”身份驗(yàn)證,并輸入登錄密碼。然后在“默認(rèn)設(shè)置”選項(xiàng)組中,選擇對(duì)應(yīng)的數(shù)據(jù)庫(kù),表示該登錄賬號(hào)默認(rèn)登錄到該數(shù)據(jù)庫(kù)中。
20第二十頁(yè),共一百零二頁(yè),2022年,8月28日創(chuàng)建服務(wù)器的登錄賬號(hào)利用存儲(chǔ)過程EXECsp_addlogin'登錄賬號(hào)名稱','密碼','默認(rèn)數(shù)據(jù)庫(kù)名','使用的語(yǔ)言'[例5-1]建立了一個(gè)名稱為Mike的登錄賬號(hào)。EXECsp_addlogin'Mike','m1934','Teach',NULL[例5-2]將MIKE登錄賬號(hào)加入到數(shù)據(jù)庫(kù)Teach中。EXECsp_adduser‘Mike’更改登錄賬號(hào)的屬性使用存儲(chǔ)過程sp_password可改變登錄賬號(hào)的密碼EXECsp_password'舊密碼','新密碼','登錄賬號(hào)名稱'[例5-3]將Mike賬號(hào)的密碼由原來的m1934改為mike1934.EXECsp_password‘m1934’,’mike1934’,’Mike’21第二十一頁(yè),共一百零二頁(yè),2022年,8月28日使用存儲(chǔ)過程sp_addsrvrolemember可以將登錄賬號(hào)加入服務(wù)器的角色中EXECsp_addsrvrolemember'登錄賬號(hào)','服務(wù)器角色名稱'[例5-4]將登錄賬號(hào)MIKE加入到dbcreator服務(wù)器角色中。EXECsp_addsrvrolemember‘MIKE’,’dbcreator’22第二十二頁(yè),共一百零二頁(yè),2022年,8月28日刪除登錄賬號(hào)使用EnterpriseManager使用存儲(chǔ)過程EXECsp_droplogin'登錄賬號(hào)'[例5-5]從數(shù)據(jù)庫(kù)Teach中刪除MIKE登錄賬號(hào)。EXECsp_droplogin‘MIKE’SQLServer的服務(wù)器角色角色(Role)是對(duì)權(quán)限集中管理的一種機(jī)制,將不同的權(quán)限組合在一起就形成了一種角色。服務(wù)器角色是執(zhí)行服務(wù)器級(jí)管理操作的用戶權(quán)限的集合。23第二十三頁(yè),共一百零二頁(yè),2022年,8月28日角色名稱中文名字權(quán)限sysadmin系統(tǒng)管理員可執(zhí)行任何活動(dòng)serveradmin服務(wù)器管理員可設(shè)置服務(wù)器范圍的配置選項(xiàng),關(guān)閉服務(wù)器setupadmin安裝管理員可管理連接服務(wù)器和啟動(dòng)過程securityadmin安全管理員可管理登錄和創(chuàng)建數(shù)據(jù)庫(kù)的權(quán)限,還可以讀取錯(cuò)誤日志和更改密碼processadmin進(jìn)程管理員可管理運(yùn)行的進(jìn)程diskadmin磁盤管理員可管理磁盤文件dbcreator數(shù)據(jù)庫(kù)創(chuàng)建者可創(chuàng)建、更改和刪除數(shù)據(jù)庫(kù)bulkadmin批量管理員可執(zhí)行大容量插入語(yǔ)句SQLSERVER服務(wù)器角色24第二十四頁(yè),共一百零二頁(yè),2022年,8月28日5.1.6SQLServer的數(shù)據(jù)庫(kù)用戶賬號(hào)和數(shù)據(jù)庫(kù)角色數(shù)據(jù)庫(kù)的用戶賬號(hào)用戶賬號(hào)要在特定的數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建,并關(guān)聯(lián)一個(gè)登錄賬號(hào)(當(dāng)一個(gè)數(shù)據(jù)庫(kù)的用戶創(chuàng)建時(shí),必須關(guān)聯(lián)一個(gè)登錄賬號(hào))。每個(gè)登錄賬號(hào)在一個(gè)數(shù)據(jù)庫(kù)中只能有一個(gè)用戶賬號(hào),但每個(gè)登錄賬號(hào)可以在不同的數(shù)據(jù)庫(kù)中各有一個(gè)用戶賬號(hào)。注意:
master和tempdb數(shù)據(jù)庫(kù)中的guest用戶賬號(hào)不能刪除,而其他數(shù)據(jù)庫(kù)中的guest用戶賬號(hào)可以刪除。登錄賬號(hào)具有對(duì)某個(gè)數(shù)據(jù)庫(kù)的訪問權(quán)限,并不表示該登錄賬號(hào)對(duì)該數(shù)據(jù)庫(kù)具有存取的權(quán)限。25第二十五頁(yè),共一百零二頁(yè),2022年,8月28日查看數(shù)據(jù)庫(kù)的用戶賬號(hào)方法1:使用企業(yè)管理器
展開SQLSERVER組或服務(wù)器,在“數(shù)據(jù)庫(kù)”文件夾中,展開某數(shù)據(jù)庫(kù),單擊“用戶”選項(xiàng),則在右窗格中顯示出該數(shù)據(jù)庫(kù)的所有用戶。26第二十六頁(yè),共一百零二頁(yè),2022年,8月28日創(chuàng)建數(shù)據(jù)庫(kù)的用戶賬號(hào)方法1:使用企業(yè)管理器
單擊要建立數(shù)據(jù)庫(kù)用戶的數(shù)據(jù)庫(kù)節(jié)點(diǎn),右擊“用戶”,在彈出的菜單上選擇“新建數(shù)據(jù)庫(kù)用戶”命令。27第二十七頁(yè),共一百零二頁(yè),2022年,8月28日查看數(shù)據(jù)庫(kù)的用戶賬號(hào)方法2:利用存儲(chǔ)過程EXECsp_helpuser創(chuàng)建數(shù)據(jù)庫(kù)的用戶賬號(hào)方法2:使用存儲(chǔ)過程EXECsp_adduser'登錄賬號(hào)','用戶賬號(hào)','所屬的數(shù)據(jù)庫(kù)角色’[例5-7]向當(dāng)前數(shù)據(jù)庫(kù)中以登錄名‘ZHANGSAN’創(chuàng)建一個(gè)名稱為ZHANGSAN的用戶賬號(hào),并將該用戶賬號(hào)設(shè)置為db_owner角色。EXECsp_adduser‘ZHANGSAN’,’ZHANGSAN’,’db_owner’28第二十八頁(yè),共一百零二頁(yè),2022年,8月28日設(shè)置數(shù)據(jù)庫(kù)用戶賬號(hào)的權(quán)限
展開“數(shù)據(jù)庫(kù)”節(jié)點(diǎn)并展開要設(shè)置權(quán)限的數(shù)據(jù)庫(kù),單擊“用戶”節(jié)點(diǎn)。在內(nèi)容窗格中右擊要設(shè)置權(quán)限的數(shù)據(jù)庫(kù)用戶,從彈出的菜單中選擇“所有任務(wù)”下的“管理權(quán)限”命令。授予權(quán)限拒絕權(quán)限收回權(quán)限29第二十九頁(yè),共一百零二頁(yè),2022年,8月28日對(duì)數(shù)據(jù)庫(kù)對(duì)象的操作,具體含義如下SELECT:對(duì)表或者視圖進(jìn)行查詢。INSERT:在表或者視圖中插入記錄。UPDATE:對(duì)表或者視圖中的數(shù)據(jù)進(jìn)行修改。DELETE:刪除表或者視圖中的數(shù)據(jù)。EXEC:執(zhí)行存儲(chǔ)過程。DRI:可對(duì)表的外鍵加以限制,以完成表的參照完整性。30第三十頁(yè),共一百零二頁(yè),2022年,8月28日刪除數(shù)據(jù)庫(kù)用戶賬號(hào)存儲(chǔ)過程 EXECsp_dropuser'用戶賬號(hào)'數(shù)據(jù)庫(kù)角色數(shù)據(jù)庫(kù)角色是對(duì)數(shù)據(jù)庫(kù)對(duì)象操作的權(quán)限的集合。數(shù)據(jù)庫(kù)角色可分為三種:固定的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)角色(系統(tǒng)創(chuàng)建的)應(yīng)用程序角色當(dāng)我們打算讓某些用戶只能通過特定的應(yīng)用程序間接地存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)而不是直接地存取數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),就應(yīng)該考慮使用應(yīng)用程序角色。31第三十一頁(yè),共一百零二頁(yè),2022年,8月28日(3)public數(shù)據(jù)庫(kù)角色Public數(shù)據(jù)庫(kù)角色是每個(gè)數(shù)據(jù)庫(kù)最基本的數(shù)據(jù)庫(kù)角色,每個(gè)用戶可以不屬于其他9個(gè)固定數(shù)據(jù)庫(kù)角色,但至少會(huì)屬于public數(shù)據(jù)庫(kù)角色。當(dāng)在數(shù)據(jù)庫(kù)中添加新用戶賬號(hào)時(shí),會(huì)自動(dòng)將新用戶賬號(hào)加入public數(shù)據(jù)庫(kù)角色。32第三十二頁(yè),共一百零二頁(yè),2022年,8月28日角色名稱權(quán)限public最基本的數(shù)據(jù)庫(kù)角色db_accessadmin可以添加或刪除用戶標(biāo)識(shí)db_backupoperator可以發(fā)出DBCC、CHECKPOINT和BACKUP語(yǔ)句db_datareader可以選擇(?。?shù)據(jù)庫(kù)內(nèi)任何用戶表中的所有數(shù)據(jù)db_datawriter可以更改數(shù)據(jù)庫(kù)內(nèi)任何用戶表中的所有數(shù)據(jù)db_ddladmin可以發(fā)出所有DDL語(yǔ)句,但不能發(fā)出GRANT(授權(quán))、REVOKE或DENY語(yǔ)句db_denydatareader不能選擇(?。?shù)據(jù)庫(kù)內(nèi)任何用戶表中的任何數(shù)據(jù)db_denydatawriter不能更改數(shù)據(jù)庫(kù)內(nèi)任何用戶表中的任何數(shù)據(jù)db_owner在數(shù)據(jù)庫(kù)中有全部權(quán)限db_securityadmin可以管理全部權(quán)限、對(duì)象所有權(quán)、角色和角色成員資格33第三十三頁(yè),共一百零二頁(yè),2022年,8月28日查看數(shù)據(jù)庫(kù)角色的屬性:以Teach數(shù)據(jù)庫(kù)中的db_owner角色為例:1)在企業(yè)管理器中,展開SQLSERVER組,在數(shù)據(jù)庫(kù)文件夾中,展開Teach數(shù)據(jù)庫(kù)文件夾,單擊“角色”選項(xiàng),在右側(cè)窗格中顯示出該數(shù)據(jù)庫(kù)的所有角色。2)在右側(cè)窗格中,在“db_owner”角色上單擊右鍵,在快捷菜單中單擊“屬性”,則彈出了包括在該角色中的數(shù)據(jù)庫(kù)用戶賬號(hào)的對(duì)話框。3)單擊“添加”按鈕可以為該角色添加一個(gè)數(shù)據(jù)庫(kù)用戶;單擊“刪除”按鈕,可從角色中刪除被選中的數(shù)據(jù)庫(kù)用戶。34第三十四頁(yè),共一百零二頁(yè),2022年,8月28日創(chuàng)建新的數(shù)據(jù)庫(kù)角色使用企業(yè)管理器在企業(yè)管理器中,展開SQLSERVER組,在“數(shù)據(jù)庫(kù)”文件夾中,展開某一數(shù)據(jù)庫(kù)文件夾,然后在“角色”選項(xiàng)上單擊右鍵,在彈出的快捷菜單中選擇“新建數(shù)據(jù)庫(kù)角色”,在該對(duì)話框中輸入角色名,在“數(shù)據(jù)庫(kù)角色類型”中選擇角色類型為標(biāo)準(zhǔn)角色,單擊“添加”按鈕可向角色中添加成員。單擊“確定”。使用存儲(chǔ)過程創(chuàng)建新角色EXECsp_addrole'角色名','擁有者’[例5-9]在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為Myrole的角色EXECsp_addrole‘Myrole’,’dbo’35第三十五頁(yè),共一百零二頁(yè),2022年,8月28日刪除數(shù)據(jù)庫(kù)角色sp_droprole'角色名'創(chuàng)建數(shù)據(jù)庫(kù)應(yīng)用程序角色sp_setapprole'應(yīng)用程序角色名','密碼'用戶和角色的權(quán)限問題用戶權(quán)限繼承角色的權(quán)限數(shù)據(jù)庫(kù)角色中可以包含多個(gè)用戶,當(dāng)用戶屬于某一數(shù)據(jù)庫(kù)角色時(shí),用戶對(duì)數(shù)據(jù)庫(kù)對(duì)象的存取權(quán)限也繼承該角色的權(quán)限。36第三十六頁(yè),共一百零二頁(yè),2022年,8月28日用戶分屬不同角色如果用戶分屬于不同的數(shù)據(jù)庫(kù)角色,如用戶User1既屬于角色1,又屬于角色2,則用戶的權(quán)限基本上是以角色1和角色2的并集為準(zhǔn),但只要有一個(gè)拒絕,則用戶User1的權(quán)限就是拒絕的。37第三十七頁(yè),共一百零二頁(yè),2022年,8月28日5.2完整性控制5.2.1數(shù)據(jù)庫(kù)完整性的含義數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)造成無效操作。
數(shù)據(jù)庫(kù)的完整性和安全性是數(shù)據(jù)庫(kù)保護(hù)的兩個(gè)不同的方面。數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞。安全性措施的防范對(duì)象是非法用戶和非法操作。數(shù)據(jù)庫(kù)的完整性是指防止合法用戶使用數(shù)據(jù)庫(kù)時(shí)向數(shù)據(jù)庫(kù)中加入不符合語(yǔ)義的數(shù)據(jù)。完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。38第三十八頁(yè),共一百零二頁(yè),2022年,8月28日5.2.2完整性規(guī)則的組成完整性規(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)用戶發(fā)出的操作請(qǐng)求違背了完整性約束條件,應(yīng)該采取一定的動(dòng)作來保證數(shù)據(jù)的完整性,即違約時(shí)要做的事情。完整性規(guī)則從執(zhí)行時(shí)間上可分為立即執(zhí)行約束(ImmediateConstraints)和延遲執(zhí)行約束(DeferredConstraints)。39第三十九頁(yè),共一百零二頁(yè),2022年,8月28日
立即執(zhí)行約束是指在執(zhí)行用戶事務(wù)過程中,某一條語(yǔ)句執(zhí)行完成后,系統(tǒng)立即對(duì)此數(shù)據(jù)進(jìn)行完整性約束條件檢查。延遲執(zhí)行約束是指在整個(gè)事務(wù)執(zhí)行結(jié)束后,再對(duì)約束條件進(jìn)行完整性檢查,結(jié)果正確后才能提交。如果發(fā)現(xiàn)用戶操作違背了立即執(zhí)行約束,則可以拒絕該操作,以保護(hù)數(shù)據(jù)的完整性。如果發(fā)現(xiàn)用戶操作違背了延遲執(zhí)行約束,而又不知道是哪個(gè)事務(wù)破壞了完整性,則只能拒絕整個(gè)事務(wù),把數(shù)據(jù)庫(kù)恢復(fù)到該事務(wù)執(zhí)行前的狀態(tài)。40第四十頁(yè),共一百零二頁(yè),2022年,8月28日一條完整性規(guī)則可以用一個(gè)五元組(D,O,A,C,P)來形式化地表示D(Data):代表約束作用的數(shù)據(jù)對(duì)象,可以是關(guān)系、元組和列三種對(duì)象;O(Operation):代表觸發(fā)完整性檢查的數(shù)據(jù)庫(kù)操作,即當(dāng)用戶發(fā)出什么操作請(qǐng)求時(shí)需要檢查該完整性規(guī)則,是立即執(zhí)行還是延遲執(zhí)行;A(Assertion):代表數(shù)據(jù)對(duì)象必須滿足的語(yǔ)義約束,這是規(guī)則的主體;C(Condition):代表選擇A作用的數(shù)據(jù)對(duì)象值的謂詞;P(Procedure):代表違反完整性規(guī)則時(shí)觸發(fā)執(zhí)行的操作過程。41第四十一頁(yè),共一百零二頁(yè),2022年,8月28日完整性約束條件是完整性控制機(jī)制的核心。例如,對(duì)于“學(xué)號(hào)(SNo)不能為空”的這條完整性約束中,D、O、A、C、P的含義分別如下:D:代表約束作用的數(shù)據(jù)對(duì)象為SNo屬性;O:當(dāng)用戶插入或修改數(shù)據(jù)時(shí)需要檢查該完整性規(guī)則;A:SNo不能為空;C:A可作用于所有記錄的SNo屬性;P:拒絕執(zhí)行用戶請(qǐng)求。42第四十二頁(yè),共一百零二頁(yè),2022年,8月28日5.2.3完整性約束條件的分類從約束條件使用的對(duì)象分值的約束和結(jié)構(gòu)的約束值的約束即對(duì)數(shù)據(jù)類型、數(shù)據(jù)格式、取值范圍和空值等進(jìn)行規(guī)定。(1)對(duì)數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長(zhǎng)度、單位和精度等。(2)對(duì)數(shù)據(jù)格式的約束。(3)對(duì)取值范圍的約束。(4)對(duì)空值的約束。結(jié)構(gòu)的約束即對(duì)數(shù)據(jù)之間聯(lián)系的約束。(1)函數(shù)依賴約束。(2)實(shí)體完整性約束。(3)參照完整性約束。(4)統(tǒng)計(jì)約束。43第四十三頁(yè),共一百零二頁(yè),2022年,8月28日從約束對(duì)象的狀態(tài)分靜態(tài)約束和動(dòng)態(tài)約束靜態(tài)約束靜態(tài)約束是指對(duì)數(shù)據(jù)庫(kù)每一個(gè)確定狀態(tài)所應(yīng)滿足的約束條件,是反映數(shù)據(jù)庫(kù)狀態(tài)合理性的約束,這是最重要的一類完整性約束。上面介紹的值的約束和結(jié)構(gòu)的約束均屬于靜態(tài)約束。動(dòng)態(tài)約束動(dòng)態(tài)約束是指數(shù)據(jù)庫(kù)從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時(shí),新舊值之間所應(yīng)滿足的約束條件,動(dòng)態(tài)約束反映的是數(shù)據(jù)庫(kù)狀態(tài)變遷的約束。例如,學(xué)生年齡在更改時(shí)只能增長(zhǎng),職工工資在調(diào)整時(shí)不得低于其原來的工資。44第四十四頁(yè),共一百零二頁(yè),2022年,8月28日5.2.4數(shù)據(jù)完整性的實(shí)施聲明式數(shù)據(jù)完整性聲明式數(shù)據(jù)完整性是將數(shù)據(jù)所需符合的條件融入到對(duì)象的定義中,這樣SQLServer會(huì)自動(dòng)確保數(shù)據(jù)符合事先制定的條件。聲明式數(shù)據(jù)完整性的特點(diǎn)是:①通過針對(duì)表和字段定義聲明的約束,可使聲明式數(shù)據(jù)完整性成為數(shù)據(jù)定義的一部分。②使用約束、默認(rèn)值與規(guī)則實(shí)施聲明式數(shù)據(jù)完整性。45第四十五頁(yè),共一百零二頁(yè),2022年,8月28日程序化數(shù)據(jù)完整性如果所需符合的條件以及該條件的實(shí)施均通過所編寫的程序代碼完成,則這種形式的數(shù)據(jù)完整性稱為程序化數(shù)據(jù)完整性。程序化數(shù)據(jù)完整性的特點(diǎn)是:①程序化數(shù)據(jù)完整性可以通過相關(guān)的程序語(yǔ)言及工具在客戶端或服務(wù)器端實(shí)施。②SQLServer可以使用存儲(chǔ)過程或觸發(fā)器實(shí)施程序化數(shù)據(jù)完整性。46第四十六頁(yè),共一百零二頁(yè),2022年,8月28日5.2.5規(guī)則規(guī)則(Rule)就是數(shù)據(jù)庫(kù)對(duì)存儲(chǔ)在表中的列或用戶自定義數(shù)據(jù)類型中的值的規(guī)定和限制。規(guī)則與其作用的表或用戶自定義數(shù)據(jù)類型是相互獨(dú)立的,即表或用戶自定義對(duì)象的刪除、修改不會(huì)對(duì)與之相連的規(guī)則產(chǎn)生影響。創(chuàng)建規(guī)則1)使用企業(yè)管理器創(chuàng)建規(guī)則2)使用存儲(chǔ)過程創(chuàng)建規(guī)則CREATERULErule_nameAScondition_expression
注意:condition_expression子句中的表達(dá)式第一個(gè)字符必須是@符號(hào)。[例5-12]創(chuàng)建學(xué)生年齡規(guī)則。CREATERULEage_ruleAS@age>=18and@age<=5047第四十七頁(yè),共一百零二頁(yè),2022年,8月28日查看規(guī)則使用企業(yè)管理器查看規(guī)則用存儲(chǔ)過程sp_helptext查看規(guī)則sp_helptextsp_helptext[@objname=]'name'Name指明對(duì)象的名字??梢允且?guī)則、默認(rèn)、觸發(fā)器等。規(guī)則的綁定與松綁創(chuàng)建規(guī)則后,規(guī)則僅僅是一個(gè)存在于數(shù)據(jù)庫(kù)中的對(duì)象,并未發(fā)生作用。需要將規(guī)則與數(shù)據(jù)庫(kù)表或用戶自定義對(duì)象聯(lián)系起來,才能達(dá)到創(chuàng)建規(guī)則的目的。所謂綁定就是指定規(guī)則作用于哪個(gè)表的哪一列或哪個(gè)用戶自定義數(shù)據(jù)類型。解除規(guī)則與對(duì)象的綁定稱為“松綁”。48第四十八頁(yè),共一百零二頁(yè),2022年,8月28日規(guī)則對(duì)已經(jīng)輸入表中的數(shù)據(jù)不起作用。用存儲(chǔ)過程sp_bindrule綁定規(guī)則sp_bindrule[@rulename=]'rule', [@objname=]'object_name' [,'futureonly'][例5-14]綁定規(guī)則age_rule到S表的字段Age。EXECsp_bindrule'age_rule','S.Age‘用存儲(chǔ)過程sp_unbindrule解除規(guī)則的綁定sp_unbindrule[@objname=]'object_name' [,'futureonly'][例5-15]解除已綁定到S表的字段Age的規(guī)則age_rule。EXECsp_unbindrule'S.Age'49第四十九頁(yè),共一百零二頁(yè),2022年,8月28日用企業(yè)管理器管理規(guī)則的綁定50第五十頁(yè),共一百零二頁(yè),2022年,8月28日在刪除一個(gè)規(guī)則前必須先將與其綁定的對(duì)象解除綁定。刪除規(guī)則使用DROPRULE命令刪除規(guī)則DROPRULE{rule_name}[,...n][例5-16]刪除age_rule規(guī)則。DROPRULEage_rule51第五十一頁(yè),共一百零二頁(yè),2022年,8月28日5.2.6默認(rèn)默認(rèn)(Default)是向用戶輸入記錄時(shí)沒有指定具體數(shù)據(jù)的列中自動(dòng)插入的數(shù)據(jù)。表的一列或一個(gè)用戶自定義數(shù)據(jù)類型只能與一個(gè)默認(rèn)綁定。創(chuàng)建默認(rèn)1)使用企業(yè)管理器創(chuàng)建默認(rèn)2)使用存儲(chǔ)過程創(chuàng)建默認(rèn)CREATEDEFAULTdefault_nameASconstant_expression[例5-17]創(chuàng)建出生日期默認(rèn)birthday_defa。CREATEDEFAULTbirthday_defaAS'1978-1-1'52第五十二頁(yè),共一百零二頁(yè),2022年,8月28日查看和修改默認(rèn)使用sp_helptext存儲(chǔ)過程可以查看默認(rèn)的信息。[例5-18]查看默認(rèn)birthday_defa。EXECsp_helptextbirthday_defa默認(rèn)的綁定與松綁用存儲(chǔ)過程sp_bindefault綁定默認(rèn)sp_bindefault[@defname=]'default', [@objname=]'object_name' [,'futureonly']用存儲(chǔ)過程sp_unbindefault解除默認(rèn)的綁定sp_unbindefault[@objname=]'object_name'[,'futureonly']53第五十三頁(yè),共一百零二頁(yè),2022年,8月28日[例5-19]綁定默認(rèn)birthday_defa到數(shù)據(jù)表S的Birthday列上。EXECsp_bindefaultbirthday_defa,'S.Birthday'[例5-20]解除默認(rèn)birthday_defa與表S的Birthday列的綁定。EXECsp_unbindefault'S.Birthday'刪除默認(rèn)使用DROPDEFAULT命令刪除默認(rèn)DROPDEFAULT{default_name}[,...n][例5-21]刪除學(xué)生生日默認(rèn)birthday_defa。DROPDEFAULTbirthday_defa在刪除一個(gè)默認(rèn)前必須先將與其綁定的對(duì)象解除綁定54第五十四頁(yè),共一百零二頁(yè),2022年,8月28日5.3.1數(shù)據(jù)庫(kù)并發(fā)性的含義為了充分利用數(shù)據(jù)庫(kù)資源,很多時(shí)候數(shù)據(jù)庫(kù)用戶都是對(duì)數(shù)據(jù)庫(kù)系統(tǒng)并行存取數(shù)據(jù),這樣就會(huì)發(fā)生多個(gè)用戶并發(fā)存取同一數(shù)據(jù)塊的情況,彼此之間就有可能產(chǎn)生相互干擾的情況。如果對(duì)并發(fā)操作不加控制可能會(huì)產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性。并發(fā)控制就是解決這類問題,以保持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,即在任何一個(gè)時(shí)刻數(shù)據(jù)庫(kù)都將以相同的形式給用戶提供數(shù)據(jù)。5.3并發(fā)控制與封鎖55第五十五頁(yè),共一百零二頁(yè),2022年,8月28日事務(wù)是數(shù)據(jù)庫(kù)系統(tǒng)中執(zhí)行的一個(gè)工作單位,它是由用戶定義的一組操作序列。一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條SQL語(yǔ)句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。定義事務(wù)的語(yǔ)句有三條:BEGINTRANSACTIONCOMMITROLLBACK5.3.2事務(wù)(Transaction)事務(wù)的開始事務(wù)的提交事務(wù)的回滾56第五十六頁(yè),共一百零二頁(yè),2022年,8月28日事務(wù)的特征原子性(Atomicity)一個(gè)事務(wù)是一個(gè)不可分割的工作單位,事務(wù)在執(zhí)行時(shí),應(yīng)該遵守“要么不做,要么全做”(NothingorAll)的原則,即不允許完成部分的事務(wù)。一致性(Consistency)事務(wù)對(duì)數(shù)據(jù)庫(kù)的作用是數(shù)據(jù)庫(kù)從一個(gè)一致狀態(tài)轉(zhuǎn)變到另一個(gè)一致狀態(tài)。所謂數(shù)據(jù)庫(kù)的一致狀態(tài)是指數(shù)據(jù)庫(kù)中的數(shù)據(jù)滿足完整性約束。隔離性(Isolation)如果多個(gè)事務(wù)并發(fā)地執(zhí)行,應(yīng)像各個(gè)事務(wù)獨(dú)立執(zhí)行一樣,一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。持久性(Durability)持久性指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是持久的,即使數(shù)據(jù)庫(kù)因故障而受到破壞,DBMS也應(yīng)該能夠恢復(fù)。57第五十七頁(yè),共一百零二頁(yè),2022年,8月28日下面是一個(gè)事務(wù)的例子,即從賬號(hào)A轉(zhuǎn)移資金額R到賬號(hào)BBEGINTRANSATIONREADAA←A-RIFA<0/*A余額不足*/THENBEGINDISPLAY“A余額不足”ROLLBACKENDELSEBEGINB←B+R58第五十八頁(yè),共一百零二頁(yè),2022年,8月28日DISPLAY“撥款完成”COMMITEND該事務(wù)有兩個(gè)出口:當(dāng)A余額不足時(shí),事務(wù)以ROLLBACK(撤銷)命令結(jié)束,即撤銷該事務(wù)的影響;另一個(gè)出口是以COMMIT(提交)命令結(jié)束,完成撥款。在COMMIT之前,即在數(shù)據(jù)庫(kù)修改過程中,數(shù)據(jù)可能是不一致的,事務(wù)本身也可能被撤銷。只有在COMMIT之后,事務(wù)對(duì)數(shù)據(jù)庫(kù)所產(chǎn)生的變化才對(duì)其他事務(wù)開放,這就可以避免其他事務(wù)訪問不一致或不存在的數(shù)據(jù)。59第五十九頁(yè),共一百零二頁(yè),2022年,8月28日5.3.3并發(fā)操作與數(shù)據(jù)的不一致性[例5-22]并發(fā)取款操作。假設(shè)存款余額R=1000元,甲事務(wù)T1取走存款100元,乙事務(wù)T2取走存款200元,如果正常操作,即甲事務(wù)T1執(zhí)行完畢再執(zhí)行乙事務(wù)T2,存款余額更新后應(yīng)該是700元。但是如果按照如下順序操作,則會(huì)有不同的結(jié)果:(1)甲事務(wù)T1讀取存款余額R=1000元;(2)乙事務(wù)T2讀取存款余額R=1000元;(3)甲事務(wù)T1取走存款100元,修改存款余額R=R-100=900,把R=900寫回到數(shù)據(jù)庫(kù);(4)乙事務(wù)T2取走存款200元,修改存款余額R=R-200=800,把R=800寫回到數(shù)據(jù)庫(kù);結(jié)果兩個(gè)事務(wù)共取走存款300元,而數(shù)據(jù)庫(kù)中的存款卻只少了200元。得到這種錯(cuò)誤的結(jié)果是由甲乙兩個(gè)事務(wù)并發(fā)操作引起的。60第六十頁(yè),共一百零二頁(yè),2022年,8月28日數(shù)據(jù)庫(kù)的并發(fā)操作導(dǎo)致的數(shù)據(jù)庫(kù)不一致性主要有以下三種:丟失更新(LostUpdate)當(dāng)兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù),并發(fā)執(zhí)行修改操作時(shí),T2把T1或T1把T2的修改結(jié)果覆蓋掉,造成了數(shù)據(jù)的丟失更新問題,導(dǎo)致數(shù)據(jù)的不一致。61第六十一頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R值事務(wù)T2t01000t1READRt2READRt3R=R-100t4R=R-200t5UPDATERt6900UPDATERt7800丟失更新問題62第六十二頁(yè),共一百零二頁(yè),2022年,8月28日污讀(DirtyRead)事務(wù)T1更新了數(shù)據(jù)R,事務(wù)T2讀取了更新后的數(shù)據(jù)R,事務(wù)T1由于某種原因被撤銷,修改無效,數(shù)據(jù)R恢復(fù)原值。事務(wù)T2得到的數(shù)據(jù)與數(shù)據(jù)庫(kù)的內(nèi)容不一致,這種情況稱為“污讀”。
63第六十三頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R值事務(wù)T2t01000t1READRt2R=R-100t3UPDATERt4900READRt5ROLLBACKt61000污讀問題64第六十四頁(yè),共一百零二頁(yè),2022年,8月28日不可重復(fù)讀(UnrepeatableRead)事務(wù)T1讀取了數(shù)據(jù)R,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再讀取數(shù)據(jù)R以進(jìn)行核對(duì)時(shí),得到的兩次讀取值不一致,這種情況稱為“不可重復(fù)讀”。
65第六十五頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R值事務(wù)T2t01000t1READRt2求和R+150READRt3R=R-200t4UPDATERt5800t6求和R+150不可重復(fù)讀問題66第六十六頁(yè),共一百零二頁(yè),2022年,8月28日產(chǎn)生上述三類數(shù)據(jù)不一致性的主要原因是并發(fā)操作破壞了事務(wù)的隔離性。并發(fā)控制就是要求DBMS提供并發(fā)控制功能以正確的方式管理并發(fā)事務(wù),避免并發(fā)事務(wù)之間的相互干擾造成數(shù)據(jù)的不一致性,保證數(shù)據(jù)庫(kù)的完整性。67第六十七頁(yè),共一百零二頁(yè),2022年,8月28日5.3.4封鎖實(shí)現(xiàn)并發(fā)控制的方法主要有兩種:封鎖(Lock)技術(shù)和時(shí)標(biāo)(Timestamping)技術(shù)。通常會(huì)使用封鎖技術(shù)。封鎖類型(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ù)操作的正確性和一致性。68第六十八頁(yè),共一百零二頁(yè),2022年,8月28日基本的封鎖類型有兩種排它型封鎖(ExclusiveLock)排它型封鎖又稱寫封鎖,簡(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)行操作。共享封鎖(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鎖,直到T釋放R上的S鎖。這就保證了其他事務(wù)在T釋放R上的S鎖之前,只能讀取R,而不能再對(duì)R作任何修改。69第六十九頁(yè),共一百零二頁(yè),2022年,8月28日鎖的相容矩陣
封鎖協(xié)議(LockProtocol)
封鎖可以保證合理地進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。在封鎖時(shí),要考慮一定的封鎖規(guī)則,例如,何時(shí)開始封鎖、封鎖多長(zhǎng)時(shí)間、何時(shí)釋放等,這些封鎖規(guī)則稱為封鎖協(xié)議。70第七十頁(yè),共一百零二頁(yè),2022年,8月28日上面講述過的并發(fā)操作所帶來的丟失更新、污讀和不可重讀等數(shù)據(jù)不一致性問題,可以通過三級(jí)封鎖協(xié)議在不同程度上給予解決:一級(jí)封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)對(duì)象之前必須對(duì)其加X鎖,直到事務(wù)結(jié)束。一級(jí)封鎖協(xié)議只有修改數(shù)據(jù)時(shí)才進(jìn)行加鎖,如果只是讀取數(shù)據(jù)則并不加鎖,所以它不能防止“污讀”和“不可重復(fù)讀”。71第七十一頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R值事務(wù)T2t0XLOCKR1000t1READRt2XLOCKRt3R=R-100WAITt4UPDATERWAITt5UNLOCKR900WAITt6XLOCKRt7R=R-200t8UPDATERt9700UNLOCKR無丟失更新問題72第七十二頁(yè),共一百零二頁(yè),2022年,8月28日二級(jí)封鎖協(xié)議在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后釋放S鎖。二級(jí)封鎖協(xié)議在讀取數(shù)據(jù)之后,立即釋放S鎖,所以它仍然不能防止“重復(fù)讀”數(shù)據(jù)。73第七十三頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R值事務(wù)T2t0XLOCKR1000t1READRt2R=R-100t3UPDATERt4900SLOCKRt5ROLLBACKWAITt6UNLOCKR1000SLOCKRt7READRt8UNLOCKR無污讀問題74第七十四頁(yè),共一百零二頁(yè),2022年,8月28日三級(jí)封鎖協(xié)議在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后并不釋放S鎖,而直到事務(wù)T結(jié)束才釋放。
75第七十五頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1數(shù)據(jù)庫(kù)中R值事務(wù)T2t01000t1SLOCKRt2READRt3XLOCKRt4COMMIT900WAITt5UNLOCKRWAITt61000XLOCKRt7READRt8R=R-200t9UPDATERt10UNLOCKR可重復(fù)讀問題76第七十六頁(yè),共一百零二頁(yè),2022年,8月28日封鎖粒度(LockGranularity)封鎖粒度指封鎖的單位。根據(jù)對(duì)數(shù)據(jù)的不同處理,封鎖的對(duì)象可以是這樣一些邏輯單元:字段、記錄、表、數(shù)據(jù)庫(kù)等,封鎖的數(shù)據(jù)對(duì)象的大小叫封鎖粒度。封鎖粒度越小,系統(tǒng)中能夠被封鎖的對(duì)象就越多,并發(fā)度越高,但封鎖機(jī)構(gòu)復(fù)雜,系統(tǒng)開銷也就越大。封鎖粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象就越少,并發(fā)度越低,封鎖機(jī)構(gòu)越簡(jiǎn)單,相應(yīng)系統(tǒng)開銷也就越小。77第七十七頁(yè),共一百零二頁(yè),2022年,8月28日死鎖和活鎖活鎖(Livelock)
當(dāng)某個(gè)事務(wù)請(qǐng)求對(duì)某一數(shù)據(jù)進(jìn)行排它性封鎖時(shí),由于其他事務(wù)對(duì)該數(shù)據(jù)的操作而使這個(gè)事務(wù)處于永久等待狀態(tài),這種狀態(tài)稱為活鎖。78第七十八頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1事務(wù)T2事務(wù)T3事務(wù)T4t0LOCKRt1LOCKRt2WAITLOCKRt3UNLOCKRWAITWAITLOCKRt4WAITLOCKRWAITt5WAITWAITt6WAITUNLOCKRWAITt7WAITLOCKRt8WAIT活鎖79第七十九頁(yè),共一百零二頁(yè),2022年,8月28日死鎖和活鎖死鎖(Deadlock)在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)在它能夠進(jìn)行之前,都等待著某個(gè)數(shù)據(jù),而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(tài)稱為死鎖。死鎖產(chǎn)生的條件:互斥條件:一個(gè)數(shù)據(jù)對(duì)象一次只能被一個(gè)事務(wù)所使用,即對(duì)數(shù)據(jù)的封鎖采用排它式。不可搶占條件:一個(gè)數(shù)據(jù)對(duì)象只能被占有它的事務(wù)所釋放,而不能被別的事務(wù)強(qiáng)行搶占。部分分配條件:一個(gè)事務(wù)已經(jīng)封鎖分給它的數(shù)據(jù)對(duì)象,但仍然要求封鎖其他數(shù)據(jù)。循環(huán)等待條件:允許等待其他事務(wù)釋放數(shù)據(jù)對(duì)象,系統(tǒng)處于加鎖請(qǐng)求相互等待的狀態(tài)。80第八十頁(yè),共一百零二頁(yè),2022年,8月28日時(shí)間事務(wù)T1事務(wù)T2t0LOCKR1t1LOCKR2t2t3LOCKR2t4WAITt5WAITLOCKR1t6WAITWAITt7WAITWAIT死鎖81第八十一頁(yè),共一百零二頁(yè),2022年,8月28日數(shù)據(jù)RT1T2
事務(wù)依賴圖
死鎖的預(yù)防一次加鎖法:一每個(gè)事物必須將所有要使用的數(shù)據(jù)對(duì)象全部依次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有加鎖成功的數(shù)據(jù)對(duì)象,然后重新開始加鎖。順序加鎖法:是預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,在釋放時(shí),按逆序進(jìn)行。死鎖的診斷與解除如果在事務(wù)依賴圖中沿著箭頭方向存在一個(gè)循環(huán),那么死鎖的條件就形成了,系統(tǒng)就會(huì)出現(xiàn)死鎖。選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷以解除死鎖。82第八十二頁(yè),共一百零二頁(yè),2022年,8月28日并發(fā)調(diào)度的可串行性多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一順序的串行執(zhí)行的結(jié)果相同,則我們稱這種調(diào)度為可串行化的調(diào)度??纱行允遣l(fā)事務(wù)正確性的準(zhǔn)則,按這個(gè)準(zhǔn)則,一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的時(shí),才認(rèn)為是正確的調(diào)度。83第八十三頁(yè),共一百零二頁(yè),2022年,8月28日可串行化調(diào)度例:設(shè)有兩個(gè)事務(wù),分別包含下列操作:事務(wù)T1:讀B;A=B+1;寫回A事務(wù)T2:讀A;B=A+1;寫回B
設(shè)A、B的初值均為4,按T1T2順序執(zhí)行,結(jié)果:A=5,B=6;按T2T1順序執(zhí)行,結(jié)果:A=6,B=5。當(dāng)并發(fā)調(diào)度時(shí),如果執(zhí)行的結(jié)果是這兩者之一,則都是正確的結(jié)果。
84第八十四頁(yè),共一百零二頁(yè),2022年,8月28日策略1:串行調(diào)度85第八十五頁(yè),共一百零二頁(yè),2022年,8月28日策略2:并行調(diào)度不可串行化可串行化86第八十六頁(yè),共一百零二頁(yè),2022年,8月28日5.4數(shù)據(jù)庫(kù)的恢復(fù)系統(tǒng)必須具有檢測(cè)故障并把數(shù)據(jù)從錯(cuò)誤狀態(tài)中恢復(fù)到某一正確狀態(tài)的功能,這就是數(shù)據(jù)庫(kù)的恢復(fù)。數(shù)據(jù)庫(kù)恢復(fù)的基本原理就是利用存儲(chǔ)在系統(tǒng)其他地方的冗余數(shù)據(jù)來修復(fù)?;謴?fù)系統(tǒng)應(yīng)該提供兩種類型的功能:生成冗余數(shù)據(jù)對(duì)可能發(fā)生的故障作某些準(zhǔn)備冗余重建利用這些冗余數(shù)據(jù)恢復(fù)數(shù)據(jù)庫(kù)登記日志文件數(shù)據(jù)轉(zhuǎn)儲(chǔ)87第八十七頁(yè),共一百零二頁(yè),2022年,8月28日登記日志文件日志文件是用來記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新操作的文件。典型的日志文件主要包含以下內(nèi)容:(1)更新數(shù)據(jù)庫(kù)的事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù));(2)操作的類型(插入、刪除或修改);(3)操作對(duì)象;(4)更新前數(shù)據(jù)的舊值(對(duì)于插入操作,沒有舊值);(5)更新后數(shù)據(jù)的新值(對(duì)于刪除操作,沒有新值);(6)事務(wù)處理中的各個(gè)關(guān)鍵時(shí)刻(事務(wù)的開始、結(jié)束及其真正寫回的時(shí)間)。先寫原則:(1)至少要等到相應(yīng)運(yùn)行記錄的撤銷部分已經(jīng)寫入日志文件中以后,才允許該事務(wù)向物理數(shù)據(jù)庫(kù)中寫入記錄。(2)直到事務(wù)的所有運(yùn)行記錄的撤銷和重做兩部分都已寫入日志文件中以后,才允許事務(wù)完成提交處理。88第八十八頁(yè),共一百零二頁(yè),2022年,8月28日為保證數(shù)據(jù)庫(kù)是可恢復(fù)的,登記日志文件時(shí)要求:登記的次序嚴(yán)格按并行事務(wù)執(zhí)行的時(shí)間次序必須先寫日志文件,后寫數(shù)據(jù)庫(kù)寫日志文件操作:把表示這個(gè)修改的日志記錄寫到日志文件寫數(shù)據(jù)庫(kù)操作:把對(duì)數(shù)據(jù)的修改寫到數(shù)據(jù)庫(kù)中89第八十九頁(yè),共一百零二頁(yè),2022年,8月28日登記日志文件的原則(續(xù))為什么要先寫日志文件寫數(shù)據(jù)庫(kù)和寫日志文件是兩個(gè)不同的操作在這兩個(gè)操作之間可能發(fā)生故障如果先寫了數(shù)據(jù)庫(kù)修改,而在日志文件中沒有登記下這個(gè)修改,則以后就無法恢復(fù)這個(gè)修改了如果先寫日志,但沒有修改數(shù)據(jù)庫(kù),按日志文件恢復(fù)時(shí)只不過是多執(zhí)行一次不必要的UNDO操作,并不會(huì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 買賣房屋定金協(xié)議書
- 房屋租賃合同的違約責(zé)任解析
- 簡(jiǎn)單卷閘門合同書樣本2024年
- 2024年國(guó)際快遞合作協(xié)議書
- 客戶服務(wù)協(xié)議書
- 培訓(xùn)授權(quán)協(xié)議書范本
- 【初中地理】城鎮(zhèn)與鄉(xiāng)村教學(xué)課件 2024-2025學(xué)年七年級(jí)地理上冊(cè)(人教版2024)
- 從屬專利的強(qiáng)制實(shí)施許可新
- 房地產(chǎn)交易委托代理合同范本
- 產(chǎn)權(quán)轉(zhuǎn)移協(xié)議書樣本
- 副總經(jīng)理招聘面試題及回答建議(某大型國(guó)企)
- 期中測(cè)試卷(試題)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 建筑工地臺(tái)風(fēng)過后復(fù)工復(fù)產(chǎn)工作方案
- 借款協(xié)議(父母借款給子女買房協(xié)議)(二篇)
- 稅務(wù)師涉稅服務(wù)相關(guān)法律真題2021年
- 2024年太倉(cāng)市城市建設(shè)投資集團(tuán)限公司公開招聘3人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 琴行培訓(xùn)機(jī)構(gòu)合同協(xié)議書
- 少兒趣味編程Scratch綜合實(shí)戰(zhàn)《小車巡線》教學(xué)設(shè)計(jì)
- 中國(guó)融通集團(tuán)招聘筆試題庫(kù)2024
- 20世紀(jì)時(shí)尚流行文化智慧樹知到期末考試答案章節(jié)答案2024年浙江理工大學(xué)
- (高清版)JTGT 3331-04-2023 多年凍土地區(qū)公路設(shè)計(jì)與施工技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論