數據庫應用技術教程 課件 第9、10章-安全管理、事務管理_第1頁
數據庫應用技術教程 課件 第9、10章-安全管理、事務管理_第2頁
數據庫應用技術教程 課件 第9、10章-安全管理、事務管理_第3頁
數據庫應用技術教程 課件 第9、10章-安全管理、事務管理_第4頁
數據庫應用技術教程 課件 第9、10章-安全管理、事務管理_第5頁
已閱讀5頁,還剩110頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

上節知識回顧建立一個觸發器,使得不能刪除信息系的學生信息。創建一個統計表,自動統計student表中的每個系的人數。第9章安全管理01安全控制概述Addatitle03數據庫用戶Addatitle05角色Addatitle02登錄帳戶Addatitle04權限管理Addatitle9.1安全控制概述安全控制:在數據庫應用系統的不同層次提供對有意損害行為的安全防范9.1.1安全控制模型9.1.2SQLServer的安全控制2026/8/913:42安全控制模型2026/8/913:42文件操作控制操作權控制身份驗證用戶數據庫應用程序數據庫管理系統操作系統加密存儲與冗余數據庫SQLServer的安全控制用戶訪問數據庫數據都要經過三個安全認證過程:第一個過程,確認用戶是否是數據庫服務器的合法賬戶(驗證連接權);第二個過程,確認用戶是否是要訪問的數據庫的合法用戶(驗證數據庫訪問權);第三過程,確認用戶是否具有合適的操作權限(驗證操作權)。2026/8/913:42三個安全認證過程圖示01PEPORTONWORK9.2登錄名9.2.1身份認證模式9.2.2建立登錄名9.2.3刪除登錄名2026/8/913:429.2.1身份驗證模式Windows身份驗證模式僅允許授權的Windows用戶訪問SQLServer混合身份驗證模式僅允許授權的Windows用戶和非Windows用戶(SQL用戶)訪問SQLServer設置身份驗證模式在要設置身份驗證模式的SQLServer實例上右擊鼠標,從彈出的菜單中選擇“屬性”命令彈出“服務器屬性”窗口;在該窗口左邊的“選擇頁”上,單擊“安全性”選項;在顯示窗口的“服務器身份驗證”部分,可以設置身份驗證模式。建立Windows身份驗證的登錄名使用Windows登錄名進行的連接,被稱為信任連接。在SSMS的對象資源管理器中,依次展開“安全性”

“登錄名”節點。在“登錄名”節點上右擊鼠標,選擇“新建登錄名”命令。2026/8/913:42單擊“搜索”按鈕,彈出“選擇用戶或組”窗口。2026/8/913:42單擊“高級”按鈕,彈出“選擇用戶或組”窗口。2026/8/913:42單擊“立即查找”按鈕,在下面將列出查找的結果,選擇需要添加為登錄名的用戶。2026/8/913:42建立SQLServer身份驗證的登錄名在SSMS的對象資源管理器中,依次展開“安全性”

“登錄名”節點。在“登錄名”節點上右擊鼠標,選擇“新建登錄名”命令。在彈出的窗口中輸入登錄名。2026/8/913:422026/8/913:42新建登錄窗口的一些選項說明強制密碼過期對該登錄帳戶強制實施密碼過期策略。必須先選中“強制實施密碼策略”才能啟用此復選框。用戶在下次登錄時必須更改密碼首次使用新登錄名時,SQLServer將提示用戶輸入新密碼。2026/8/913:42新建登錄窗口的一些選項說明默認數據庫指定該登錄帳戶初始登錄到SSMS時進入的數據庫。2026/8/913:42一般不設置用T-SQL語句建立登錄名CREATELOGINlogin_name{WITH<option_list1>|FROM<sources>}<sources>::=WINDOWS[WITH<windows_options>[,...]]<option_list1>::=PASSWORD='password'[,<option_list2>[,...]]2026/8/913:42示例例1.創建SQLServer身份驗證的登錄帳戶。登錄名為:SQL_User2,密碼為:abc。CREATELOGINSQL_User2WITHPASSWORD='abc'2026/8/913:42示例例2.創建Windows身份驗證的登錄帳戶。從Windows域帳戶創建[bachelor007/adong]登錄帳戶。CREATELOGIN[bachelor007\adong]FROMWINDOWS2026/8/913:42Adong要有哦示例例3.創建SQLServer身份驗證的登錄帳戶。登錄名為:SQL_User3,密碼為:123。要求該登錄帳戶首次連接服務器時必須更改密碼。CREATELOGINSQL_User3WITHPASSWORD='123'MUST_CHANGE,check_expiration=on2026/8/913:429.2.3刪除登錄帳戶依次展開“安全性”

