




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
北京市優(yōu)質(zhì)本科課程教材數(shù)據(jù)庫(kù)原理及應(yīng)用教程(第5版)“十二五”普通高等教育本科國(guó)家級(jí)規(guī)劃教材國(guó)家級(jí)一流線上課程配套教材第5章數(shù)據(jù)庫(kù)優(yōu)化和管理數(shù)據(jù)庫(kù)優(yōu)化和管理微課5.1視圖
視圖是一個(gè)虛擬表,其內(nèi)容由查詢定義。同基本表一樣,視圖包含一系列帶有名稱的列和行數(shù)據(jù)。視圖在數(shù)據(jù)庫(kù)中并不是以數(shù)據(jù)值存儲(chǔ)集形式存在,除非是索引視圖。行和列數(shù)據(jù)來(lái)自定義視圖的查詢所引用的基本表,并且在引用視圖時(shí)動(dòng)態(tài)生成。基本表相似:視圖可用于SELECT語(yǔ)句中進(jìn)行查詢VS視圖不同:視圖只存儲(chǔ)定義語(yǔ)句,不存儲(chǔ)其數(shù)據(jù)當(dāng)使用視圖進(jìn)行查詢時(shí),視圖包含的數(shù)據(jù)才會(huì)臨時(shí)生成。1.視圖工作機(jī)制
2.視圖的作用及應(yīng)用
視圖提升了數(shù)據(jù)的邏輯獨(dú)立性視圖可用于數(shù)據(jù)集成視圖提升了數(shù)據(jù)操作的便攜性視圖提升了數(shù)據(jù)的安全性5.1視圖3.創(chuàng)建和修改視圖5.1視圖用ManagementStudio創(chuàng)建視圖用SQL命令創(chuàng)建視圖CREATEVIEWview_name[(column[,...n])][WITH<view_attribute>[,...n]]ASselect_statement[WITHCHECKOPTION][;]<view_attribute>::={[ENCRYPTION][SCHEMABINDING][VIEW_METADATA]}5.1視圖CREATEVIEWSub_TASSELECTTNo,TN,ProfFROMTWHEREDept='計(jì)算機(jī)'[例5-1]創(chuàng)建一個(gè)計(jì)算機(jī)系教師情況的視圖Sub_T。CREATEVIEWS_SC_C(SNo,SN,CN,Score)ASSELECTS.SNo,SN,CN,ScoreFROMS,C,SCWHERES.SNo=SC.SNoANDSC.CNo=C.CNoCREATEVIEWS_Avg(SNo,Avg)ASSELECTSNo,Avg(Score)FROMSCGROUPBYSNo[例5-2]創(chuàng)建一學(xué)生情況視圖S_SC_C(包括學(xué)號(hào)、姓名、課程名及成績(jī))。[例5-3]創(chuàng)建一學(xué)生平均成績(jī)視圖S_Avg。3.創(chuàng)建和修改視圖5.1視圖ALTERVIEW<視圖名>[(<視圖列表>)]AS<子查詢>用ManagementStudio修改視圖用SQL命令修改視圖ALTERVIEWS_SC_C(SN,CN,Score)ASSELECTSN,CN,ScoreFROMS,C,SCWHERES.SNo=SC.SNoANDSC.CNo=C.CNo[例5-4]修改學(xué)生情況視圖S_SC_C(包括姓名、課程名及成績(jī))。4.使用和刪除視圖5.1視圖[例5-5]查詢視圖Sub_T中職稱為教授的教師號(hào)和姓名。
SELECTTNo,TN FROMSub_T WHEREProf='教授'
視圖定義后,對(duì)視圖的查詢操作如同對(duì)基本表的查詢操作一樣。SELECTTNo,TNFROMTWHEREDept='計(jì)算機(jī)‘ANDProf='教授'視圖的建立簡(jiǎn)化了查詢操作4.使用和刪除視圖5.1視圖DROPVIEW<視圖名>
用ManagementStudio刪除視圖用SQL命令刪除視圖DROPVIEWSub_T[例5-6]刪除計(jì)算機(jī)系教師情況的視圖Sub_T。5.更新視圖5.1視圖由于視圖是一張?zhí)摫?,所以?duì)視圖的更新,最終轉(zhuǎn)換成對(duì)基本表的更新。其語(yǔ)法格式如同對(duì)基本表的更新操作一樣。添加修改刪除INSERTUPDATEDELETE5.1視圖[例5-7]向計(jì)算機(jī)系教師視圖Sub_T中添加一條記錄(教師號(hào):T6、姓名:李丹、職稱:副教授)。UPDATESub_TSETProf='副教授'WHERE(TN='劉偉')轉(zhuǎn)換成對(duì)基本表的修改操作:UPDATETSETProf='副教授'WHERETN='劉偉'ANDDept='計(jì)算機(jī)'DELETEFROMSub_TWHERETN='劉偉'[例5-8]將計(jì)算機(jī)系教師視圖Sub_T中劉偉的職稱改為“副教授”。[例5-9]刪除計(jì)算機(jī)系教師視圖Sub_T中劉偉老師的記錄。INSERTINTOSub_T(TNo,TN,Prof)VALUES('T6','李丹','副教授')5.2索引1.索引的作用在很多數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)讀取的次數(shù)多于數(shù)據(jù)庫(kù)寫的次數(shù)如果把數(shù)據(jù)庫(kù)看做字典,可以將索引的鍵看做是字典的拼音,值為該拼音所在的第一個(gè)漢字的位置,借助拼音檢索可以縮小目標(biāo)漢字查找范圍,避免逐頁(yè)查找。索引是一種以空間代價(jià)提升時(shí)間效率的方法。索引一旦創(chuàng)建,將由MySQL自動(dòng)管理和維護(hù),索引的維護(hù)需要消耗計(jì)算資源和存儲(chǔ)資源,如何設(shè)計(jì)索引,是提升數(shù)據(jù)庫(kù)使用效率的關(guān)鍵。如何優(yōu)化數(shù)據(jù)庫(kù)讀取數(shù)據(jù)效率是數(shù)據(jù)庫(kù)優(yōu)化的主要工作之一索引采用鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),加快檢索速度5.2索引2.索引的類型可以從多種角度對(duì)索引進(jìn)行分類:01020304根據(jù)索引與數(shù)據(jù)物理存儲(chǔ)關(guān)系進(jìn)行分類聚集型索引、非聚集型索引根據(jù)索引涉及列數(shù)進(jìn)行分類單列索引、復(fù)合索引根據(jù)索引特征進(jìn)行分類普通索引、唯一索引、主鍵索引、全文索引和空間索引根據(jù)索引存儲(chǔ)方式進(jìn)行分類B-Tree索引、Hash索引5.2索引3.索引的設(shè)置原則嚴(yán)格限制同一個(gè)表或視圖上的索引數(shù)量。索引增多將會(huì)嚴(yán)重影響INSERT、UPDATE和DELETE語(yǔ)句的執(zhí)行性能。對(duì)于表中使用頻度較低或者不再使用的索引,需及時(shí)刪除。對(duì)于重復(fù)值較多的列,不建議建立索引。對(duì)排序、分組或者表連接涉及的字段建立索引,可提升數(shù)據(jù)檢索效率。對(duì)視圖建立索引將提升使用視圖的檢索效率。注意唯一索引和全文對(duì)于NULL的處理方式。5.2索引4.創(chuàng)建和修改索引[例5-10]為表SC在SNo和CNo上建立惟一索引。CREATEUNIQUEINDEXSCIONSC(SNo,CNo)[例5-11]為教師表T在TN上建立聚集索引。CREATECLUSTERINDEXTIONT(TN)用ManagementStudio創(chuàng)建索引用SQL語(yǔ)句創(chuàng)建索引5.2索引4.創(chuàng)建和修改索引修改索引的SQL命令語(yǔ)法如下:ALTERINDEX{index_name|ALL}ONtable_or_view_name{REBUILD[[PARTITION=ALL][WITH(<rebuild_index_option>[,...n])]|[PARTITION=partition_number[WITH(<single_partition_rebuild_index_option>[,...n])]]]|DISABLE|REORGANIZE[PARTITION=partition_number][WITH(LOB_COMPACTION={ON|OFF})]|SET(<set_index_option>[,...n])}[;]5.2索引5.查看和刪除索引Sp_helpindex[@objname=]'name'表的名稱用ManagementStudio查看索引用Sp_helpindex存儲(chǔ)過(guò)程查看索引[例5-12]查看表SC的索引。EXECSp_helpindexSC5.2索引5.查看和刪除索引[例5-13]更改T表中的索引TI名稱為T_Index。EXECSp_rename'T.TI','T_Index'如果要更改索引名稱,可利用Sp_rename存儲(chǔ)過(guò)程更改,其語(yǔ)法如下:Sp_rename'數(shù)據(jù)表名.原索引名','新索引名'5.2索引5.查看和刪除索引用ManagementStudio刪除索引用SQL語(yǔ)句刪除索引DROPINDEX<tableorviewname>.<indexname>DROPINDEX<indexname>ON<tableorviewname>5.3數(shù)據(jù)庫(kù)的安全性1.數(shù)據(jù)庫(kù)安全性的含義安全性問(wèn)題有許多方面:(1)法律、社會(huì)和倫理方面時(shí)問(wèn)題。(2)物理控制方面的問(wèn)題。(3)政策方面的問(wèn)題。(4)運(yùn)行方面的問(wèn)題。(5)硬件控制方面的問(wèn)題。(6)操作系統(tǒng)安全性方面的問(wèn)題。(7)數(shù)據(jù)庫(kù)系統(tǒng)本身的安全性方面的問(wèn)題。數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù)以防止非法使用所造成的數(shù)據(jù)泄露、更改或破壞。5.3數(shù)據(jù)庫(kù)的安全性2.安全性控制的一般方法
圖5-1安全控制模型安全性控制是指要盡可能地杜絕所有可能的數(shù)據(jù)庫(kù)非法訪問(wèn)。5.3數(shù)據(jù)庫(kù)的安全性2.安全性控制的一般方法
(1)用戶標(biāo)識(shí)和鑒定(2)用戶存取權(quán)限控制(3)定義視圖(4)數(shù)據(jù)加密(5)審計(jì)(Audit)5.3數(shù)據(jù)庫(kù)的安全性用戶標(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í),通過(guò)鑒定后才提供計(jì)算機(jī)的使用權(quán)。用戶標(biāo)識(shí)和鑒定的方法用一個(gè)用戶名或用戶標(biāo)識(shí)符來(lái)標(biāo)明用戶的身份,系統(tǒng)以此來(lái)鑒別用戶的合法性。用戶標(biāo)識(shí)符是用戶公開的標(biāo)識(shí),它不足以成為鑒別用戶身份的憑證。通過(guò)用戶名和口令來(lái)鑒定用戶的方法簡(jiǎn)單易行,但該方法在使用時(shí),由于用戶名和口令的產(chǎn)生和使用比較簡(jiǎn)單,也容易被竊取,因此還可采用更復(fù)雜的方法。5.3數(shù)據(jù)庫(kù)的安全性用戶存取權(quán)限控制用戶存取權(quán)限指的是不同的用戶對(duì)于不同的數(shù)據(jù)對(duì)象允許執(zhí)行的操作權(quán)限。在數(shù)據(jù)庫(kù)系統(tǒng)中,定義用戶存取權(quán)限稱為授權(quán)。定義視圖為不同的用戶定義不同的視圖,可以限制各個(gè)用戶的訪問(wèn)范圍。通過(guò)視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無(wú)權(quán)存取這些數(shù)據(jù)的用戶隱藏起來(lái),從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。5.3數(shù)據(jù)庫(kù)的安全性數(shù)據(jù)加密加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)加密成為不可直接識(shí)別的格式,數(shù)據(jù)以密文的形式存儲(chǔ)和傳輸。加密方法替換方法,該方法使用密鑰將明文中的每一個(gè)字符轉(zhuǎn)換為密文中的字符。轉(zhuǎn)換方法,該方法將明文中的字符按不同的順序重新排列。通常將這兩種方法結(jié)合起來(lái)使用,就可以達(dá)到相當(dāng)高的安全程度。5.3數(shù)據(jù)庫(kù)的安全性審計(jì)審計(jì)功能是一種監(jiān)視措施,它跟蹤記錄有關(guān)數(shù)據(jù)的訪問(wèn)活動(dòng)。使用審計(jì)功能把用戶對(duì)數(shù)據(jù)庫(kù)的所有操作自動(dòng)記錄下來(lái),存放在一個(gè)特殊文件中,即審計(jì)日志中。記錄的內(nèi)容一般包括:操作類型(如修改、查詢等),操作終端標(biāo)識(shí)與操作者標(biāo)識(shí),操作日期和時(shí)間,操作所涉及到的相關(guān)數(shù)據(jù)(如基本表、視圖、記錄、屬性等),數(shù)據(jù)的前象和后象等。5.3數(shù)據(jù)庫(kù)的安全性3.SQLServer的安全機(jī)制SQLServer的安全模型分為三層結(jié)構(gòu),分別為服務(wù)器安全管理、數(shù)據(jù)庫(kù)安全管理和數(shù)據(jù)庫(kù)對(duì)象的訪問(wèn)權(quán)限管理。第一層安全性是SQLServer服務(wù)器級(jí)別的安全性第二層安全性是數(shù)據(jù)庫(kù)級(jí)別的安全性第三層安全性是數(shù)據(jù)庫(kù)對(duì)象級(jí)別的安全性5.3數(shù)據(jù)庫(kù)的安全性圖5-2SQLServer的三層安全機(jī)制5.3數(shù)據(jù)庫(kù)的安全性SQLServer提供兩種身份驗(yàn)證模式:Windows身份驗(yàn)證模式和混合身份驗(yàn)證模式(SQLServer和Windows身份驗(yàn)證模式)。在該驗(yàn)證模式下,SQLServer2022使用Windows操作系統(tǒng)來(lái)對(duì)登錄的賬號(hào)進(jìn)行身份驗(yàn)證,支持Windows操作系統(tǒng)的密碼策略和鎖寫策略,賬號(hào)和密碼保存在Windows操作系統(tǒng)的賬戶數(shù)據(jù)庫(kù)中,是一個(gè)系統(tǒng)文件。SQLServer2022服務(wù)器自身不再負(fù)責(zé)身份驗(yàn)證。Windows身份驗(yàn)證模式Windows驗(yàn)證模式下主要有以下優(yōu)點(diǎn):(1)數(shù)據(jù)庫(kù)管理員的工作可以集中在管理數(shù)據(jù)庫(kù)方面,而不是管理用戶賬戶。(2)Windows有著更強(qiáng)的用戶賬戶管理工具??梢栽O(shè)置賬戶鎖定、密碼期限等。(3)Windows的組策略支持多個(gè)用戶同時(shí)被授權(quán)訪問(wèn)SQLServer。如果網(wǎng)絡(luò)中有多個(gè)SQLServer服務(wù)器,就可以選擇通過(guò)Windows身份驗(yàn)證機(jī)制來(lái)完成。5.3數(shù)據(jù)庫(kù)的安全性TCP/IPSockets命名管道SQLServer身份驗(yàn)證模式Windows身份驗(yàn)證模式混合身份驗(yàn)證模式混合身份驗(yàn)證模式允許以SQLServer身份驗(yàn)證模式或者Windows身份驗(yàn)證模式來(lái)進(jìn)行驗(yàn)證。使用哪種身份驗(yàn)證取決于最初通信時(shí)使用的網(wǎng)絡(luò)庫(kù)。在SQLServer身份驗(yàn)證模式下,賬號(hào)和密碼保存在master數(shù)據(jù)庫(kù)的syslogins數(shù)據(jù)表中。5.3數(shù)據(jù)庫(kù)的安全性混合驗(yàn)證模式的優(yōu)點(diǎn)(1)如果用戶是具有Windows登錄名和密碼的Windows域用戶,則還必須提供另一個(gè)用于連接SQLServer的登錄名和密碼,因此,該種驗(yàn)證模式創(chuàng)建了Windows之上的另外一個(gè)安全層次。(2)允許SQLServer支持具有混合操作系統(tǒng)的環(huán)境,在這種環(huán)境中并不是所有用戶均由Windows域進(jìn)行驗(yàn)證。(3)允許用戶從未知的或不可信的域進(jìn)行連接。(4)允許SQLServer支持基于Web的應(yīng)用程序,在這些應(yīng)用程序中用戶可創(chuàng)建自己的標(biāo)識(shí)。5.3數(shù)據(jù)庫(kù)的安全性設(shè)置身份驗(yàn)證模式安裝SQLServer2012時(shí),安裝程序會(huì)提示用戶選擇服務(wù)器身份驗(yàn)證模式,然后根據(jù)用戶的選擇將服務(wù)器設(shè)置為“Windows身份驗(yàn)證模式”或“SQLServer和Windows”身份驗(yàn)證模式。在使用過(guò)程中,可以根據(jù)需要來(lái)重新設(shè)置服務(wù)器的身份驗(yàn)證模式。具體的過(guò)程如下:(1)在SQLServerManagementStudio的【對(duì)象資源管理器】中,右鍵單擊服務(wù)器,在彈出的快捷菜單中單擊【屬性】,會(huì)彈出“服務(wù)器屬性”窗口。(2)在“服務(wù)器屬性“窗口中,在“選擇頁(yè)列表中”選擇”安全性”,之后,在“服務(wù)器身份驗(yàn)證”下,可以選擇新的服務(wù)器身份驗(yàn)證模式,再單擊【確定】按鈕,如圖5-3所示。(3)重新啟動(dòng)SQLServer,使設(shè)置生效。5.3數(shù)據(jù)庫(kù)的安全性圖5-3設(shè)置SQLServer服務(wù)器的身份驗(yàn)證模式5.3數(shù)據(jù)庫(kù)的安全性4.登錄賬號(hào)和服務(wù)器角色在SQLServer中,賬號(hào)有兩種:一種是登錄服務(wù)器的登錄賬號(hào)(LoginName),另外一種是使用數(shù)據(jù)庫(kù)的用戶賬號(hào)(UserName)。
登錄賬號(hào)是指能登錄到SQLServer的賬號(hào),它屬于服務(wù)器的層面,本身并不能讓用戶訪問(wèn)服務(wù)器中的數(shù)據(jù)庫(kù),而登錄者要使用服務(wù)器中的數(shù)據(jù)庫(kù)時(shí),必須要有用戶賬號(hào)才能存取數(shù)據(jù)庫(kù)。就如同公司門口先刷卡進(jìn)入(登錄服務(wù)器),然后再拿鑰匙打開自己的辦公室(進(jìn)入數(shù)據(jù)庫(kù))一樣。5.3數(shù)據(jù)庫(kù)的安全性創(chuàng)建登錄賬號(hào)(1)在【對(duì)象資源管理器】中,展開【安全性】結(jié)點(diǎn),然后右鍵單擊【登錄名】,在彈出的快捷菜單中選擇【新建登錄名】,會(huì)出現(xiàn)“登錄名-新建”窗口。(2)在“登錄名-新建”窗口中,在“選擇頁(yè)”列表中選擇“常規(guī)”。(3)在“登錄名”文本框中輸入要?jiǎng)?chuàng)建的登錄賬號(hào)的名稱,單擊“SQLServer身份驗(yàn)證”單選鈕,并輸入密碼,之后,取消勾選“強(qiáng)制實(shí)施密碼策略”復(fù)選框,如圖5-4所示。5.3數(shù)據(jù)庫(kù)的安全性創(chuàng)建登錄賬號(hào)(4)在圖5-4中,在“選擇頁(yè)”列表中選擇“服務(wù)器角色”,如圖5-5所示。這里可以選擇將該登錄賬號(hào)添加到某個(gè)服務(wù)器角色中成為其成員,并自動(dòng)具有該服務(wù)器角色的權(quán)限。其中,public角色自動(dòng)選中,并且不能刪除。在此選擇sysadmin角色,使該登錄賬號(hào)具有服務(wù)器層面的任何權(quán)限。(5)設(shè)置完所有需要設(shè)置的選項(xiàng)之后,單擊【確定】按鈕即可創(chuàng)建登錄賬號(hào),并且顯示在登錄名列表中,如圖5-6所示5.3數(shù)據(jù)庫(kù)的安全性圖5-4創(chuàng)建SQLServer的登錄賬號(hào)5.3數(shù)據(jù)庫(kù)的安全性圖5-5設(shè)置登錄賬號(hào)的服務(wù)器角色圖5-6新建的登錄賬號(hào)顯示在登錄名列表中5.3數(shù)據(jù)庫(kù)的安全性修改登錄賬號(hào)的過(guò)程和創(chuàng)建登錄賬號(hào)的過(guò)程類似,在【對(duì)象資源管理器】中,展開【安全性】結(jié)點(diǎn)下面的【登錄名】結(jié)點(diǎn),然后右鍵單擊要修改的登錄名,在彈出的快捷菜單中選擇【屬性】菜單,即可打開【登錄屬性】對(duì)話框,接下來(lái)就可以對(duì)該登錄賬號(hào)進(jìn)行修改。其中各選項(xiàng)的含義和“登錄名-新建”窗口中的選項(xiàng)含義相同,這里不再贅述。修改登錄賬號(hào)5.3數(shù)據(jù)庫(kù)的安全性刪除登錄賬號(hào)SQLServer的服務(wù)器角色~角色(Role)是對(duì)權(quán)限集中管理的一種機(jī)制,將不同的權(quán)限組合在一起就
形成了一種角色。~服務(wù)器角色是執(zhí)行服務(wù)器級(jí)管理操作的用戶權(quán)限的集合。在【對(duì)象資源管理器】中,展開【安全性】結(jié)點(diǎn)下面的【登錄名】結(jié)點(diǎn),然后右鍵單擊要?jiǎng)h除的登錄名,在彈出的快捷菜單中選擇【刪除】,在出現(xiàn)的“刪除對(duì)象”窗口中單擊【確定】按鈕即可刪除該登錄賬號(hào)。5.3數(shù)據(jù)庫(kù)的安全性5.數(shù)據(jù)庫(kù)用戶賬號(hào)和數(shù)據(jù)庫(kù)角色數(shù)據(jù)庫(kù)的用戶賬號(hào)登錄名本身并不能讓用戶訪問(wèn)服務(wù)器中的數(shù)據(jù)庫(kù)資源。要訪問(wèn)具體數(shù)據(jù)庫(kù)中的資源,還必須有該數(shù)據(jù)庫(kù)的用戶名。新的登錄名創(chuàng)建以后,才能創(chuàng)建數(shù)據(jù)庫(kù)用戶,數(shù)據(jù)庫(kù)用戶在特定的數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建,必須和某個(gè)登錄名相關(guān)聯(lián)。5.3數(shù)據(jù)庫(kù)的安全性一個(gè)登錄賬戶可以與服務(wù)器上的所有數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián),而數(shù)據(jù)庫(kù)用戶是一個(gè)登錄賬戶在某數(shù)據(jù)庫(kù)中的映射,也即一個(gè)登錄賬戶可以映射到不同的數(shù)據(jù)庫(kù),產(chǎn)生多個(gè)數(shù)據(jù)庫(kù)用戶(但一個(gè)登錄賬戶在一個(gè)數(shù)據(jù)庫(kù)至多只能映射一個(gè)數(shù)據(jù)庫(kù)用戶),一個(gè)數(shù)據(jù)庫(kù)用戶只能映射到一個(gè)登錄賬戶。允許數(shù)據(jù)庫(kù)為每個(gè)用戶對(duì)象分配不同的權(quán)限,這一特性為在組內(nèi)分配權(quán)限提供了最大的自由度與可控性。數(shù)據(jù)庫(kù)的用戶賬號(hào)5.3數(shù)據(jù)庫(kù)的安全性創(chuàng)建數(shù)據(jù)庫(kù)的用戶賬號(hào)可以通過(guò)以下兩種方法創(chuàng)建數(shù)據(jù)庫(kù)用戶賬號(hào)。一種是利用對(duì)象資源管理器創(chuàng)建數(shù)據(jù)庫(kù)用戶,另一種是利用T-SQL語(yǔ)句創(chuàng)建。5.3數(shù)據(jù)庫(kù)的安全性查看或修改數(shù)據(jù)庫(kù)用戶賬號(hào)(1)在【對(duì)象資源管理器】中,展開“具體的數(shù)據(jù)庫(kù)名”(例如數(shù)據(jù)庫(kù)“Teach”)下面的“安全性”節(jié)點(diǎn),再展開其中的“用戶”結(jié)點(diǎn),在“用戶”文件夾下能看到該數(shù)據(jù)庫(kù)的已有用戶。(2)右鍵單擊某個(gè)要操作的用戶,在系統(tǒng)彈出的快捷菜單中選擇“屬性”命令。(3)在打開的數(shù)據(jù)庫(kù)用戶屬性對(duì)話框中可以查看或修改用戶的權(quán)限信息,如“常規(guī)”中的“擁有架構(gòu)”、“角色成員”;“安全對(duì)象”中的具體權(quán)限設(shè)置及“擴(kuò)展屬性”等。(4)設(shè)置完成后,單擊“確定”按鈕,則成功修改數(shù)據(jù)庫(kù)用戶。5.3數(shù)據(jù)庫(kù)的安全性刪除數(shù)據(jù)庫(kù)用戶賬號(hào)(1)在【對(duì)象資源管理器】中,展開“具體的數(shù)據(jù)庫(kù)名”(例如數(shù)據(jù)庫(kù)“Teach”)下面的“安全性”節(jié)點(diǎn),再展開其中的“用戶”結(jié)點(diǎn),在“用戶”文件夾下能看到該數(shù)據(jù)庫(kù)的已有用戶。(2)右鍵單擊某個(gè)要?jiǎng)h除的用戶,在系統(tǒng)彈出的快捷菜單中選擇“刪除”命令,打開“刪除對(duì)象”對(duì)話框。(3)在打開的“刪除對(duì)象”對(duì)話框中選定要?jiǎng)h除的賬號(hào),然后單擊“確定”按鈕,則成功刪除數(shù)據(jù)庫(kù)用戶。5.3數(shù)據(jù)庫(kù)的安全性數(shù)據(jù)庫(kù)角色SQLServer在每個(gè)數(shù)據(jù)庫(kù)中都提供了10個(gè)固定的數(shù)據(jù)庫(kù)角色。與服務(wù)器角色不同的是,數(shù)據(jù)庫(kù)角色權(quán)限的作用域僅限在特定的數(shù)據(jù)庫(kù)內(nèi)。在“對(duì)象資源管理器”中展開相應(yīng)數(shù)據(jù)庫(kù)下的“安全性”結(jié)點(diǎn),然后再單擊“數(shù)據(jù)庫(kù)角色”,即可看到這10個(gè)數(shù)據(jù)庫(kù)角色。5.3數(shù)據(jù)庫(kù)的安全性服務(wù)器角色權(quán)限描述db_accessadmin
訪問(wèn)權(quán)限管理員,能夠添加或刪除數(shù)據(jù)庫(kù)用戶和角色db_backupoperator
數(shù)據(jù)庫(kù)備份管理員,能夠備份和還原數(shù)據(jù)庫(kù)db_datareader數(shù)據(jù)庫(kù)檢索操作員,能夠讀取數(shù)據(jù)庫(kù)中所有用戶表中的所有數(shù)據(jù)db_datawriter數(shù)據(jù)維護(hù)操作員,能夠?qū)?shù)據(jù)庫(kù)中的所有用戶表添加、刪除或修改數(shù)據(jù)db_ddladmin
數(shù)據(jù)庫(kù)對(duì)象管理員,能夠添加、刪除和修改數(shù)據(jù)庫(kù)對(duì)象,如:表、視圖等5.3數(shù)據(jù)庫(kù)的安全性服務(wù)器角色權(quán)限描述public每個(gè)數(shù)據(jù)庫(kù)用戶都屬于public數(shù)據(jù)庫(kù)角色,具有默認(rèn)的權(quán)限db_denydatareader
拒絕執(zhí)行檢索操作員,不能讀取數(shù)據(jù)庫(kù)內(nèi)用戶表中的任何數(shù)據(jù)db_denydatawriter拒絕執(zhí)行數(shù)據(jù)維護(hù)操作員,不能添加、修改或刪除數(shù)據(jù)庫(kù)內(nèi)用戶表中的任何數(shù)據(jù)db_owner數(shù)據(jù)庫(kù)所有者,可以執(zhí)行數(shù)據(jù)庫(kù)的所有活動(dòng),在數(shù)據(jù)庫(kù)中擁有全部權(quán)限db_securityadmin
安全管理員,可以修改角色成員身份和管理權(quán)限5.3數(shù)據(jù)庫(kù)的安全性用戶管理權(quán)限權(quán)限用來(lái)指定授權(quán)用戶可以使用的數(shù)據(jù)庫(kù)對(duì)象和這些授權(quán)用戶可以對(duì)這些數(shù)據(jù)庫(kù)對(duì)象執(zhí)行的那些操作。當(dāng)用戶以某個(gè)登錄賬號(hào)登錄到SQLServer服務(wù)器后,該數(shù)據(jù)庫(kù)用戶賬號(hào)(一定依附于某個(gè)登錄賬號(hào))所歸屬的Windows組(Windows登錄賬號(hào))或所歸屬的數(shù)據(jù)庫(kù)角色被賦予的權(quán)限決定了該用戶能夠?qū)δ男?shù)據(jù)庫(kù)對(duì)象執(zhí)行哪種操作以及能夠訪問(wèn)、修改哪些數(shù)據(jù)。在每個(gè)數(shù)據(jù)庫(kù)中,權(quán)限獨(dú)立于用戶賬號(hào)和用戶在數(shù)據(jù)庫(kù)中的角色,每個(gè)數(shù)據(jù)庫(kù)都有自己獨(dú)立的權(quán)限系統(tǒng)。5.3數(shù)據(jù)庫(kù)的安全性用戶管理權(quán)限系統(tǒng)權(quán)限:系統(tǒng)權(quán)限表示用戶對(duì)數(shù)據(jù)庫(kù)的操作權(quán)限。即創(chuàng)建數(shù)據(jù)庫(kù)或者創(chuàng)建數(shù)據(jù)庫(kù)中的其他內(nèi)容所需要的權(quán)限類型稱為系統(tǒng)權(quán)限。對(duì)象權(quán)限:數(shù)據(jù)庫(kù)對(duì)象權(quán)限是授予數(shù)據(jù)庫(kù)用戶對(duì)特定數(shù)據(jù)庫(kù)中的表、視圖和存儲(chǔ)過(guò)程等對(duì)象的操作權(quán)限,它決定了能對(duì)表、視圖等數(shù)據(jù)庫(kù)對(duì)象執(zhí)行哪些操作,相當(dāng)于數(shù)據(jù)庫(kù)操縱語(yǔ)言的語(yǔ)句權(quán)限。5.4數(shù)據(jù)庫(kù)完整性控制1.數(shù)據(jù)庫(kù)完整性的含義數(shù)據(jù)庫(kù)的完整性是指保護(hù)數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確性、有效性和相容性,防止錯(cuò)誤的數(shù)據(jù)進(jìn)入數(shù)據(jù)庫(kù)造成無(wú)效操作。數(shù)據(jù)庫(kù)的完整性是指防止合法用戶使用數(shù)據(jù)庫(kù)時(shí)向數(shù)據(jù)庫(kù)中加入不符合語(yǔ)義的數(shù)據(jù)。完整性措施的防范對(duì)象是不合語(yǔ)義的數(shù)據(jù)。5.4數(shù)據(jù)庫(kù)完整性控制2.完整性約束條件的分類根據(jù)約束條件:值的約束和結(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ì)空值的約束。5.4數(shù)據(jù)庫(kù)完整性控制2.完整性約束條件的分類結(jié)構(gòu)的約束即對(duì)數(shù)據(jù)之間聯(lián)系的約束。(1)函數(shù)依賴約束。(2)實(shí)體完整性約束。(3)參照完整性約束。(4)統(tǒng)計(jì)約束。根據(jù)約束條件:值的約束和結(jié)構(gòu)的約束5.4數(shù)據(jù)庫(kù)完整性控制根據(jù)約束狀態(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í)不得低于其原來(lái)的工資。5.4數(shù)據(jù)庫(kù)完整性控制3.SQLServer完整性的實(shí)施聲明式數(shù)據(jù)完整性聲明式數(shù)據(jù)完整性是將數(shù)據(jù)所需符合的條件融入到對(duì)象的定義中,這樣SQLServer會(huì)自動(dòng)確保數(shù)據(jù)符合事先制定的條件。這是實(shí)施數(shù)據(jù)完整性的首選。聲明式數(shù)據(jù)完整性的特點(diǎn)是:①通過(guò)針對(duì)表和字段定義聲明的約束,可使聲明式數(shù)據(jù)完整性成為數(shù)據(jù)定義的一部分。②使用約束、默認(rèn)值與規(guī)則實(shí)施聲明式數(shù)據(jù)完整性。5.4數(shù)據(jù)庫(kù)完整性控制程序化數(shù)據(jù)完整性如果所需符合的條件以及該條件的實(shí)施均通過(guò)所編寫的程序代碼完成,則這種形式的數(shù)據(jù)完整性稱為程序化數(shù)據(jù)完整性。程序化數(shù)據(jù)完整性的特點(diǎn)是:程序化數(shù)據(jù)完整性可以通過(guò)相關(guān)的程序語(yǔ)言及工具在客戶端或服務(wù)器端實(shí)施。
SQLServer可以使用存儲(chǔ)過(guò)程或觸發(fā)器實(shí)施程序化數(shù)據(jù)完整性。5.4數(shù)據(jù)庫(kù)完整性控制數(shù)據(jù)庫(kù)完整性的實(shí)施使用規(guī)則使用默認(rèn)5.4數(shù)據(jù)庫(kù)完整性控制規(guī)則規(guī)則(Rule)就是數(shù)據(jù)庫(kù)對(duì)存儲(chǔ)在表中的列或用戶自定義數(shù)據(jù)類型中的值的規(guī)定和限制。規(guī)則與其作用的表或用戶自定義數(shù)據(jù)類型是相互獨(dú)立的,即表或用戶自定義對(duì)象的刪除、修改不會(huì)對(duì)與之相連的規(guī)則產(chǎn)生影響。規(guī)則和約束可以同時(shí)使用,表的列可以有一個(gè)規(guī)則及多個(gè)check約束。5.4數(shù)據(jù)庫(kù)完整性控制規(guī)則的使用步驟創(chuàng)建規(guī)則將規(guī)則綁定到數(shù)據(jù)庫(kù)的對(duì)象上,或者將規(guī)則從數(shù)據(jù)庫(kù)的對(duì)象上松綁。CREATERULErule_nameAScondition_expression創(chuàng)建規(guī)則創(chuàng)建規(guī)則后,規(guī)則僅僅是一個(gè)存在于數(shù)據(jù)庫(kù)中的對(duì)象,并未發(fā)生作用。需要將規(guī)則與數(shù)據(jù)庫(kù)表或用戶自定義對(duì)象聯(lián)系起來(lái),才能達(dá)到創(chuàng)建規(guī)則的目的。所謂綁定就是指定規(guī)則作用于哪個(gè)表的哪一列或哪個(gè)用戶自定義數(shù)據(jù)類型。解除規(guī)則與對(duì)象的綁定稱為“松綁”。CREATERULEage_ruleAS@age>=18and@age<=50【例】創(chuàng)建學(xué)生年齡規(guī)則5.4數(shù)據(jù)庫(kù)完整性控制規(guī)則的使用步驟創(chuàng)建規(guī)則將規(guī)則綁定到數(shù)據(jù)庫(kù)的對(duì)象上,或者將規(guī)則從數(shù)據(jù)庫(kù)的對(duì)象上松綁。sp_bindrule[@rulename=]'rule',[@objname=]'object_name'[,'futureonly’][例]綁定規(guī)則age_rule到S表的字段Age。EXECsp_bindrule'age_rule','S.Age‘用存儲(chǔ)過(guò)程sp_bindrule綁定規(guī)則規(guī)則對(duì)已經(jīng)輸入表中的數(shù)據(jù)不起作用。sp_unbindrule[@objname=]'object_name'[,'futureonly'][例]解除已綁定到S表的字段Age的規(guī)則age_rule。EXECsp_unbindrule'S.Age'用存儲(chǔ)過(guò)程sp_unbindrule松綁規(guī)則的綁定5.4數(shù)據(jù)庫(kù)完整性控制刪除規(guī)則在刪除一個(gè)規(guī)則前必須先將與其綁定的對(duì)象解除綁定。使用DROPRULE命令刪除規(guī)則DROPRULE{rule_name}[,...n][例]刪除age_rule規(guī)則。DROPRULEage_rule5.4數(shù)據(jù)庫(kù)完整性控制默認(rèn)值默認(rèn)(Default)是向用戶輸入記錄時(shí)沒(méi)有指定具體數(shù)據(jù)的列中自動(dòng)插入的數(shù)據(jù)。表的一列或一個(gè)用戶自定義數(shù)據(jù)類型只能與一個(gè)默認(rèn)綁定。5.4數(shù)據(jù)庫(kù)完整性控制默認(rèn)的使用步驟創(chuàng)建默認(rèn)綁定默認(rèn)到數(shù)據(jù)庫(kù)中的對(duì)象CREATEDEFAULTdefault_nameASconstant_expr?ession創(chuàng)建默認(rèn)CREATEDEFAULTbirthday_defaAS'1978-1-1'【例】創(chuàng)建出生日期默認(rèn)birthday_defa。使用sp_helptext存儲(chǔ)過(guò)程可以查看默認(rèn)的信息。[例]查看默認(rèn)birthday_defa。EXECsp_helptextbirthday_defa查看默認(rèn)5.4數(shù)據(jù)庫(kù)完整性控制默認(rèn)的使用步驟用存儲(chǔ)過(guò)程sp_bindefault綁定默認(rèn)sp_bindefault[@defname=]'default', [@objname=]'object_name' [,'futureonly']用存儲(chǔ)過(guò)程sp_unbindefault解除默認(rèn)的綁定sp_unbindefault[@objname=]'object_name'[,'futureonly']創(chuàng)建默認(rèn)綁定默認(rèn)到數(shù)據(jù)庫(kù)中的對(duì)象5.4數(shù)據(jù)庫(kù)完整性控制刪除默認(rèn)使用DROPDEFAULT命令刪除默認(rèn)DROPDEFAULT{default_name}[,…n][例5-21]刪除學(xué)生生日默認(rèn)birthday_defa.DROPDEFGAULTbirthday_defa刪除默認(rèn)在刪除一個(gè)默認(rèn)前必須先將與其綁定的對(duì)象解除綁定。5.5數(shù)據(jù)庫(kù)并發(fā)控制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ù)的情況,如果對(duì)并發(fā)操作不加控制可能會(huì)產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性。并發(fā)控制就是解決這類問(wèn)題,以保持?jǐn)?shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,即在任何一個(gè)時(shí)刻數(shù)據(jù)庫(kù)都將以相同的形式給用戶提供數(shù)據(jù)。5.5數(shù)據(jù)庫(kù)并發(fā)控制2.事務(wù)及性質(zhì)*
事務(wù)是數(shù)據(jù)庫(kù)系統(tǒng)中執(zhí)行的一個(gè)工作單位,它是由用戶定義的一組操作序列。*
一個(gè)事務(wù)可以是一組SQL語(yǔ)句、一條SQL語(yǔ)句或整個(gè)程序,一個(gè)應(yīng)用程序可以包括多個(gè)事務(wù)。定義事務(wù)的語(yǔ)句有三條:BEGINTRANSACTION事務(wù)的開始COMMIT事務(wù)的提交ROLLBACK事務(wù)的回滾5.5數(shù)據(jù)庫(kù)并發(fā)控制事務(wù)的性質(zhì)原子性(Atomicity)AI隔離性(Isolation)C一致性(Consistency)D持久性(Durability)5.5數(shù)據(jù)庫(kù)并發(fā)控制原子性(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ù)滿足完整性約束。5.5數(shù)據(jù)庫(kù)并發(fā)控制隔離性(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ù)。5.5數(shù)據(jù)庫(kù)并發(fā)控制3.并發(fā)操作與數(shù)據(jù)的不一致性多個(gè)用戶同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)資源并對(duì)其進(jìn)行操作時(shí),稱之為并發(fā)操作。并發(fā)操作并發(fā)控制問(wèn)題并發(fā)操作時(shí),如果不加以適當(dāng)控制,可能會(huì)存儲(chǔ)不正確的數(shù)據(jù),產(chǎn)生數(shù)據(jù)的不一致性問(wèn)題。能夠合理調(diào)度并發(fā)事務(wù),避免并發(fā)事務(wù)之間的互相干擾造成數(shù)據(jù)不一致性的技術(shù)稱為數(shù)據(jù)庫(kù)管理系統(tǒng)的并發(fā)控制技術(shù)。5.5數(shù)據(jù)庫(kù)并發(fā)控制[例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ā)操作引起的。5.5數(shù)據(jù)庫(kù)并發(fā)控制數(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ù)的丟失更新問(wèn)題,導(dǎo)致數(shù)據(jù)的不一致。污讀(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)容不一致,這種情況稱為“污讀”。5.5數(shù)據(jù)庫(kù)并發(fā)控制不可重讀(UnrepeatableRead)事務(wù)T1讀取了數(shù)據(jù)R,事務(wù)T2讀取并更新了數(shù)據(jù)R,當(dāng)事務(wù)T1再讀取數(shù)據(jù)R以進(jìn)行核對(duì)時(shí),得到的兩次讀取值不一致,這種情況稱為“不可重讀”。4.封鎖和封鎖協(xié)議實(shí)現(xiàn)并發(fā)控制的方法主要有兩種:封鎖(Lock)技術(shù)和時(shí)標(biāo)(Timestamping)技術(shù)。所謂封鎖就是當(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ù)操作的正確性和一致性。5.5數(shù)據(jù)庫(kù)并發(fā)控制5.5數(shù)據(jù)庫(kù)并發(fā)控制封鎖類型(LockType)基本的封鎖類型有兩種排它型封鎖(ExclusiveLock)排它型封鎖又稱寫封鎖,簡(jiǎn)稱為X封鎖,它采用的原理是禁止并發(fā)操作。共享封鎖(ShareLock)共享封鎖又稱讀封鎖,簡(jiǎn)稱為S鎖,它采用的原理是允許其他用戶對(duì)同一數(shù)據(jù)對(duì)象進(jìn)行查詢,但不能對(duì)該數(shù)據(jù)對(duì)象進(jìn)行修改。一個(gè)事務(wù)對(duì)數(shù)據(jù)對(duì)象A加了X鎖,那么該事務(wù)可以對(duì)A進(jìn)行讀和寫,但其加鎖期間其他事務(wù)不能對(duì)A加任何鎖,直到X鎖釋放。一個(gè)事務(wù)對(duì)數(shù)據(jù)對(duì)象A加了S鎖,那么該事務(wù)可以對(duì)A進(jìn)行讀操作,但不能進(jìn)行寫操作,同時(shí)在其加鎖期間其他事務(wù)能對(duì)A加S鎖,但不能加X鎖,直到S鎖釋放。X鎖S鎖5.5數(shù)據(jù)庫(kù)并發(fā)控制封鎖協(xié)議(LockProtocol)封鎖可以保證合理地進(jìn)行并發(fā)控制,保證數(shù)據(jù)的一致性。在封鎖時(shí),要考慮一定的封鎖規(guī)則,例如,何時(shí)開始封鎖、封鎖多長(zhǎng)時(shí)間、何時(shí)釋放等,這些封鎖規(guī)則稱為封鎖協(xié)議。5.5
數(shù)據(jù)庫(kù)并發(fā)控制通過(guò)三級(jí)封鎖協(xié)議在不同程度上給予解決:一級(jí)封鎖協(xié)議事務(wù)T在修改數(shù)據(jù)對(duì)象之前必須對(duì)其加X鎖,直到事務(wù)結(jié)束。二級(jí)封鎖協(xié)議在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后釋放S鎖。三級(jí)封鎖協(xié)議在一級(jí)封鎖協(xié)議的基礎(chǔ)上,另外加上事務(wù)T在讀取數(shù)據(jù)R之前必須先對(duì)其加S鎖,讀完后并不釋放S鎖,而直到事務(wù)T結(jié)束才釋放。5.5數(shù)據(jù)庫(kù)并發(fā)控制封鎖粒度(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)開銷也就越小。5.5數(shù)據(jù)庫(kù)并發(fā)控制死鎖和活鎖活鎖(Livelock)當(dāng)某個(gè)事務(wù)請(qǐng)求對(duì)某一數(shù)據(jù)進(jìn)行排他性封鎖時(shí),由于其他事務(wù)對(duì)該數(shù)據(jù)的操作而使這個(gè)事務(wù)處于永久等待狀態(tài),這種狀態(tài)稱為活鎖。死鎖(Deadlock)在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)在它能夠進(jìn)行之前,都等待著某個(gè)數(shù)據(jù),而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(tài)稱為死鎖。5.5數(shù)據(jù)庫(kù)并發(fā)控制死鎖產(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)。5.5數(shù)據(jù)庫(kù)并發(fā)控制死鎖的預(yù)防一次加鎖法一次加鎖法是每個(gè)事物必須將所有要使用的數(shù)據(jù)對(duì)象全部一次加鎖,并要求加鎖成功,只要一個(gè)加鎖不成功,表示本次加鎖失敗,則應(yīng)該立即釋放所有加鎖成功的數(shù)據(jù)對(duì)象,然后重新開始加鎖。順序加鎖法預(yù)先對(duì)所有可加鎖的數(shù)據(jù)對(duì)象規(guī)定一個(gè)加鎖順序,每個(gè)事務(wù)都需要按此順序加鎖,在釋放時(shí),按逆序進(jìn)行。5.5數(shù)據(jù)庫(kù)并發(fā)控制死鎖的診斷與解除
如果在事務(wù)依賴圖中沿著箭頭方向存在一個(gè)循環(huán),那么死鎖的條件就形成了,系統(tǒng)就會(huì)出現(xiàn)死鎖。選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),將其撤銷以解除死鎖。數(shù)據(jù)RT1T2
事務(wù)依賴圖5.6數(shù)據(jù)庫(kù)的備份與恢復(fù)1.數(shù)據(jù)庫(kù)恢復(fù)的基礎(chǔ)恢復(fù)系統(tǒng)應(yī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é)合在一起使用。5.6數(shù)據(jù)庫(kù)的備份與恢復(fù)登記日志文件典型的日志文件主要包含以下內(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ù)開始、結(jié)束及其真正回寫時(shí)間)。5.6數(shù)據(jù)庫(kù)的備份與恢復(fù)登記日志文件
日志編輯的原則:先寫原則(1)至少要等到相應(yīng)運(yùn)行記錄的撤銷部分已經(jīng)寫入日志文件中以后,才允許該事務(wù)向物理數(shù)據(jù)庫(kù)中寫入記錄;(2)直到事務(wù)的所有運(yùn)行記錄的撤銷和重做兩部分都已寫入日志文件中以后,才允許事務(wù)完成提交處理。5.6數(shù)據(jù)庫(kù)的備份與恢復(fù)數(shù)據(jù)轉(zhuǎn)儲(chǔ)(DataDump)存儲(chǔ)方式:海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。存儲(chǔ)狀態(tài):靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。數(shù)據(jù)轉(zhuǎn)儲(chǔ)是指定期地將整個(gè)數(shù)據(jù)庫(kù)復(fù)制到多個(gè)存儲(chǔ)設(shè)備(如磁帶、磁盤)上保存起來(lái)的過(guò)程,它是數(shù)據(jù)庫(kù)恢復(fù)中采用的基本手段。5.6數(shù)據(jù)庫(kù)的備份與恢復(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC 62680-1-3:2024 EN-FR Universal serial bus interfaces for data and power - Part 1-3: Common components - USB Type-C?cable and connector specification
- 2025-2030年中國(guó)鋁包木門窗行業(yè)運(yùn)行現(xiàn)狀及發(fā)展前景分析報(bào)告
- 2025-2030年中國(guó)金融資產(chǎn)交易所行業(yè)發(fā)展趨勢(shì)規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)葡萄及深加工行業(yè)發(fā)展?fàn)顩r及營(yíng)銷戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)色紡紗市場(chǎng)運(yùn)行動(dòng)態(tài)及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2025-2030年中國(guó)羊絨產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)程控交換機(jī)行業(yè)發(fā)展現(xiàn)狀及前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)離心泵制造行業(yè)市場(chǎng)運(yùn)營(yíng)狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025遼寧省安全員C證考試(專職安全員)題庫(kù)附答案
- 2025廣東省安全員《C證》考試題庫(kù)及答案
- 黃河流域生態(tài)保護(hù)和高質(zhì)量發(fā)展知識(shí)競(jìng)賽試題及答案(共52題)
- 1、1~36號(hào)元素電子排布式、排布圖
- advantrol-pro v2.70學(xué)習(xí)版系統(tǒng)組態(tài)使用手冊(cè)
- 職業(yè)院校技能大賽沙盤模擬企業(yè)經(jīng)營(yíng)賽項(xiàng)規(guī)程
- 國(guó)網(wǎng)新聞宣傳與企業(yè)文化管理專責(zé)題庫(kù)匯總-下(判斷、簡(jiǎn)答題)
- 職業(yè)衛(wèi)生調(diào)查表
- GB/T 11982.1-2005聚氯乙烯卷材地板第1部分:帶基材的聚氯乙烯卷材地板
- GB/T 10046-2018銀釬料
- GB 4094-2016汽車操縱件、指示器及信號(hào)裝置的標(biāo)志
- 第一講 文化概論
- 小兒急性喉炎-課件
評(píng)論
0/150
提交評(píng)論