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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

CREATEDATABASE,BACKUPDATABASETO

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

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

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

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

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

加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintext)變換為不可直接識別的格式(密文,Ciphertext),從而使得不知道解密算法的人無法獲得數(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)的安全防線:網(wǎng)絡(luò)管理員負(fù)責(zé)建立用戶組,設(shè)置帳號并注冊,決定不同的用戶對不同系統(tǒng)資源的訪問級別。(2)SQLServer的運(yùn)行安全防線:通過另一種帳號設(shè)置來創(chuàng)建附加安全層。(3)SQLServer數(shù)據(jù)庫的安全防線:特定數(shù)據(jù)庫都有自己的用戶和角色,該數(shù)據(jù)庫只能由它的用戶或角色訪問,其他用戶無權(quán)訪問其數(shù)據(jù)。(4)SQLServer數(shù)據(jù)庫對象的安全防線:對權(quán)限進(jìn)行管理,TSQL的DCL功能保證合法用戶既使進(jìn)入了數(shù)據(jù)庫也不能有超越權(quán)限的數(shù)據(jù)存取操作。7.1.2SQLServer的安全體系結(jié)構(gòu)和安全認(rèn)證模112.SQLServer的安全認(rèn)證模式(1)Windows(S)安全認(rèn)證模式

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

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

(1)dbo用戶

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

排它鎖(ExclusiveLocks,簡稱X鎖)。

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

共享鎖(ShareLocks,簡稱S鎖)。

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

1.鎖的類型(1)排它鎖(ExclusiveLocks292.封鎖協(xié)議(1)一級封鎖協(xié)議。

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

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

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

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

T1T2T1T2T1T21)讀A=20

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

1)讀C=100C←C*2寫回C

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

2)

讀B=100B←B*2寫回B=2002)

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

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

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

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

2)讀A=20

XlockA等待3)A←A-1寫回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寫回A=18CommitUnlock

4)

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

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

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

X鎖S鎖一致性保證

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

二級協(xié)議

√√

√√

三級協(xié)議

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

X鎖S鎖一致性保證

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

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

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

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

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

事務(wù)內(nèi)部的故障有的是可以通過事務(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)必須重新啟動。3.介質(zhì)故障

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

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

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

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

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

數(shù)據(jù)轉(zhuǎn)儲有以下幾類:(1)靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲

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

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

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

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

(1)日志文件的作用。

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

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

日志文件是用來記錄417.4.3SQLServer的數(shù)據(jù)備份和恢復(fù)機(jī)制SQLServer的三種備份形式:1)完全備份:將數(shù)據(jù)庫中的全部信息進(jìn)行備份,它是恢復(fù)的基線。不但備份數(shù)據(jù)庫的數(shù)據(jù)文件、日志文件,而且還備份文件的存儲位置信息以及數(shù)據(jù)庫中的全部對象。2)事務(wù)日志備份:備份發(fā)生在數(shù)據(jù)庫上的事務(wù)。3)增量備份:差異備份是備份從最近的完全備份之后對數(shù)據(jù)所作的修改,它以完全備份為基準(zhǔn)點(diǎn),即備份完全備份之后變化了的數(shù)據(jù)文件、日志文件以及數(shù)據(jù)庫中其他被修改了的對象。完全備份差異備份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ù)庫。

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

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

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

恢復(fù)步驟是:

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

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

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

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

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

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

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

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

CREATEDATABASE,BACKUPDATABASETO

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

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

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

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

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

加密是根據(jù)一定的算法將原始數(shù)據(jù)(明文,Plaintext)變換為不可直接識別的格式(密文,Ciphertext),從而使得不知道解密算法的人無法獲得數(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)的安全防線:網(wǎng)絡(luò)管理員負(fù)責(zé)建立用戶組,設(shè)置帳號并注冊,決定不同的用戶對不同系統(tǒng)資源的訪問級別。(2)SQLServer的運(yùn)行安全防線:通過另一種帳號設(shè)置來創(chuàng)建附加安全層。(3)SQLServer數(shù)據(jù)庫的安全防線:特定數(shù)據(jù)庫都有自己的用戶和角色,該數(shù)據(jù)庫只能由它的用戶或角色訪問,其他用戶無權(quán)訪問其數(shù)據(jù)。(4)SQLServer數(shù)據(jù)庫對象的安全防線:對權(quán)限進(jìn)行管理,TSQL的DCL功能保證合法用戶既使進(jìn)入了數(shù)據(jù)庫也不能有超越權(quán)限的數(shù)據(jù)存取操作。7.1.2SQLServer的安全體系結(jié)構(gòu)和安全認(rèn)證模562.SQLServer的安全認(rèn)證模式(1)Windows(S)安全認(rèn)證模式

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

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

(1)dbo用戶

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

排它鎖(ExclusiveLocks,簡稱X鎖)。

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

共享鎖(ShareLocks,簡稱S鎖)。

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

1.鎖的類型(1)排它鎖(ExclusiveLocks742.封鎖協(xié)議(1)一級封鎖協(xié)議。

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

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

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

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

T1T2T1T2T1T21)讀A=20

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

1)讀C=100C←C*2寫回C

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

2)

讀B=100B←B*2寫回B=2002)

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

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

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

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

2)讀A=20

XlockA等待3)A←A-1寫回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寫回A=18CommitUnlock

4)

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

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

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

X鎖S鎖一致性保證

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

二級協(xié)議

√√

√√

三級協(xié)議

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

X鎖S鎖一致性保證

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

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

溫馨提示

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

評論

0/150

提交評論