“登錄名”節點。在要刪除的登錄帳戶上右擊鼠標,選擇“刪除”命令,彈出刪除登錄帳戶屬性窗口。單擊“確定”按鈕。2026/8/913:42刪除登錄帳戶的T-SQL語句DROPLOGINlogin_name不能刪除正在使用的登錄帳戶,也不能刪除擁有任何數據庫對象、服務器級別對象的登錄帳戶。例4.刪除SQL_User2登錄帳戶。DROPLOGINSQL_User22026/8/913:429.3數據庫用戶9.3.1建立數據庫用戶9.3.2刪除數據庫用戶2026/8/913:429.3.1建立數據庫用戶用SSMS建立數據庫用戶:展開要建立數據庫用戶的數據庫。展開“安全性”節點,在“用戶”節點上右擊鼠標,在彈出的菜單上選擇“新建用戶”命令。2026/8/913:42用T-SQL語句建立數據庫用戶CREATEUSERuser_name[{{FOR|FROM}{LOGINlogin_name}]user_name:指定在此數據庫中用于識別該用戶的名稱。LOGINlogin_name:指定要映射為數據庫用戶的SQLServer登錄名。如果省略FORLOGIN,則新的數據庫用戶將被映射到同名的SQLServer登錄名。2026/8/913:42示例例5.讓SQL_User2登錄帳戶成為學生選課數據庫中的用戶,并且用戶名同登錄名。USE學生選課GOCREATEUSERSQL_User2forloginsql_user22026/8/913:42示例例6.首先創建名為Duang且具有密碼的SQLServer身份驗證的服務器登錄名,然后在學生選課數據庫中創建與此登錄帳戶對應的數據庫用戶。CREATELOGINDuangWITHPASSWORD=‘123';GOCREATEUSERDuangFORLOGINDuang;2026/8/913:42注意服務器登錄名與數據庫用戶是兩個完全不同的概念。具有登錄名的用戶可以登錄到SQLServer實例上,而且只局限在實例上進行操作。數據庫用戶是登錄名以什么樣的身份在該數據庫中進行操作,是登錄名在具體數據庫中的映射。9.3.3刪除數據庫用戶DROPUSERuser_name例7.刪除SQL_User2用戶。 DROPUSERSQL_User22026/8/913:429.4管理權限9.4.1權限種類及用戶分類9.4.2權限的管理2026/8/913:42權限種類對象權限是對表、視圖等對象中數據的操作權。語句權限創建對象的權限。隱含權限指由SQLServer預定義的服務器角色、數據庫角色、數據庫擁有者和數據庫對象擁有者所具有的權限。2026/8/913:42對象權限ALTER:具有更改特定數據庫對象屬性的權限。DELETE、INSERT、UPDATE和SELECT:具有對表和視圖數據進行刪除、插入、更改和查詢的權限,其中UPDATE和SELECT可以對表或視圖的單個列進行授權。EXECUTE:具有執行存儲過程的權限。REFERENCES:具有通過外鍵引用其他表的權限。2026/8/913:42語句權限CRAETETABLE:創建表的權限。CREATEVIEW:創建視圖的權限。CREATEPROCEDURE:創建存儲過程的權限。CREATEFUNCTION:創建函數的權限。2026/8/913:42數據庫用戶分類系統管理員在數據庫服務器上具有全部的權限。數據庫對象擁有者創建數據庫對象的用戶即為數據庫對象擁有者。數據庫對象擁有者對其所擁有的對象具有全部權限。普通用戶普通用戶只具有對數據庫數據的增、刪、改、查權限。9.4.2權限管理授予權限:允許用戶或角色具有某種操作權。收回權限:不允許用戶或角色具有某種操作權,或者收回曾經授予的權限。拒絕權限:拒絕某用戶或角色具有某種操作權,既使用戶或角色由于繼承而獲得這種操作權,也不允許執行相應的操作。2026/8/913:42用SQL語句管理對象權限GRANT:授予權限;REVOKE:收回權限;DENY:拒絕權限。2026/8/913:42授權語句GRANT對象權限名[,…]ON{表名|視圖名|存儲過程名}TO{數據庫用戶名|用戶角色名}[,…]2026/8/913:42收權語句REVOKE對象權限名[,…]ON{表名|視圖名|存儲過程名}FROM{數據庫用戶名|用戶角色名}[,…]2026/8/913:42拒絕語句DENY對象權限名[,…]ON{表名|視圖名|存儲過程名}

TO{數據庫用戶名|用戶角色名}[,…]2026/8/913:42示例例1.為用戶user1授予Student表的查詢權。GRANTSELECTONStudentTOuser1例2.為用戶user1授予SC表的查詢權和插入權。GRANTSELECT,INSERTONSCTOuser1例3.收回用戶user1對Student表的查詢權。REVOKESELECTONStudentFROMuser1例4.拒絕user1用戶具有SC表的更改權。DENYUPDATEONSCTOuser12026/8/913:42綜合演練1、創建一個登錄名,ppp,可以使用該登錄名,訪問學生選課數據庫,并且可以對student表進行查詢和更新操作。語句權限管理授權語句GRANT語句權限名[,…]TO{數據庫用戶名|用戶角色名}[,…]2026/8/913:42語句權限管理(續)收權語句REVOKE語句權限名[,…]FROM{數據庫用戶名|用戶角色名}[,…]2026/8/913:42語句權限管理(續)拒絕語句DENY語句權限名[,…]TO{數據庫用戶名|用戶角色名}[,…]2026/8/913:42示例例5.授予user1具有創建表的權限。GRANTCREATETABLETOuser1withgrantoption例6.授予u1和u2具有創建表和視圖的權限。GRANTCREATETABLE,CREATEVIEWTOu1,u2例7.收回授予user1創建表的權限。REVOKECREATETABLEFROMuser1例9.拒絕user1創建視圖的權限。DENYCREATEVIEWTOuser12026/8/913:429.5角色9.5.1建立用戶定義的角色9.5.2為用戶定義的角色授權9.5.3為用戶定義的角色添加成員9.5.4刪除用戶定義角色中的成員概述為便于對用戶及權限的管理,可以將一組具有相同權限的用戶組織在一起,這一組具有相同權限的用戶就稱為角色(Role)。角色類似于Windows操作系統安全體系中的組的概念。2026/8/913:429.5.1建立用戶定義的角色用戶可以根據實際的工作職能情況定義自己的一系列角色,并給每個角色授予合適的權限。用戶自定義的角色的成員可以是數據庫的用戶,也可以是用戶定義的角色。2026/8/913:42建立用戶定義的角色CREATEROLErole_name[AUTHORIZATIONowner_name]role_name:待創建角色的名稱。AUTHORIZATIONowner_name:將擁有新角色的數據庫用戶或角色。如果未指定用戶,則執行CREATEROLE的用戶將擁有該角色。2026/8/913:42示例例1.創建用戶自定義角色:Myrole,擁有者為創建該角色的用戶。CREATEROLEMyrole;例2.創建用戶自定義角色:yourole,擁有者為SQL_User1。CREATEROLEyouroleAUTHORIZATIONSQL_User1;2026/8/913:429.5.2為用戶定義的角色授權使用SQL語句實現對用戶角色的授權與為數據庫用戶授權完全一樣。例3.為Software角色授予Student表的查詢權。GRANTSELECTONStudentTOSoftware例4.為Admin角色授予Student表的增、刪、改、查權。GRANTSELECT,INSERT,DELETE,UPDATEONStudentTOAdmin2026/8/913:429.5.3為用戶定義的角色添加成員sp_addrolemember[@rolename=]'role',[@membername=]'security_account'[@rolename=]'role':當前數據庫中的數據庫角色名。[@membername=]'security_account':要添加到角色中的數據庫用戶名,可以是數據庫用戶、數據庫角色、Windows登錄名或Windows組。如果新成員是沒有相應數據庫用戶的Windows登錄名,則將為其創建一個對應的數據庫用戶。示例例5.將Windows登錄名bachelor007\Win_User1添加到Software角色中。EXECsp_addrolemember'Software',‘BACHELOR007\mmmm'例6.將SQL_User2添加到Admin角色中(假設該角色已存在)。EXECsp_addrolemember'Admin','SQL_User2'9.5.4刪除用戶定義角色中的成員sp_droprolemember[@rolename=]'role',[@membername=]'security_account'[@rolename=]'role':將從中刪除成員的數據庫角色名。[@membername=]‘security_account’:被從數據庫角色中刪除的用戶名。例7.刪除Admin角色中的SQL_User2成員。EXECsp_droprolemember'Admin','SQL_User2'事務管理目錄CONTENTS10.1事務的基本概念0110.2SQLServer2022中的事務控制語句0210.3事務管理示例0310.4事務的隔離級別0410.5事務與并發控制0510.1事務的基本概念一、什么是事務事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位事務和程序是兩個概念在關系數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序一個應用程序通常包含多個事務事務是恢復和并發控制的基本單位二、如何定義事務顯式定義方式

BEGINTRANSACTIONBEGINTRANSACTIONSQL語句1SQL語句1

SQL語句2SQL語句2

。。。。。。。。。。

COMMITROLLBACK隱式方式當用戶沒有顯式地定義事務時,DBMS按缺省規定自動劃分事務begintransactionselect*fromcourseupdatecoursesetcredit=4wherecname='數據庫'rollback事務結束COMMIT事務正常結束提交事務的所有操作(讀+更新)事務中所有對數據庫的更新永久生效ROLLBACK事務異常終止事務運行的過程中發生了故障,不能繼續執行回滾事務的所有更新操作事務滾回到開始時的狀態三、事務的特性(ACID特性)事務的ACID特性:原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持續性(Durability)保證事務ACID特性是事務處理的任務。破壞事務ACID特性的因素:多個事務并行運行時,不同事務的操作交叉執行事務在運行過程中被強行停止1.原子性事務是數據庫的邏輯工作單位事務中包括的諸操作要么都做,要么都不做2.一致性事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態一致性狀態: 數據庫中只包含成功事務提交的結果不一致狀態: 數據庫中包含失敗事務的結果一致性與原子性銀行轉帳:從帳號A中取出一萬元,存入帳號B。定義一個事務,該事務包括兩個操作這兩個操作要么全做,要么全不做全做或者全不做,數據庫都處于一致性狀態。如果只做一個操作,數據庫就處于不一致性狀態。

B=B+1

A=A-1BA3.隔離性對并發執行而言一個事務的執行不能被其他事務干擾一個事務內部的操作及使用的數據對其他并發事務是隔離的并發執行的各個事務之間不能互相干擾

讀A=16

A←A-3寫回A=13①讀A=16

③A←A-1

寫回A=15

④T2T1T1的修改被T2覆蓋了!4.持續性持續性也稱永久性(Permanence)一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。接下來的其他操作或故障不應該對其執行結果有任何影響。10.2SQLServer事務控制語句開始事務語法為`BEGINTRANSACTION[事務名/變量]`,如`BEGINTRANSACTIONTransferMoney`,用于初始化事務。開始事務提交事務語法為`COMMITTRANSACTION[事務名/變量]`,作用是使修改永久生效,如`COMMITTRANSACTIONTransferMoney`,確保操作成功保存。提交事務回滾事務語法為`ROLLBACKTRANSACTION[事務名/變量/保存點]`,作用是撤銷操作,恢復到事務開始前狀態,如`ROLLBACKTRANSACTIONTransferMoney`,用于處理錯誤。回滾事務保存點語法為`SAVETRANSACTION保存點名`,作用是回滾到事務中的特定位置,而非整個事務,如`SAVETRANSACTIONUpdateInventory`后可單獨回滾此部分。保存點事務控制語句使用場景01提交場景提交事務適用于所有操作成功完成時,如轉賬雙方金額修改正確,通過`COMMITTRANSACTION`確保操作永久生效。02回滾場景回滾事務用于操作出錯時,如余額不足或數據沖突,通過`ROLLBACKTRANSACTION`撤銷操作,恢復到事務開始前狀態。03保存點場景保存點適用于復雜事務中部分操作需單獨回滾時,如訂單處理中僅回滾庫存修改,保留用戶信息插入,通過`SAVETRANSACTION`和`ROLLBACKTRANSACTION`實現。10.3事務管理示例21銀行轉賬事務演示多表操作事務演示10.4事務的隔離級別隔離級別定義隔離級別定義為并發環境下,事務之間的隔離程度,決定了事務對其他事務的可見性,作用是平衡數據一致性與并發性能。支持的隔離級別SQLServer2022支持的隔離級別包括讀未提交、讀已提交(默認)、可重復讀、可串行化、快照隔離、讀已提交快照,各有不同特點和適用場景。隔離級別對比隔離級別防止臟讀?防止不可重復讀?防止幻讀?并發性能適用場景讀未提交(READUNCOMMITTED)???最高低一致性要求(如統計分析)讀已提交(READCOMMITTED)???較高常規應用(默認級別)可重復讀(REPEATABLEREAD)???中等需多次讀一致(復雜業務)可串行化(SERIALIZABLE)???最低高一致性(金融交易)快照隔離(SNAPSHOT)???較高高并發(電商、在線交易)讀已提交快照???較高提升讀已提交的并發性能10.5事務與并發控制10.5.1并發控制概述10.5.2封鎖10.5.3活鎖和死鎖10.5.4并發調度的可串行性10.5.5兩段鎖協議10.5.6封鎖粒度問題的產生多用戶數據庫系統的存在允許多個用戶同時使用的數據庫系統飛機定票數據庫系統銀行數據庫系統特點:在同一時刻并發運行的事務數可達數百個問題的產生(續)不同的多事務執行方式

(1)事務串行執行每個時刻只有一個事務運行,其他事務必須等到這個事務結束以后方能運行不能充分利用系統資源,發揮數據庫共享資源的特點T1T2T3事務的串行執行方式問題的產生(續)(2)交叉并發方式(InterleavedConcurrency)在單處理機系統中,事務的并行執行是這些并行事務的并行操作輪流交叉運行單處理機系統中的并行事務并沒有真正地并行運行,但能夠減少處理機的空閑時間,提高系統的效率問題的產生(續)事務的交叉并發執行方式問題的產生(續)(3)同時并發方式(simultaneousconcurrency)多處理機系統中,每個處理機可以運行一個事務,多個處理機可以同時運行多個事務,實現多個事務真正的并行運行事務并發執行帶來的問題會產生多個事務同時存取同一數據的情況可能會存取和存儲不正確的數據,破壞事務一致性和數據庫的一致性10.5.1并發控制概述★并發控制機制的任務對并發操作進行正確調度保證事務的隔離性保證數據庫的一致性并發控制概述(續)并發操作帶來數據的不一致性實例[例1]飛機訂票系統中的一個活動序列①甲售票點(甲事務)讀出某航班的機票余額A,設A=16;T1②乙售票點(乙事務)讀出同一航班的機票余額A,也為16;T2③甲售票點賣出一張機票,修改余額A←A-1,所以A為15,把A寫回數據庫;④乙售票點也賣出一張機票,修改余額A←A-1,所以A為15,把A寫回數據庫結果明明賣出兩張機票,數據庫中機票余額只減少1T1的修改被T2覆蓋了!并發控制概述(續)這種情況稱為數據庫的不一致性,是由并發操作引起的。在并發操作情況下,對甲、乙兩個事務的操作序列的調度是隨機的。若按上面的調度序列執行,甲事務的修改就被丟失。原因:第4步中乙事務修改A并寫回后覆蓋了甲事務的修改并發控制概述(續)★并發操作帶來的數據不一致性:丟失修改(LostUpdate)不可重復讀(Non-repeatableRead)讀“臟”數據(DirtyRead)記號R(x):讀數據xW(x):寫數據x

1.丟失修改兩個事務T1和T2讀入同一數據并修改,T2的提交結果破壞了T1提交的結果,導致T1的修改被丟失。上面飛機訂票例子就屬此類。T1T2①R(A)=16②R(A)=16③A←A-1W(A)=15W④A←A-1W(A)=152.不可重復讀不可重復讀是指事務T1讀取數據后,事務T2

執行更新操作,使T1無法再現前一次讀取結果。不可重復讀包括三種情況:(1)事務T1讀取某一數據后,事務T2對其做了修改,當事務T1再次讀該數據時,得到與前一次不同的值不可重復讀(續)T1讀取B=100進行運算T2讀取同一數據B,對其進行修改后將B=200寫回數據庫。T1為了對讀取值校對重讀B,B已為200,與第一次讀取值不一致T1T2①R(A)=50R(B)=100求和=150②R(B)=100B←B*2(B)=200③R(A)=50R(B)=200和=250(驗算不對)不可重復讀(續)(2)事務T1按一定條件從數據庫中讀取了某些數據記錄后,事務T2刪除了其中部分記錄,當T1再次按相同條件讀取數據時,發現某些記錄消失了(3)事務T1按一定條件從數據庫中讀取某些數據記錄后,事務T2插入了一些記錄,當T1再次按相同條件讀取數據時,發現多了一些記錄。后兩種不可重復讀有時也稱為幻影現象(PhantomRow)3.讀“臟”數據

讀“臟”數據是指:事務T1修改某一數據,并將其寫回磁盤事務T2讀取同一數據后,T1由于某種原因被撤銷這時T1已修改過的數據恢復原值,T2讀到的數據就與數據庫中的數據不一致T2讀到的數據就為“臟”數據,即不正確的數據讀“臟”數據(續)T1T2①R(C)=100C←C*2W(C)=200②R(C)=200③ROLLBACKC恢復為100T1將C值修改為200,T2讀到C為200T1由于某種原因撤銷,其修改作廢,C恢復原值100這時T2讀到的C為200,與數據庫內容不一致,就是“臟”數據并發控制概述(續)★數據不一致性:由于并發操作破壞了事務的隔離性并發控制就是要用正確的方式調度并發操作,使一個用戶事務的執行不受其他事務的干擾,從而避免造成數據的不一致性10.5.2封鎖封鎖就是事務T在對某個數據對象(例如表、記錄等)操作之前,先向系統發出請求,對其加鎖。加鎖后事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其它的事務不能更新此數據對象。基本封鎖類型一個事務對某個數據對象加鎖后究竟擁有什么樣的控制由封鎖的類型決定。★基本封鎖類型排它鎖(ExclusiveLocks,簡記為X鎖)共享鎖(ShareLocks,簡記為S鎖)排它鎖排它鎖又稱為寫鎖若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖保證其他事務在T釋放A上的鎖之前不能再讀取和修改A共享鎖共享鎖又稱為讀鎖若事務T對數據對象A加上S鎖,則其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖保證其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改

★鎖的相容矩陣Y=Yes,相容的請求N=No,不相容的請求

T1T2XS-XNNYSNYY-YYY1.一級封鎖協議一級封鎖協議事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。正常結束(COMMIT)非正常結束(ROLLBACK)一級封鎖協議可防止丟失修改,并保證事務T是可恢復的。在一級封鎖協議中,如果僅僅是讀數據不對其進行修改,是不需要加鎖的:所以它不能保證可重復讀和不讀“臟”數據。使用封鎖機制解決丟失修改問題T1T2①XlockA②R(A)=16XlockA③A←A-1等待W(A)=15等待Commit等待UnlockA等待④獲得XlockAR(A)=15A←A-1⑤W(A)=14CommitUnlockA例:事務T1在讀A進行修改之前先對A加X鎖當T2再請求對A加X鎖時被拒絕T2只能等待T1釋放A上的鎖后獲得對A的X鎖這時T2讀到的A已經是T1更新過的值15T2按此新的A值進行運算,并將結果值A=14寫回到磁盤。避免了丟失T1的更新。沒有丟失修改2.二級封鎖協議二級封鎖協議一級封鎖協議加上事務T在讀取數據R之前必須先對其

加S鎖,讀完后即可釋放S鎖。二級封鎖協議可以防止丟失修改和讀“臟”數據。在二級封鎖協議中,由于讀完數據后即可釋放S鎖,所以它不能保證可重復讀。使用封鎖機制解決讀“臟”數據問題T1T2①XlockCR(C)=100C←C*2W(C)=200②SlockC等待③ROLLBACK等待(C恢復為100)等待UnlockC等待④獲得SlockCR(C)=100⑤CommitCUnlockC例事務T1在對C進行修改之前,先對C加X鎖,修改其值后寫回磁盤T2請求在C上加S鎖,因T1已在C上加了X鎖,T2只能等待T1因某種原因被撤銷,C恢復為原值100T1釋放C上的X鎖后T2獲得C上的S鎖,讀C=100。避免了T2讀“臟”數據不讀“臟”數據

3.三級封鎖協議三級封鎖協議一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。三級封鎖協議可防止丟失修改、讀臟數據和不可重復讀。使用封鎖機制解決不可重復讀問題T1T2①SlockASlockBR(A)=50R(B)=100

求和=150②XlockB等待③R(A)=50等待R(B)=100等待

求和=150等待Commit等待UnlockA等待UnlockB等待④獲得XlockBR(B)=100B←B*2⑤W(B)=200CommitUnlockB事務T1在讀A,B之前,先對A,B加S鎖其他事務只能再對A,B加S鎖,而不能加X鎖,即其他事務只能讀A,B,而不能修改當T2為修改B而申請對B的X鎖時被拒絕只能等待T1釋放B上的鎖T1為驗算再讀A,B,這時讀出的B仍是100,求和結果仍為150,即可重復讀T1結束才釋放A,B上的S鎖。T2才獲得對B的X鎖可重復讀4.封鎖協議小結三級協議的主要區別什么操作需要申請封鎖以及何時釋放鎖(即持鎖時間)不同的封鎖協議使事務達到的一致性級別不同封鎖協議級別越高,一致性程度越高

X鎖S鎖一致性保證

操作結束釋放事務結束釋放操作結束釋放事務結束釋放不丟失修改不讀“臟”數據可重復讀一級封鎖協議

二級封鎖協議

√√

√√

三級封鎖協議

√√√√表11.1不同級別的封鎖協議和一致性保證10.5.3活鎖和死鎖活鎖:事務T1封鎖了數據R事務T2又請求封鎖R,于是T2等待。T3也請求封鎖R,當T1釋放了R上的封鎖之后系統首先批準了T3的請求,T2仍然等待。T4又請求封鎖R,當T3釋放了R上的封鎖之后系統又批準了T4的請求……T2有可能永遠等待,這就是活鎖的情形活鎖(續)活鎖(續)避免活鎖:采用先來先服務的策略當多個事務請求封鎖同一數據對象時按請求封鎖的先后次序對這些事務排隊該數據對象上的鎖一旦釋放,首先批準申請隊列中第一個事務獲得鎖10.5.3.2死鎖事務T1封鎖了數據R1T2封鎖了數據R2T1又請求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖接著T2又申請封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖這樣T1在等待T2,而T2又在等待T1,T1和T2兩個事務永

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論