




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章數(shù)據(jù)庫(kù)保護(hù)主要內(nèi)容:事務(wù)的概念并發(fā)控制數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)安全性數(shù)據(jù)庫(kù)恢復(fù)第一節(jié)事務(wù)的概念事務(wù)(Transaction)是數(shù)據(jù)庫(kù)恢復(fù)與并發(fā)控制的基本單位。所謂事務(wù),是一個(gè)操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行,是一個(gè)不可分割的工作單位。例如,在銀行轉(zhuǎn)賬工作中,先從一個(gè)賬號(hào)取款,然后向另一個(gè)賬號(hào)存款,這兩個(gè)操作要么都執(zhí)行,要么都不執(zhí)行。所以,這樣兩個(gè)操作應(yīng)該看成一個(gè)事務(wù)。事務(wù)是數(shù)據(jù)庫(kù)維護(hù)數(shù)據(jù)一致性的單位,在每個(gè)事務(wù)結(jié)束時(shí),都能保持?jǐn)?shù)據(jù)一致性。第一節(jié)事務(wù)的概念具體到RDBMS中,事務(wù)可以是一條或一組SQL語(yǔ)句。SQL語(yǔ)言提供了以下的事務(wù)相關(guān)的定義語(yǔ)句:(1)BEGIN
TRANSACTION定義事務(wù)的開(kāi)始;(2)COMMIT
TRANSACTION定義事務(wù)的結(jié)束,即提交事務(wù),具體是將事務(wù)對(duì)數(shù)據(jù)庫(kù)的更改永久寫(xiě)入磁盤(pán)中;(3)ROLLBACK
TRANSACTION定義回滾操作,將事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的所有更改全部還原,數(shù)據(jù)庫(kù)返回到事務(wù)開(kāi)始執(zhí)行前的狀態(tài)。第一節(jié)事務(wù)的概念事務(wù)包含四個(gè)特性,分別是(Atomicity)、一致性(Consistency)、隔離性(Isolation),以及持久性(Durability),這些性質(zhì)又稱(chēng)為事務(wù)的ACID特性。原子性:是指事務(wù)包含的多個(gè)操作是一個(gè)不可分割的整體,這些操作要么全部成功,要么全部失敗。事務(wù)如果執(zhí)行成功則其中所有的操作結(jié)構(gòu)都必須應(yīng)用到數(shù)據(jù)庫(kù),如果執(zhí)行失敗則其中的任一操作都不能對(duì)數(shù)據(jù)庫(kù)有任何影響。第一節(jié)事務(wù)的概念一致性:是指事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變換到另一個(gè)一致性狀態(tài),也就是說(shuō)一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后數(shù)據(jù)庫(kù)都必須處于一致性狀態(tài)。仍然用轉(zhuǎn)賬來(lái)舉例,假設(shè)用戶(hù)A和用戶(hù)B的存款總數(shù)一共是5000元,那么不管A和B之間如何進(jìn)行轉(zhuǎn)賬操作,轉(zhuǎn)賬對(duì)應(yīng)的事務(wù)結(jié)束后兩個(gè)用戶(hù)的存款總數(shù)應(yīng)該還是5000元,這就是事務(wù)的一致性。第一節(jié)事務(wù)的概念隔離性:當(dāng)多個(gè)用戶(hù)并發(fā)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí),一個(gè)事務(wù)的執(zhí)行不能被其它事務(wù)所干擾。比如操作同一張表時(shí),數(shù)據(jù)庫(kù)為每一個(gè)用戶(hù)開(kāi)啟的事務(wù),不能被其他事務(wù)的操作所干擾,多個(gè)并發(fā)事務(wù)之間要相互隔離。簡(jiǎn)單的說(shuō),就是達(dá)到如下效果:對(duì)于任意兩個(gè)并發(fā)的事務(wù)T1和T2,對(duì)事務(wù)T1來(lái)說(shuō),T2要么在T1開(kāi)始之前就已經(jīng)結(jié)束,要么在T1結(jié)束之后才開(kāi)始。對(duì)事務(wù)T2來(lái)說(shuō)也是如此,這樣每個(gè)事務(wù)在執(zhí)行時(shí)都感覺(jué)不到其它事務(wù)的執(zhí)行。第一節(jié)事務(wù)的概念持久性:是指一個(gè)事務(wù)一旦被提交了,那么對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久的,即便是在以后數(shù)據(jù)庫(kù)系統(tǒng)遇到故障的情況下也不會(huì)改變或丟失事務(wù)提交的結(jié)果。在日常運(yùn)行過(guò)程中,事務(wù)是數(shù)據(jù)庫(kù)系統(tǒng)的基本工作單元,因此保證事務(wù)的ACID特性是DBMS的重要任務(wù)。可能破壞這些事務(wù)特性的因素包括:(1)務(wù)正常運(yùn)行過(guò)程中,由于故障、惡意攻擊等原因使得事務(wù)運(yùn)行意外終止;(2)事多用戶(hù)并發(fā)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)時(shí),多個(gè)事務(wù)交叉運(yùn)行。第二節(jié)事務(wù)的并發(fā)控制數(shù)據(jù)庫(kù)是一個(gè)共享資源,可以提供多個(gè)用戶(hù)使用。串行執(zhí)行時(shí),每個(gè)時(shí)刻只有一個(gè)用戶(hù)程序運(yùn)行,執(zhí)行對(duì)數(shù)據(jù)庫(kù)的存取。一個(gè)用戶(hù)程序的操作可能涉及數(shù)據(jù)的計(jì)算、存取和I/O等,單個(gè)操作執(zhí)行期間,與該操作無(wú)關(guān)的數(shù)據(jù)庫(kù)系統(tǒng)資源將處于閑置狀態(tài)。為了充分利用數(shù)據(jù)庫(kù)資源,發(fā)揮數(shù)據(jù)庫(kù)共享資源的特點(diǎn),應(yīng)該允許多個(gè)用戶(hù)同時(shí)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),稱(chēng)為并發(fā)訪(fǎng)問(wèn)。第二節(jié)事務(wù)的并發(fā)控制并發(fā)執(zhí)行的問(wèn)題在銀行系統(tǒng)中的一個(gè)活動(dòng)序列如下:①甲用戶(hù)查詢(xún)某賬戶(hù)余額,得到的結(jié)果是余額為1000元;②乙用戶(hù)在同一時(shí)間也查詢(xún)?cè)撡~戶(hù)余額(假設(shè)甲、乙兩人共同擁有該賬戶(hù)),得到的結(jié)果也是余額為1000元;③甲用戶(hù)從賬戶(hù)中取走500元,這時(shí)賬戶(hù)余額更新為500元,并寫(xiě)回?cái)?shù)據(jù)庫(kù);④乙用戶(hù)同時(shí)也從賬戶(hù)中取走500元,這時(shí)由于乙用戶(hù)之前已經(jīng)讀出的余額是1000元,因此賬戶(hù)余額更新為500元,并寫(xiě)回?cái)?shù)據(jù)庫(kù)。上述操作的結(jié)果是甲、乙兩人從同一個(gè)賬戶(hù)一共取出了1000元,但賬戶(hù)余額仍然顯示為500元。第二節(jié)事務(wù)的并發(fā)控制這種情況稱(chēng)為數(shù)據(jù)庫(kù)的不一致性。這種不一致性是由甲、乙兩人并發(fā)操作引起的。在并發(fā)操作情況下,對(duì)甲、乙兩個(gè)事務(wù)操作序列的調(diào)度是隨機(jī)的。若按上面的調(diào)度序列行,甲事務(wù)對(duì)數(shù)據(jù)庫(kù)的修改就丟失了。這是由于最后乙事務(wù)修改賬戶(hù)余額并寫(xiě)回?cái)?shù)據(jù)庫(kù),覆蓋了甲事務(wù)的修改。并發(fā)操作帶來(lái)的數(shù)據(jù)庫(kù)不一致性可以分為4類(lèi):丟失更新、臟讀、不可重復(fù)讀和幻象讀,上例屬于其中的丟失更新,只是并發(fā)問(wèn)題的一種。第二節(jié)事務(wù)的并發(fā)控制丟失更新當(dāng)兩個(gè)或多個(gè)事務(wù)操作同一數(shù)據(jù),并且基于最初查詢(xún)的值更新該數(shù)據(jù)時(shí),就會(huì)發(fā)生丟失更新問(wèn)題。臟讀并發(fā)執(zhí)行的兩個(gè)事務(wù)中,事務(wù)1讀取了尚未提交的事務(wù)2寫(xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù),當(dāng)事務(wù)2由于某種原因進(jìn)行了回滾,撤銷(xiāo)了對(duì)數(shù)據(jù)的修改,則事務(wù)1讀取的就是不正確的數(shù)據(jù),稱(chēng)為臟讀。例如當(dāng)T1、T2兩個(gè)事務(wù)并發(fā)執(zhí)行時(shí),T1從賬戶(hù)中轉(zhuǎn)走500元,這時(shí)T2讀取賬戶(hù)余額為500元,但T1在轉(zhuǎn)賬到另一賬戶(hù)時(shí)發(fā)
生了錯(cuò)誤,事務(wù)回滾,原有賬戶(hù)余額恢復(fù)為1000元,這時(shí)T2讀取的余額就是錯(cuò)誤的。第二節(jié)事務(wù)的并發(fā)控制不可重復(fù)讀一個(gè)事務(wù)重新讀取前面讀取過(guò)的數(shù)據(jù)時(shí),該數(shù)據(jù)已經(jīng)被另一個(gè)事務(wù)修改過(guò),因此無(wú)法再現(xiàn)前一次讀取的結(jié)果,稱(chēng)為不可重復(fù)讀。例如當(dāng)T1、T2兩個(gè)事務(wù)并發(fā)執(zhí)行時(shí),T1查詢(xún)賬戶(hù)余額為1000元,這時(shí)T2從賬戶(hù)中轉(zhuǎn)走500元,當(dāng)T1再次查詢(xún)賬戶(hù)余額時(shí),得到的賬戶(hù)余額就變成了500元。第二節(jié)事務(wù)的并發(fā)控制幻象讀幻象讀是不可重復(fù)讀的特例,是指一個(gè)事務(wù)重新讀取前面讀取過(guò)的記錄集合時(shí),另一個(gè)事務(wù)向該數(shù)據(jù)集合中添加或刪除了某些記錄。例如當(dāng)T1、T2兩個(gè)事務(wù)并發(fā)執(zhí)行時(shí),T1查詢(xún)本月交易記錄明細(xì),明細(xì)中共有10條記錄,這時(shí)T2進(jìn)行了轉(zhuǎn)賬操作,則增加了一條交易記錄,當(dāng)T1再次查詢(xún)本月交易記錄明細(xì)時(shí),就會(huì)發(fā)現(xiàn)多了一條記錄。第二節(jié)事務(wù)的并發(fā)控制(a)丟失修改T1T2T1T2①讀余額為1000元③取款500余額為500元②讀余額為1000元④取款500①取款500余額為500元③事務(wù)回滾余額為1000元②讀余額為500元余額為500元(b)臟讀T2T1①讀余額為1000元②取款500余額為500元③讀余額為500元(c)不可重復(fù)讀T2T1①查交易明細(xì)共10條記錄②轉(zhuǎn)賬
增加1條記錄③查交易明細(xì)共11條記錄(d)幻象讀第二節(jié)事務(wù)的并發(fā)控制(2)封鎖技術(shù)產(chǎn)生上述問(wèn)題的主要原因是并發(fā)操作破壞了事務(wù)的隔離性,這時(shí)需要進(jìn)行并發(fā)控制。封鎖是事務(wù)并發(fā)控制的一個(gè)非常重要的技術(shù)。所謂封鎖就是一個(gè)事務(wù)在對(duì)某些數(shù)據(jù)對(duì)象進(jìn)行操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其上鎖。上鎖后該事務(wù)就對(duì)這些數(shù)據(jù)庫(kù)對(duì)象有了一定的控制,在事務(wù)釋放申請(qǐng)的鎖之前,其它事務(wù)不能訪(fǎng)問(wèn)此數(shù)據(jù)對(duì)象。第二節(jié)事務(wù)的并發(fā)控制封鎖類(lèi)型事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后如何對(duì)其進(jìn)行控制是由封鎖類(lèi)型決定的?;镜姆怄i類(lèi)型有兩種:排他鎖(eXclusivelock,簡(jiǎn)記為X鎖)和共享鎖(Share
lock簡(jiǎn)記為S鎖)。排他鎖又稱(chēng)為寫(xiě)鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上X鎖,則只允許T讀取和修改A,其它任何事務(wù)都不能再對(duì)A加任何類(lèi)型的鎖,直到T釋放A上的X鎖。共享鎖又稱(chēng)為讀鎖。若事務(wù)T對(duì)數(shù)據(jù)對(duì)象A加上S鎖,則其他事務(wù)只能再對(duì)A加S鎖,而不能加X(jué)鎖,直到T釋放A上的鎖。第二節(jié)事務(wù)的并發(fā)控制封鎖粒度X鎖和S鎖都是加在某一個(gè)數(shù)據(jù)對(duì)象上的。封鎖的對(duì)象可以是邏輯單元,也可以是物理單元。例如,在關(guān)系數(shù)據(jù)庫(kù)中,封鎖對(duì)象可以是屬性值、屬性值集合、元組、關(guān)系、索引項(xiàng)、整個(gè)索引、整個(gè)數(shù)據(jù)庫(kù)等邏輯單元;也可以是頁(yè)(數(shù)據(jù)頁(yè)或索引頁(yè))、塊等物理單元。封鎖對(duì)象可以很大,比如對(duì)整個(gè)數(shù)據(jù)庫(kù)加鎖,也可以很小,比如只對(duì)某個(gè)屬性值加鎖。封鎖對(duì)象的大小稱(chēng)為封鎖的粒度(granularity)。第二節(jié)事務(wù)的并發(fā)控制封鎖粒度與系統(tǒng)的并發(fā)度和并發(fā)控制的開(kāi)銷(xiāo)密切相關(guān)。封鎖的粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象就越少,并發(fā)度也就越小,但同時(shí)系統(tǒng)開(kāi)銷(xiāo)也越?。幌喾?,封鎖的粒度越小,系統(tǒng)中能夠被封鎖的對(duì)象就越多,并發(fā)度越高,但系統(tǒng)開(kāi)銷(xiāo)也就越大。一般說(shuō)來(lái),需要處理大量元組的用戶(hù)事務(wù)可以以關(guān)系為封鎖單元;需要處理多個(gè)關(guān)系的大量元組的用戶(hù)事務(wù)可以以數(shù)據(jù)庫(kù)為封鎖單位;而對(duì)于一個(gè)處理少量元組的用戶(hù)事務(wù),可以以元組為封鎖單位以提高并發(fā)度。第二節(jié)事務(wù)的并發(fā)控制封鎖協(xié)議封鎖的目的是為了保證能夠正確地調(diào)度并發(fā)操作。為此,在運(yùn)用X鎖和S鎖對(duì)一定粒度的數(shù)據(jù)對(duì)象加鎖時(shí),還需要約定一些規(guī)則。例如,應(yīng)何時(shí)申請(qǐng)X鎖或S鎖、何時(shí)釋放等,這些規(guī)則稱(chēng)為封鎖協(xié)議(locking
protocol)。第二節(jié)事務(wù)的并發(fā)控制三級(jí)封鎖協(xié)議對(duì)并發(fā)操作的不正確調(diào)度可能會(huì)帶來(lái)四種數(shù)據(jù)不一致性:丟失或覆蓋更新、臟讀、不可重復(fù)讀和幻象讀。三級(jí)封鎖協(xié)議分別在不同程度上解決了這一問(wèn)題。一級(jí)封鎖協(xié)議:事務(wù)T在修改數(shù)據(jù)R之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。事務(wù)結(jié)束包括正常提交和故障回滾。一級(jí)封鎖協(xié)議可以防止丟失修改問(wèn)題,并保證事務(wù)T是可以恢復(fù)的。第二節(jié)事務(wù)的并發(fā)控制(a)丟失修改T1T2T1T2①讀余額為1000元③取款500余額為500元②讀余額為1000元④取款500①取款500余額為500元③事務(wù)回滾余額為1000元②讀余額為500元余額為500元(b)臟讀T2T1①讀余額為1000元②取款500余額為500元③讀余額為500元(c)不可重復(fù)讀T2T1①查交易明細(xì)共10條記錄②轉(zhuǎn)賬
增加1條記錄③查交易明細(xì)共11條記錄(d)幻象讀第二節(jié)事務(wù)的并發(fā)控制在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)其進(jìn)行修改,是不需要加鎖的,所以它不能防止不可重復(fù)讀和臟讀。二級(jí)封鎖協(xié)議:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,事務(wù)T在讀取數(shù)據(jù)對(duì)象A之前必須先對(duì)其加S鎖,讀完后立即釋放S鎖。二級(jí)封鎖協(xié)議除了可以防止丟失更新,還可進(jìn)一步防止臟讀。第二節(jié)事務(wù)的并發(fā)控制(a)丟失修改T1T2T1T2①讀余額為1000元③取款500余額為500元②讀余額為1000元④取款500①取款500余額為500元③事務(wù)回滾余額為1000元②讀余額為500元余額為500元(b)臟讀T2T1①讀余額為1000元②取款500余額為500元③讀余額為500元(c)不可重復(fù)讀T2T1①查交易明細(xì)共10條記錄②轉(zhuǎn)賬
增加1條記錄③查交易明細(xì)共11條記錄(d)幻象讀第二節(jié)事務(wù)的并發(fā)控制在二級(jí)封鎖協(xié)議中,由于讀完數(shù)據(jù)后立即釋放S鎖,所以它不能避免不可重復(fù)讀問(wèn)題。三級(jí)封鎖協(xié)議:在一級(jí)封鎖協(xié)議的基礎(chǔ)上,事務(wù)T在讀取數(shù)據(jù)對(duì)象A之前必須先對(duì)其加S鎖,直到事務(wù)結(jié)束才釋放。三級(jí)封鎖協(xié)議除了防止丟失更新和讀臟數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀和幻象讀。第二節(jié)事務(wù)的并發(fā)控制(a)丟失修改T1T2T1T2①讀余額為1000元③取款500余額為500元②讀余額為1000元④取款500①取款500余額為500元③事務(wù)回滾余額為1000元②讀余額為500元余額為500元(b)臟讀T2T1①讀余額為1000元②取款500余額為500元③讀余額為500元(c)不可重復(fù)讀T2T1①查交易明細(xì)共10條記錄②轉(zhuǎn)賬
增加1條記錄③查交易明細(xì)共11條記錄(d)幻象讀第二節(jié)事務(wù)的并發(fā)控制兩段封鎖協(xié)議數(shù)據(jù)庫(kù)系統(tǒng)對(duì)并發(fā)事務(wù)中并發(fā)操作的調(diào)度是隨機(jī)的,不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果。在計(jì)算機(jī)中,多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同,我們稱(chēng)這種調(diào)度策略為可串行化(Serializable)調(diào)度。可串行化是并行調(diào)度正確性的唯一準(zhǔn)則,兩段鎖(two-phase
locking,簡(jiǎn)稱(chēng)2PL)協(xié)議是為保證并行調(diào)度可串行化而提供的封鎖協(xié)議。第二節(jié)事務(wù)的并發(fā)控制兩段封鎖協(xié)議規(guī)定:①
在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫(xiě)操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖;②
在釋放一個(gè)封鎖之后,事務(wù)不再獲得任何其它封鎖。所謂“兩段”鎖的含義是,事務(wù)分為兩個(gè)階段,第一階段是獲得封鎖,也稱(chēng)為擴(kuò)展階段,即只能申請(qǐng)鎖,不能釋放鎖。第二階段是釋放封鎖,也稱(chēng)為收縮階段,即只能釋放鎖,不能申請(qǐng)鎖。第二節(jié)事務(wù)的并發(fā)控制例如,事務(wù)T1的封鎖序列是:Slock
A...
Slock
B…
Xlock
C…
Unlock
B…
Unlock
A…Unlock
C;事務(wù)T2的封鎖序列是:Slock
A...
Unlock
A…
Slock
B…
Xlock
C…
Unlock
C…Unlock
B;顯然,T1在擴(kuò)展階段申請(qǐng)了兩個(gè)S鎖和一個(gè)X鎖,在收縮階段將這些所全部釋放,因此遵守兩段封鎖協(xié)議,而T2在擴(kuò)展階段釋放了一個(gè)S鎖,因此破壞了兩段封鎖協(xié)議的規(guī)定。第二節(jié)事務(wù)的并發(fā)控制活鎖與死鎖活鎖:事務(wù)T1封鎖了數(shù)據(jù)R,事務(wù)T2又請(qǐng)求封鎖R,于是T2等待。T3也請(qǐng)求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2仍然等待。然后T4又請(qǐng)求封鎖R,當(dāng)
T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求,...,T2有可能永遠(yuǎn)等待,這是活鎖的例子。事務(wù)T1封鎖了數(shù)據(jù)R1,T2封鎖了數(shù)據(jù)R2,然后T1又請(qǐng)求封鎖R2,因T2已封鎖了R2,于是T1等待T2釋放R2上的鎖。接著T2又申請(qǐng)封鎖R1,因T1已封鎖了R1,T2也只能等待T1釋放R1上的鎖。因此兩事務(wù)將永遠(yuǎn)等待,這是死鎖的例子。第三節(jié)數(shù)據(jù)庫(kù)完整性數(shù)據(jù)庫(kù)完整性(DatabaseIntegrity)是指數(shù)據(jù)庫(kù)中數(shù)據(jù)在邏輯上的一致性、正確性、有效性和相容性。數(shù)據(jù)庫(kù)完整性由各種各樣的完整性約束來(lái)保證,完整性約束保證合法用戶(hù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行修改時(shí)不會(huì)對(duì)數(shù)據(jù)造成意外破壞。實(shí)體完整性實(shí)體完整性在SQL語(yǔ)句的CREATE
TABLE中用PRIMARYKEY關(guān)鍵字定義。如果是單個(gè)屬性構(gòu)成主碼,則可以將PRIMARYKEY用于列級(jí)約束或者表級(jí)約束。如果主碼由多個(gè)屬性構(gòu)成,則PRIMARY
KEY必須用于表級(jí)約束。第三節(jié)數(shù)據(jù)庫(kù)完整性在使用PRIMARY
KEY定義了關(guān)系的主碼后,DBMS就按照實(shí)體完整性的定義自動(dòng)進(jìn)行檢查,如果插入一條元組時(shí)其主碼的值為空或者不唯一,則拒絕插入。為了避免每次插入元組時(shí),都在數(shù)據(jù)庫(kù)中掃描所有數(shù)據(jù),一般會(huì)在主碼上建立索引,通過(guò)查找索引來(lái)確定插入元組的主碼值是否唯一。第三節(jié)數(shù)據(jù)庫(kù)完整性(2)參照完整性參照完整性在SQL語(yǔ)句的CREATE
TABLE中用FOREIGNKEY關(guān)鍵字定義哪些屬性為外碼,用REFERENCES關(guān)鍵字定義外碼參照了哪些關(guān)系的主碼。由于參照參照被關(guān)破系壞操時(shí)作,完整性涉及到多個(gè)被要參區(qū)照分關(guān)破系壞操原作因關(guān)系,因此當(dāng)該完整性約束條件是違由約參處照理關(guān)系還是被參照關(guān)系引插入起元的組,并根無(wú)據(jù)具體情況采取不拒同絕違插約入處理措施。修改外碼值無(wú)拒絕修改無(wú)刪除元組拒絕刪除/級(jí)聯(lián)刪除/設(shè)置為空值無(wú)修改主碼值拒絕修改/級(jí)聯(lián)修改/設(shè)置為空值第三節(jié)數(shù)據(jù)庫(kù)完整性(3)用戶(hù)定義完整性用戶(hù)定義完整性在SQL語(yǔ)句的CREATETABLE中用以下三種關(guān)鍵字來(lái)定義屬性上的約束條件:①
非空約束NOT
NULL;②
唯一性約束UNIQUE;③
檢查約束CHECK(檢查屬性值是否滿(mǎn)足某一布爾型表達(dá)式)。當(dāng)用戶(hù)插入或修改元組時(shí)破壞了上述三類(lèi)約束條件時(shí),DBMS就拒絕執(zhí)行這些操作。第三節(jié)數(shù)據(jù)庫(kù)完整性(4)斷言除了上述的幾種約束以外,還有一種全局性的約束,稱(chēng)為斷言。斷言是用于一個(gè)或多個(gè)表的CHECK約束,需要在表定
義之外獨(dú)立創(chuàng)建。例如,不允許余額小于零的賬戶(hù)存在,斷言如下:CREATE
ASSERTION
assl
CHECK
(NOT
EXISTS
(SELECT
*
FROM
accountWHERE
balance<0));該斷言建立后,其定義存放在數(shù)據(jù)字典中。當(dāng)銀行賬戶(hù)信息變動(dòng)時(shí),如果插入一條余額小于零的賬戶(hù),或者將某個(gè)賬戶(hù)的余額修改為小于零,則拒絕更新,并給出錯(cuò)誤信息。第三節(jié)數(shù)據(jù)庫(kù)完整性(5)完整性約束命名子句除了上述的完整性約束條件之外,SQL語(yǔ)言還在CREATETABLE語(yǔ)句中提供了完整性約束命名子句CONSTRAINT,用于命名完整性約束條件,其語(yǔ)法結(jié)構(gòu)如下:CONSTRAINT<完整性約束條件名>[PRIMARY
KEY約束表達(dá)式|
FOREIGN
KEY約束表達(dá)式|
CHECK約束表達(dá)式]建立完整性約束后,可以使用ALTERTABLE語(yǔ)句來(lái)修改或刪除這些約束條件。ALTER
TABLE
R
DROP
CONSTRAINT
C1;ALTER
TABLE
R
ADD
CONSTRAINT
C1
CHECK
(SnoBETWEEN
20000
AND
30000);第三節(jié)數(shù)據(jù)庫(kù)完整性(6)觸發(fā)器觸發(fā)器是一種特殊類(lèi)型的存儲(chǔ)過(guò)程,當(dāng)數(shù)據(jù)庫(kù)更新時(shí),相應(yīng)的觸發(fā)器就會(huì)自動(dòng)執(zhí)行,從而確保對(duì)數(shù)據(jù)的操作符合所定義的完整性規(guī)則。為了設(shè)置觸發(fā)器,主要是滿(mǎn)足兩個(gè)要求,一是告訴數(shù)據(jù)庫(kù)系統(tǒng),觸發(fā)器什么時(shí)候被觸發(fā),即觸發(fā)條件,二是觸發(fā)后完成什么動(dòng)作,即執(zhí)行的內(nèi)容。當(dāng)不再需要一個(gè)觸發(fā)器時(shí),還需要對(duì)其進(jìn)行刪除。第三節(jié)數(shù)據(jù)庫(kù)完整性SQL語(yǔ)言使用CREATETRIGGER語(yǔ)句創(chuàng)建觸發(fā)器,其語(yǔ)句格式為:CREATE
TRIGGER<觸發(fā)器名>{BEFORE
|
AFTER}<觸發(fā)事件>ON<表名>FOR
EACH
{ROW
|
STATEMENT}[WHEN<觸發(fā)條件>]AS<觸發(fā)動(dòng)作>;其中,只有表的創(chuàng)建者才能在表上創(chuàng)建觸發(fā)器,并且每個(gè)表上允許創(chuàng)建的觸發(fā)器數(shù)量是一定的,不能無(wú)限創(chuàng)建。第三節(jié)數(shù)據(jù)庫(kù)完整性觸發(fā)器分為語(yǔ)句級(jí)觸發(fā)器和行級(jí)觸發(fā)器。語(yǔ)句級(jí)觸發(fā)器(FOREACH
ROW)是由相應(yīng)的SQL語(yǔ)句執(zhí)行進(jìn)行觸發(fā),而行級(jí)觸發(fā)器(FOR
EACH
STATEMENT)則是由一行中的數(shù)據(jù)被更新進(jìn)行觸發(fā)。<觸發(fā)動(dòng)作>既可以是一個(gè)PL/SQL語(yǔ)句塊,也可以是調(diào)用一個(gè)存儲(chǔ)過(guò)程。對(duì)于行級(jí)觸發(fā)器來(lái)說(shuō),可以在<觸發(fā)動(dòng)作>通過(guò)
OLD和NEW關(guān)鍵字引用數(shù)據(jù)更新前和更新后的值。第三節(jié)數(shù)據(jù)庫(kù)完整性例6.1為emploee關(guān)系定義一條行級(jí)觸發(fā)器,要求用戶(hù)年齡在20以下時(shí),自動(dòng)改為20,語(yǔ)句如下:CREATE
TRIGGER
Update_ageBEFORE
INSERT
OR
UPDATE
ON
emploeeFOR
EACH
ROWASBEGINIF
NEW.age
<
20
THENNEW.age
=
20;END
IF;END;第三節(jié)數(shù)據(jù)庫(kù)完整性當(dāng)一個(gè)表上存在多個(gè)觸發(fā)器時(shí),其執(zhí)行一條SQL語(yǔ)句的過(guò)程是:先觸發(fā)并執(zhí)行相關(guān)的BEFORE觸發(fā)器,然后執(zhí)行該SQL語(yǔ)句,最后觸發(fā)并執(zhí)行相關(guān)的AFTER觸發(fā)器。對(duì)于多個(gè)同類(lèi)觸發(fā)器,先創(chuàng)建則先執(zhí)行。刪除觸發(fā)器的語(yǔ)句格式為:DROP
TRIGGER<觸發(fā)器名>ON<表名>;第四節(jié)數(shù)據(jù)庫(kù)安全性數(shù)據(jù)庫(kù)安全屬于計(jì)算機(jī)安全研究領(lǐng)域的一個(gè)分支,包括數(shù)據(jù)庫(kù)系統(tǒng)運(yùn)行安全和數(shù)據(jù)庫(kù)系統(tǒng)信息安全兩個(gè)部分。通用安全標(biāo)準(zhǔn)美國(guó)國(guó)防部于1983年推出了歷史上第一個(gè)計(jì)算機(jī)安全評(píng)價(jià)標(biāo)準(zhǔn)——《可信計(jì)算機(jī)系統(tǒng)評(píng)測(cè)準(zhǔn)則》(Trusted
ComputerSystem
Evaluation
Criteria,TCSEC)。在此基礎(chǔ)上,美國(guó)政府同加拿大及歐共體又進(jìn)一步共同提出了“信息技術(shù)安全評(píng)價(jià)通用準(zhǔn)則”(The
Common
Criteriafor
Information
Technology
security
Evaluation,CC),目的是建立一個(gè)各國(guó)都能接受的通用的信息安全產(chǎn)品和系統(tǒng)的安全性評(píng)估準(zhǔn)則。第四節(jié)數(shù)據(jù)庫(kù)安全性TCSEC標(biāo)準(zhǔn)在用戶(hù)登錄、授權(quán)管理、訪(fǎng)問(wèn)控制、審計(jì)跟蹤、隱蔽通道分析、可信通路建立、安全檢測(cè)、生命周期保障、文檔寫(xiě)作等各方面,均提出了規(guī)范性要求,并根據(jù)所采用的安全策略、系統(tǒng)所具備的安全功能將系統(tǒng)分為四類(lèi)7個(gè)安全級(jí)別。D類(lèi)只包含一個(gè)級(jí)別——D級(jí),是安全性最低的級(jí)別。不滿(mǎn)足任何較高安全可信性的系統(tǒng)全部劃入D級(jí)。該級(jí)別說(shuō)明整個(gè)系統(tǒng)都是不可信任的。第四節(jié)數(shù)據(jù)庫(kù)安全性C類(lèi)為自主保護(hù)類(lèi)(DiscretionaryProtection)。該類(lèi)的安全特點(diǎn)在于系統(tǒng)的對(duì)象可由其主體自定義訪(fǎng)問(wèn)權(quán)。自主保護(hù)類(lèi)依據(jù)安全從低到高又分為C1、C2兩個(gè)安全等級(jí)。C1級(jí):又稱(chēng)自主安全保護(hù)(DiscretionarySecurityProtecti級(jí)。用戶(hù)必須通過(guò)用戶(hù)注冊(cè)名和口令系統(tǒng)識(shí)別,這種組合用來(lái)確定每個(gè)用戶(hù)對(duì)程序和信息擁有什么樣的訪(fǎng)問(wèn)權(quán)限,存在一定的自主訪(fǎng)問(wèn)控制機(jī)制(DAC)。C2級(jí):又稱(chēng)受控制的訪(fǎng)問(wèn)控制級(jí)。它具有以用戶(hù)為單位的DAC機(jī)制,且引入了審計(jì)機(jī)制。第四節(jié)數(shù)據(jù)庫(kù)安全性B類(lèi)為強(qiáng)制保護(hù)類(lèi)(MandatoryProtection)。該類(lèi)的安全特點(diǎn)在于由系統(tǒng)強(qiáng)制的安全保護(hù)。在強(qiáng)制保護(hù)模式中,每個(gè)系統(tǒng)對(duì)象(如文件、目錄等資源)及主體(如系統(tǒng)管理員、用戶(hù)、應(yīng)用程序)都有自己的安全標(biāo)簽(Security
Label),系統(tǒng)依據(jù)主體和對(duì)象的安全標(biāo)簽賦予他對(duì)訪(fǎng)問(wèn)對(duì)象的訪(fǎng)問(wèn)權(quán)限。強(qiáng)制保護(hù)類(lèi)依據(jù)安全從低到高又分為B1、B2、B3三個(gè)安全等級(jí)。第四節(jié)數(shù)據(jù)庫(kù)安全性A類(lèi)為驗(yàn)證設(shè)計(jì)(VerifyDesign)類(lèi):最高的安全級(jí)別,它包含了一個(gè)嚴(yán)格的設(shè)計(jì)、控制和驗(yàn)證過(guò)程。設(shè)計(jì)必須是從數(shù)學(xué)上經(jīng)過(guò)驗(yàn)證的,而且必須進(jìn)行隱蔽通道和可信任分布的分析??尚湃畏植迹═rustedDistribution)的含義是,硬件和軟件在傳輸過(guò)程中已經(jīng)受到保護(hù),不可能破壞安全系統(tǒng)。驗(yàn)證保護(hù)類(lèi)只有一個(gè)安全等級(jí),即A1級(jí)。A1級(jí)要求具有系統(tǒng)形式化頂層設(shè)計(jì)說(shuō)明(FTDS),并形式化驗(yàn)證FTDS與形式化模型的一致性,以及用形式化技術(shù)解決隱蔽通道問(wèn)題等。第四節(jié)數(shù)據(jù)庫(kù)安全性CC開(kāi)發(fā)的目的是使各種安全評(píng)估結(jié)果具有可比性,在安全性評(píng)估過(guò)程中為信息系統(tǒng)及其產(chǎn)品的安全功能和保證措施提供一組通用要求,并確定一個(gè)可信級(jí)別。應(yīng)用CC的結(jié)果是,可使用戶(hù)確定信息系統(tǒng)及安全產(chǎn)品對(duì)他們的應(yīng)用來(lái)說(shuō)是否足夠安全、使用中的安全風(fēng)險(xiǎn)是否可以容忍。要評(píng)估的信息系統(tǒng)和產(chǎn)品被稱(chēng)為評(píng)估對(duì)象(TOE),如操作系統(tǒng)、分布式系統(tǒng)、網(wǎng)絡(luò)及其應(yīng)用等。第四節(jié)數(shù)據(jù)庫(kù)安全性CC由三部分組成,包括:第一部分:簡(jiǎn)介和一般模型。它定義了IT安全評(píng)估的通用概念和原理,提出了評(píng)估的通用模型。它還提出了一些概念,這些概念可用來(lái)表達(dá)IT安全目的,用于選擇和定義IT安全要求、書(shū)寫(xiě)系統(tǒng)與產(chǎn)品的高層規(guī)范。第二部分:安全功能要求。它建立了一系列功能組件,作為表示TOE功能要求的標(biāo)準(zhǔn)方法。第三部分:安全保證要求。它建立了一系列保證組件,作為表示TOE保證要求的標(biāo)準(zhǔn)方法。它也定義了保護(hù)輪廓(PP)和安全目標(biāo)(ST)的評(píng)估準(zhǔn)則,提出了評(píng)估保證級(jí)別,即評(píng)估TOE保證的CC預(yù)定義等級(jí)。所謂PP是指一組獨(dú)立實(shí)現(xiàn)的、滿(mǎn)足特定用戶(hù)需求的TOE安全要求,而ST則是指作為指定的TOE評(píng)估基礎(chǔ)的一組安全要求和規(guī)范。第四節(jié)數(shù)據(jù)庫(kù)安全性(2)數(shù)據(jù)庫(kù)安全機(jī)制用戶(hù)標(biāo)識(shí)與鑒別:最外層的防護(hù)措施,它保證合法的用戶(hù)才能進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)。具體方式是讓用戶(hù)提供能夠鑒別自己身份的相關(guān)信息,常見(jiàn)的方法是由用戶(hù)提供用戶(hù)名或者用戶(hù)標(biāo)識(shí)號(hào)(UID)來(lái)表名身份,同時(shí)提供口令信息以供系統(tǒng)進(jìn)行核實(shí)。訪(fǎng)問(wèn)控制(Access
Control,AC):顯式地定義用戶(hù)的訪(fǎng)問(wèn)權(quán)限(訪(fǎng)問(wèn)能力及范圍),這些定義存儲(chǔ)在數(shù)據(jù)字典中,在用戶(hù)進(jìn)行實(shí)際操作時(shí),DBMS對(duì)照數(shù)據(jù)字典中的定義來(lái)判斷操作的合法性,并拒絕非法操作,從而控制用戶(hù)和程序?qū)?shù)據(jù)庫(kù)的操作。訪(fǎng)問(wèn)控制保證只有授權(quán)用戶(hù)才能訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)中相應(yīng)的數(shù)據(jù),防止了非授權(quán)用戶(hù)對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)。第四節(jié)數(shù)據(jù)庫(kù)安全性當(dāng)前常見(jiàn)的DBMS產(chǎn)品一般都支持TCSEC標(biāo)準(zhǔn)中C2級(jí)的自主訪(fǎng)問(wèn)控制(DAC),部分產(chǎn)品還支持B1級(jí)中的強(qiáng)制訪(fǎng)問(wèn)控制(MAC)。自主訪(fǎng)問(wèn)控制(Discretionary
Access
Control,DAC)是基于主體(用戶(hù))身份或者主體所屬組的身份或者二者的結(jié)合,對(duì)客體(數(shù)據(jù)對(duì)象)訪(fǎng)問(wèn)操作進(jìn)行限制的一種方法,其粒度是單個(gè)用戶(hù)。在自主訪(fǎng)問(wèn)控制技術(shù)中,用戶(hù)對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)控制主要是基于對(duì)用戶(hù)身份的鑒別和訪(fǎng)問(wèn)規(guī)則來(lái)確定。并且,對(duì)某個(gè)信息資源擁有某種權(quán)限的用戶(hù)可以把該權(quán)限授予其他用戶(hù),即選擇與其他用戶(hù)共享數(shù)據(jù)資源。第四節(jié)數(shù)據(jù)庫(kù)安全性在關(guān)系數(shù)據(jù)庫(kù)中,自主訪(fǎng)問(wèn)控制的客體除了數(shù)據(jù)之外,還有數(shù)據(jù)庫(kù)模式、基本表、視圖和索引等??腕w操作權(quán)限數(shù)據(jù)庫(kù)模式CREATE基本表CREATE,
ALTER視圖CREATE索引CREATE表中的數(shù)據(jù)SELECT,
INSERT,
UPDATE,
DELETE,
REFERENCES,ALL
PRIVILEGES屬性列SELECT,
INSERT,
UPDATE,
REFERENCES,
ALLPRIVILEGES第四節(jié)數(shù)據(jù)庫(kù)安全性SQL語(yǔ)言使用GRANT語(yǔ)句賦予用戶(hù)一定的操作權(quán)限,其語(yǔ)法結(jié)構(gòu)如下:GRANT<權(quán)限>[,<權(quán)限>…]ON<客體類(lèi)型><客體名>[,<客體類(lèi)型><客體名>…]
TO<用戶(hù)>[,<用戶(hù)>…][WITH
GRANT
OPTION];其中,如果使用了WITH
GRANT
OPTION,則得到相應(yīng)權(quán)限的用戶(hù)還可以把該權(quán)限賦予其他用戶(hù),但不能進(jìn)行循環(huán)授權(quán)。第四節(jié)數(shù)據(jù)庫(kù)安全性例6.2向用戶(hù)U1授予user表的查詢(xún)權(quán)限,并允許其將該權(quán)限再授予其他用戶(hù),語(yǔ)句如下:GRANT
SELECTON
TABLE
userTO
U1WITH
GRANT
OPTION;例6.3向所有用戶(hù)授予user表的所有操作權(quán)限,語(yǔ)句如下:GRANT
ALL
PRIVILEGESON
TABLE
userTO
PUBLIC;第四節(jié)數(shù)據(jù)庫(kù)安全性在授予權(quán)限后,可以通過(guò)REVOKE語(yǔ)句收回權(quán)限,其語(yǔ)法結(jié)構(gòu)如下:REVOKE<權(quán)限>[,<權(quán)限>…]ON<客體類(lèi)型><客體名>[,<客體類(lèi)型><客體名>…]
FROM<用戶(hù)>[,<用戶(hù)>…][CASCADE
|
RESTRICT];其中,CASCADE表示級(jí)聯(lián)回收權(quán)限,RESTRICT表示限制回收,即指定用戶(hù)將權(quán)限賦予其他用戶(hù)時(shí),不能直接回收該用戶(hù)的權(quán)限。一般情況下,RESTRICT為默認(rèn)選項(xiàng)。第四節(jié)數(shù)據(jù)庫(kù)安全性例6.3級(jí)聯(lián)收回用戶(hù)U1在user表上的查詢(xún)權(quán)限,語(yǔ)句如下:REVOKE
SELECTON
TABLE
userFROM
U1;這一操作將一并收回用戶(hù)U1在user表上的查詢(xún)權(quán)限。第四節(jié)數(shù)據(jù)庫(kù)安全性SQL語(yǔ)言使用CREATE
ROLE來(lái)創(chuàng)建角色,然后使用GRANT和REVOKE語(yǔ)句來(lái)賦予和回收角色的權(quán)限,其語(yǔ)法結(jié)構(gòu)分別如下。創(chuàng)建角色:CREATE
ROLE<角色名>;為角色授予權(quán)限:GRANT<權(quán)限>[,<權(quán)限>…]ON<客體類(lèi)型><客體名>TO<角色>[,<角色>…];第四節(jié)數(shù)據(jù)庫(kù)安全性為用戶(hù)或角色授予角色權(quán)限,一個(gè)角色的權(quán)限等于直接授予該角色的權(quán)限和其他角色授予該角色的權(quán)限:GRANT<角色>[,<角色>…]TO<用戶(hù)>[,<角色>…]
[WITH
ADMIN
OPTION];收回角色的權(quán)限:REVOKE<權(quán)限>[,<權(quán)限>…]ON<客體類(lèi)型><客體名>FROM<角色>[,<角色>…];第四節(jié)數(shù)據(jù)庫(kù)安全性例6.5創(chuàng)建角色R1,語(yǔ)句如下:CREATE
ROLE
R1;剛創(chuàng)建好的角色沒(méi)有任何權(quán)限,這時(shí)使用GRANT語(yǔ)句為其分配權(quán)限。例6.6為角色R1授予user表的所有操作權(quán)限,語(yǔ)句如下:GRANT
ALL
PRIVILEGESON
TABLE
userTO
R1;角色的權(quán)限還可以進(jìn)一步賦予其他用戶(hù)或角色。第四節(jié)數(shù)據(jù)庫(kù)安全性例6.7為用戶(hù)U6、U7授予角色R1的權(quán)限,語(yǔ)句如下:GRANT
R1TO
U6,
U7WITH
ADMIN
OPTION;由于指定了WITH
ADMIN
OPTION,則得到權(quán)限的角色或用戶(hù)還可以進(jìn)一步將權(quán)限賦予其他角色??梢允褂肦EVOKE語(yǔ)句來(lái)回收角色的權(quán)限。例6.8對(duì)用戶(hù)U6收回角色R1的權(quán)限,語(yǔ)句如下:REVOKE
R1FROM
U6;第四節(jié)數(shù)據(jù)庫(kù)安全性強(qiáng)制訪(fǎng)問(wèn)控制(Mandatory
Access
Control,MAC)的基本思想是通過(guò)給主體和客體指定安全級(jí),并根據(jù)安全級(jí)匹配規(guī)則來(lái)確定主體能夠訪(fǎng)問(wèn)的客體范圍。主體的安全級(jí)反映主體的可信度,稱(chēng)為許可證級(jí)別??腕w的安全級(jí)反映客體的敏感度,稱(chēng)為敏感度標(biāo)記。主、客體的安全級(jí)都被分為不同等級(jí),如秘密、機(jī)密、絕密等。MAC中為了保證信息的機(jī)密性,要求:(1)無(wú)向上讀,不允許低安全級(jí)的主體讀取高安全級(jí)的客體信息;(2)無(wú)向下寫(xiě),不允許高安全級(jí)的信息寫(xiě)入低安全級(jí)的區(qū)域,或者說(shuō)不允許高安全級(jí)用戶(hù)向低安全級(jí)的客體寫(xiě)入信息。上述規(guī)則保證了信息的不會(huì)從高安全級(jí)別流向低安全級(jí)別。第四節(jié)數(shù)據(jù)庫(kù)安全性除了授權(quán)機(jī)制以外,使用視圖機(jī)制也可以限制用戶(hù)對(duì)數(shù)據(jù)的訪(fǎng)問(wèn)。為不同用戶(hù)定義不同的視圖,使得每個(gè)用戶(hù)的訪(fǎng)問(wèn)范圍限制在相應(yīng)的視圖之內(nèi),可以為數(shù)據(jù)庫(kù)提供一定程度的安全保護(hù),同時(shí)也實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的邏輯獨(dú)立性。但視圖機(jī)制所能提供的保護(hù)精細(xì)度有限,一般達(dá)不到實(shí)際應(yīng)用的要求,因此常常與訪(fǎng)問(wèn)控制機(jī)制結(jié)合使用。首先使用視圖機(jī)制對(duì)用戶(hù)和數(shù)據(jù)進(jìn)行初步劃分,然后再使用訪(fǎng)問(wèn)控制機(jī)制做進(jìn)一步細(xì)分。第四節(jié)數(shù)據(jù)庫(kù)安全性加密技術(shù)是一種防止數(shù)據(jù)泄露的技術(shù)。它的核心技術(shù)是密碼學(xué),密碼學(xué)是研究密碼系統(tǒng)或通信安全的一門(mén)學(xué)科,它又分為密碼編碼學(xué)和密碼分析學(xué)。任何一個(gè)加密系統(tǒng)都是由明文、密文、算法和密鑰組成。其中,明文是原始的或未加密的數(shù)據(jù),通過(guò)加密算法對(duì)其進(jìn)行加密,加密算法的輸入信息為明文和密鑰。密文是明文加密后的格式,是加密算法的輸出信息。加密算法是公開(kāi)的,而密鑰則是不公開(kāi)的。密文不應(yīng)為無(wú)密鑰的用戶(hù)理解,用于數(shù)據(jù)的存儲(chǔ)以及傳輸。密鑰,是由數(shù)字、字母或特殊符號(hào)組成的字符串,用它控制數(shù)據(jù)加密、解密的過(guò)程。第四節(jié)數(shù)據(jù)庫(kù)安全性前面討論的安全機(jī)制從不同方面對(duì)可能存在的惡意攻擊行為進(jìn)行了防護(hù),但任何系統(tǒng)都不可能做到百分之百安全。當(dāng)系統(tǒng)安全遭到破壞時(shí),根據(jù)操作記錄分析原因,找出相關(guān)責(zé)任人也是非常重要的一項(xiàng)任務(wù),這項(xiàng)任務(wù)由安全審計(jì)來(lái)完成。在TCSEC標(biāo)準(zhǔn)中,達(dá)到C2以上級(jí)別的系統(tǒng)必須具備審計(jì)功能。安全審計(jì)是一種對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的監(jiān)視措施,對(duì)哪些用戶(hù)對(duì)哪些數(shù)據(jù)進(jìn)行了什么操作進(jìn)行記錄,并將記錄結(jié)果存放在審計(jì)日志中。根據(jù)審計(jì)日志,系統(tǒng)可以對(duì)安全事故進(jìn)行權(quán)責(zé)追查。審計(jì)功能通常耗費(fèi)較多的系統(tǒng)資源,因此在實(shí)際應(yīng)用中需要根據(jù)情況來(lái)選擇是否開(kāi)啟、什么時(shí)候開(kāi)啟審計(jì)功能。第四節(jié)數(shù)據(jù)庫(kù)安全性SQL語(yǔ)言使用AUDIT語(yǔ)句來(lái)設(shè)置審計(jì)功能,相應(yīng)的NOAUDIT語(yǔ)句取消審計(jì)功能。例6.9對(duì)user表上的數(shù)據(jù)插入和修改操作開(kāi)啟審計(jì)功能,語(yǔ)句如下:AUDIT
INSERT,
UPDATEON
user;例6.10對(duì)user表的修改操作開(kāi)啟審計(jì)功能,語(yǔ)句如下:AUDIT
ALTERON
user;例6.11取消user表的修所有審計(jì)功能,語(yǔ)句如下:NO
AUDIT
ALTER,INSERT,UPDATEON
user;第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)數(shù)據(jù)庫(kù)恢復(fù)技術(shù)的主要內(nèi)容包括兩方面,了解造成數(shù)據(jù)庫(kù)中數(shù)據(jù)損壞或丟失的故障類(lèi)型,以及針對(duì)這些故障的恢復(fù)措施。數(shù)據(jù)庫(kù)系統(tǒng)中常見(jiàn)的故障類(lèi)型有三種,包括事務(wù)內(nèi)部故障、系統(tǒng)故障和存儲(chǔ)設(shè)備(介質(zhì))故障。事務(wù)故障可分為預(yù)期的和非預(yù)期的,其中大部分的故障都是非預(yù)期的。預(yù)期的事務(wù)故障是指可以通過(guò)事務(wù)程序本身發(fā)現(xiàn)的故障,非預(yù)期的事務(wù)故障是不能由事務(wù)程序處理的故障。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)系統(tǒng)故障及其恢復(fù)系統(tǒng)故障是指系統(tǒng)在運(yùn)行過(guò)程中,由于某種原因,造成系統(tǒng)停止運(yùn)轉(zhuǎn),致使所有正在運(yùn)行的事務(wù)都以非正常方式終止,要求系統(tǒng)重新啟動(dòng)。存儲(chǔ)介質(zhì)故障主要指數(shù)據(jù)庫(kù)在運(yùn)行過(guò)程中,由于磁頭碰撞、磁盤(pán)損壞、強(qiáng)磁干擾、天災(zāi)人禍等情況,導(dǎo)致外存儲(chǔ)設(shè)備損壞,使得數(shù)據(jù)庫(kù)中的數(shù)據(jù)部分或全部丟失。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)對(duì)于各種各樣的故障類(lèi)型,恢復(fù)技術(shù)通過(guò)預(yù)先存儲(chǔ)的冗余數(shù)據(jù)來(lái)重建數(shù)據(jù)庫(kù),其中涉及到兩個(gè)關(guān)鍵問(wèn)題,一是如何建立冗余數(shù)據(jù),二是如何通過(guò)冗余數(shù)據(jù)來(lái)重建數(shù)據(jù)庫(kù)。其中,問(wèn)題一涉及到數(shù)據(jù)轉(zhuǎn)儲(chǔ)技術(shù),問(wèn)題二涉及到數(shù)據(jù)庫(kù)日志文件。數(shù)據(jù)轉(zhuǎn)儲(chǔ)也稱(chēng)為數(shù)據(jù)備份,是指由DBA定期將整個(gè)數(shù)據(jù)庫(kù)從本地系統(tǒng)存儲(chǔ)設(shè)備復(fù)制到另一存儲(chǔ)設(shè)備進(jìn)行保存的過(guò)程。轉(zhuǎn)儲(chǔ)得到的備份數(shù)據(jù)稱(chēng)為后備副本。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)一般來(lái)說(shuō),數(shù)據(jù)轉(zhuǎn)儲(chǔ)分為靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)兩類(lèi)。靜態(tài)轉(zhuǎn)儲(chǔ)是在系統(tǒng)中無(wú)運(yùn)行事務(wù)時(shí)進(jìn)行轉(zhuǎn)儲(chǔ),轉(zhuǎn)儲(chǔ)開(kāi)始時(shí)數(shù)據(jù)庫(kù)處于一致?tīng)顟B(tài),轉(zhuǎn)儲(chǔ)期間不允許對(duì)數(shù)據(jù)庫(kù)的任何存取、修改活動(dòng)。動(dòng)態(tài)轉(zhuǎn)儲(chǔ)可以與用戶(hù)事務(wù)并發(fā)執(zhí)行,轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)數(shù)據(jù)庫(kù)日志文件是用于記錄事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的更新操作的文件,是日志記錄的有序集合。其中,一般的日志記錄的內(nèi)容包括:各個(gè)事務(wù)的開(kāi)始標(biāo)記(BEGIN
TRANSACTION)、各個(gè)事務(wù)的結(jié)束標(biāo)記(COMMITTRANSACTION/ROLLBACK
TRANSACTION),以及各個(gè)事務(wù)的所有更新操作。在數(shù)據(jù)庫(kù)系統(tǒng)的運(yùn)行過(guò)程中,每條事務(wù)的執(zhí)行都會(huì)導(dǎo)致生成一條新的日志記錄。在事務(wù)的更新操作對(duì)數(shù)據(jù)庫(kù)修改生效之前,必須先將相應(yīng)的日志記錄寫(xiě)入到日志文件中(先寫(xiě)日志,后提交事務(wù))。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)事務(wù)故障恢復(fù)事務(wù)故障分為預(yù)期的事務(wù)故障和非預(yù)期的事務(wù)故障。對(duì)于預(yù)期的事務(wù)故障,相應(yīng)的恢復(fù)方法是將事務(wù)回滾,撤銷(xiāo)對(duì)數(shù)據(jù)庫(kù)的修改。對(duì)于非預(yù)期的事務(wù)內(nèi)部故障,恢復(fù)方法是強(qiáng)制回滾事務(wù),在保證該事務(wù)對(duì)其他事務(wù)沒(méi)有影響的條件下,利用日志文件撤銷(xiāo)(UNDO)其對(duì)數(shù)據(jù)庫(kù)的修改。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)系統(tǒng)故障恢復(fù)系統(tǒng)故障導(dǎo)致數(shù)據(jù)庫(kù)不一致的情況有兩種:一種是某些未完成事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新已寫(xiě)入物理數(shù)據(jù)庫(kù)中,另一種是某些已提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的更新結(jié)果還保留在緩沖區(qū)中,尚未寫(xiě)到物理數(shù)據(jù)庫(kù)中。對(duì)于這兩種情況,恢復(fù)操作需要撤銷(xiāo)故障發(fā)生時(shí)所有未提交的事務(wù),重做所有已提交的事務(wù)。具體的說(shuō),需要查找該事務(wù)對(duì)應(yīng)的所有更新日志記錄,并根據(jù)記錄內(nèi)容將數(shù)據(jù)庫(kù)中的相應(yīng)數(shù)據(jù)項(xiàng)恢復(fù)到更新前的值。第五節(jié)數(shù)據(jù)庫(kù)恢復(fù)存儲(chǔ)設(shè)備故障恢復(fù)當(dāng)存儲(chǔ)設(shè)備發(fā)生故障時(shí),數(shù)據(jù)庫(kù)中的部分或全部數(shù)據(jù)丟失,同時(shí)日志文件也丟失了。這時(shí)需要借助于數(shù)據(jù)轉(zhuǎn)儲(chǔ)技術(shù)的后備副本進(jìn)行數(shù)據(jù)庫(kù)恢復(fù),具體是先裝入最近一次轉(zhuǎn)儲(chǔ)的副本,如果是動(dòng)態(tài)轉(zhuǎn)儲(chǔ),還要同時(shí)裝入轉(zhuǎn)儲(chǔ)過(guò)程中記錄的日志文件,將數(shù)據(jù)庫(kù)恢復(fù)到離故障發(fā)生時(shí)刻最近的一致性狀態(tài)上。然后,根據(jù)轉(zhuǎn)儲(chǔ)時(shí)刻起到故障發(fā)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2016秋浙教版九年級(jí)科學(xué)上冊(cè)教學(xué)設(shè)計(jì):第四章第1節(jié) 食物與營(yíng)養(yǎng)
- Unit 3 Going outdoors Lesson 4(教學(xué)設(shè)計(jì))-2024-2025學(xué)年北師大版(三起)(2024)英語(yǔ)三年級(jí)下冊(cè)
- 《第三單元 班級(jí)智能養(yǎng)護(hù)系統(tǒng) 第3課 激光切割做模型》教學(xué)設(shè)計(jì)教學(xué)反思-2023-2024學(xué)年初中信息技術(shù)青島版2024第二冊(cè)
- 2024年高中語(yǔ)文 第11課 師說(shuō)教學(xué)設(shè)計(jì)5 新人教版必修3
- 《月夜憶舍弟》(教學(xué)設(shè)計(jì))-2024-2025學(xué)年九年級(jí)語(yǔ)文上冊(cè)素質(zhì)教育精講課堂(統(tǒng)編版)
- Chapter2 Our pet friends (教學(xué)設(shè)計(jì))-2024-2025學(xué)年新思維小學(xué)英語(yǔ)1B
- Unit7 Seeing a film(教學(xué)設(shè)計(jì))-2024-2025學(xué)年滬教牛津版(深圳用)英語(yǔ)六年級(jí)上冊(cè)
- 2024秋九年級(jí)語(yǔ)文上冊(cè) 第四單元 16孤獨(dú)之旅教學(xué)設(shè)計(jì) 新人教版
- 2024-2025學(xué)年高中生物 第四章 基因的表達(dá) 第2節(jié) 基因?qū)π誀畹目刂平虒W(xué)設(shè)計(jì)2 新人教版必修2
- Unit 8 第3課時(shí) Section B (1a-1e)2024-2025學(xué)年八年級(jí)英語(yǔ)上冊(cè)同步教學(xué)設(shè)計(jì)(人教版)河北專(zhuān)版
- 英語(yǔ)四級(jí)仔細(xì)閱讀講解及技巧
- 城市地理學(xué)-第八章城市空間分布體系
- 3,5-二甲基吡唑生產(chǎn)工藝規(guī)程
- 拆除工程安全的應(yīng)急預(yù)案工程應(yīng)急預(yù)案
- 貴州省促進(jìn)養(yǎng)老托育服務(wù)高質(zhì)量發(fā)展實(shí)施方案
- 托利多電子秤校秤步驟
- 四線(xiàn)制方向電路
- 食堂干貨類(lèi)食材臨時(shí)采購(gòu)需求書(shū)
- 注射模具設(shè)計(jì)說(shuō)明書(shū)
- 《DVT深靜脈血栓》
評(píng)論
0/150
提交評(píng)論