《數(shù)據(jù)庫原理及應(yīng)用2》課件第9章_第1頁
《數(shù)據(jù)庫原理及應(yīng)用2》課件第9章_第2頁
《數(shù)據(jù)庫原理及應(yīng)用2》課件第9章_第3頁
《數(shù)據(jù)庫原理及應(yīng)用2》課件第9章_第4頁
《數(shù)據(jù)庫原理及應(yīng)用2》課件第9章_第5頁
已閱讀5頁,還剩117頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第9章數(shù)據(jù)庫管理9.1數(shù)據(jù)庫管理概述9.2數(shù)據(jù)庫恢復(fù)技術(shù)9.3并發(fā)控制9.4安全性9.5完整性9.6本章小結(jié)

9.1數(shù)據(jù)庫管理概述

數(shù)據(jù)庫管理(DatabaseAdministration)是有關(guān)建立、存儲(chǔ)、修改和存取數(shù)據(jù)庫中信息的技術(shù),是指為保證數(shù)據(jù)庫系統(tǒng)的正常運(yùn)行和服務(wù)質(zhì)量,有關(guān)人員須進(jìn)行的技術(shù)管理工作。負(fù)責(zé)這些技術(shù)管理工作的個(gè)人或集體稱為數(shù)據(jù)庫管理員(DBA)。數(shù)據(jù)庫管理的主要內(nèi)容有:數(shù)據(jù)庫的建立、數(shù)據(jù)庫的調(diào)整、數(shù)據(jù)庫的重組、數(shù)據(jù)庫的重構(gòu)、數(shù)據(jù)庫的安全控制、數(shù)據(jù)庫的完整性控制和對(duì)用戶提供技術(shù)支持。

9.2數(shù)據(jù)庫恢復(fù)技術(shù)

1.事務(wù)(Transaction)的概念

1)事務(wù)的基本概念

事務(wù)是用戶定義的一個(gè)操作序列,這些操作要么全做,要么全不做,是一個(gè)不可分割的工作單位。數(shù)據(jù)庫事務(wù)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。設(shè)想網(wǎng)上購物的一次交易,其付款過程至少包括以下幾步數(shù)據(jù)庫操作:

(1)更新客戶所購商品的庫存信息;

(2)保存客戶付款信息,可能包括與銀行系統(tǒng)的交互;

(3)生成訂單并且保存到數(shù)據(jù)庫中;

(4)更新用戶相關(guān)信息,例如購物數(shù)量等等。數(shù)據(jù)庫事務(wù)正是用來保證這種情況下交易的平穩(wěn)性和可預(yù)測性的技術(shù)。下面再看一個(gè)例子:某公司銀行轉(zhuǎn)賬,事務(wù)T從A賬戶過戶到B賬戶100元。

Read(A);

A:=A-100;

Write(A);

Read(B);

B:=B+100;

Write(B);

Read(X):從數(shù)據(jù)庫傳遞數(shù)據(jù)項(xiàng)X到事務(wù)的工作區(qū)中。

Write(X):從事務(wù)的工作區(qū)中將數(shù)據(jù)項(xiàng)X寫回?cái)?shù)據(jù)庫。

按照事務(wù)的定義,這兩個(gè)操作要么都執(zhí)行成功,要么都不執(zhí)行。

2)?SQL中事務(wù)的定義

在SQL語言中,定義事務(wù)的語句有以下三條:

BeginTransaction

Commit

Rollback

事務(wù)通常是以BeginTransaction開始,以Commit或Rollback結(jié)束。例如:定義一個(gè)簡單的事務(wù)。

2.事務(wù)的特性

1)原子性

事務(wù)必須是原子工作單元,對(duì)于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行。通常,與某個(gè)事務(wù)關(guān)聯(lián)的操作具有共同的目標(biāo),并且是相互依賴的。如果系統(tǒng)只執(zhí)行這些操作的一個(gè)子集,則可能會(huì)破壞事務(wù)的總體目標(biāo)。原子性消除了系統(tǒng)處理操作子集的可能性。

2)一致性

事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。因此當(dāng)數(shù)據(jù)庫只包含成功事務(wù)提交的結(jié)果時(shí),就說數(shù)據(jù)庫處于一致性狀態(tài)。如果數(shù)據(jù)庫系統(tǒng)運(yùn)行中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,系統(tǒng)將事務(wù)中對(duì)數(shù)據(jù)庫的所有已完成的操作全部撤消,滾回到事務(wù)開始時(shí)的一致狀態(tài)。

3)隔離性

一個(gè)事務(wù)的執(zhí)行不能被其他事務(wù)干擾。例如,對(duì)任何一對(duì)事務(wù)T1和T2,在T1看來,T2要么在T1開始之前已經(jīng)結(jié)束,要么在T1完成之后再開始執(zhí)行。即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能互相干擾。

4)持續(xù)性

持續(xù)性也稱永久性(Permanence)。一個(gè)事務(wù)一旦提交之后,不管DBMS發(fā)生什么故障,該事務(wù)對(duì)數(shù)據(jù)庫的所有更新操作都會(huì)永遠(yuǎn)保留在數(shù)據(jù)庫中,不會(huì)丟失。9.2.1數(shù)據(jù)庫恢復(fù)基本概念

1.事務(wù)故障(TaskCrash)

事務(wù)故障有些是預(yù)期性的,可通過事務(wù)程序本身發(fā)現(xiàn),并讓事務(wù)回滾,撤消錯(cuò)誤的修改,恢復(fù)數(shù)據(jù)庫到正確狀態(tài)。但更多的故障是非預(yù)期的,如輸入數(shù)據(jù)的錯(cuò)誤、運(yùn)算溢出、違反了某些完整性限制、某些應(yīng)用程序的錯(cuò)誤以及并行事務(wù)發(fā)生死鎖等,使事務(wù)未運(yùn)行至正常終點(diǎn)就夭折了,這類故障稱事務(wù)故障。

2.系統(tǒng)故障(軟故障,SoftCrash)

系統(tǒng)在運(yùn)行過程中,由于某種原因,如操作系統(tǒng)或DBMS代碼錯(cuò)誤、操作員操作失誤、特定類型的硬件錯(cuò)誤(如CPU故障)、突然停電等造成系統(tǒng)停止運(yùn)行,致使所有正在運(yùn)行的事務(wù)都以非正常方式終止。這時(shí)內(nèi)存中數(shù)據(jù)庫緩沖區(qū)的信息全部丟失,但存儲(chǔ)在外部存儲(chǔ)設(shè)備上的數(shù)據(jù)未受影響,此類型為系統(tǒng)故障。

3.介質(zhì)故障(硬故障,HardCrash)

硬故障指外存故障,如磁盤損壞、磁頭碰撞或操作系統(tǒng)的某種潛在錯(cuò)誤,瞬時(shí)強(qiáng)磁場干擾等,使存儲(chǔ)在外存中的數(shù)據(jù)部分丟失或全部丟失。這類故障比前兩類故障的可能性小得多,但破壞性最大。發(fā)生介質(zhì)故障后,這時(shí)需要裝入數(shù)據(jù)庫發(fā)生介質(zhì)故障前某個(gè)時(shí)刻的數(shù)據(jù)副本,并重做自此時(shí)始的所有成功事務(wù),將這些事務(wù)已提交的結(jié)果重新記入數(shù)據(jù)庫。

4.計(jì)算機(jī)病毒

計(jì)算機(jī)病毒已成為計(jì)算機(jī)系統(tǒng)的主要威脅,自然也是數(shù)據(jù)庫系統(tǒng)的主要威脅。為此,計(jì)算機(jī)安全工作者已研制了許多預(yù)防病毒的“疫苗”,檢查、診斷、消滅計(jì)算機(jī)病毒的軟件也在不斷發(fā)展,但至今還沒有一種使得計(jì)算機(jī)“終生”免疫的疫苗,因此數(shù)據(jù)庫一旦被破壞仍要用恢復(fù)技術(shù)把數(shù)據(jù)庫加以恢復(fù)。9.2.2恢復(fù)實(shí)現(xiàn)技術(shù)

1.?dāng)?shù)據(jù)轉(zhuǎn)儲(chǔ)

轉(zhuǎn)儲(chǔ)是數(shù)據(jù)庫恢復(fù)中采用的基本技術(shù),即數(shù)據(jù)庫管理員(DBA)定期地將整個(gè)數(shù)據(jù)庫復(fù)制到磁帶或另一個(gè)磁盤上保存起來的過程。這些備用的數(shù)據(jù)文本稱為后備副本或后援副本。當(dāng)數(shù)據(jù)庫遭到破壞后就可以利用后備副本把數(shù)據(jù)庫恢復(fù)。這時(shí),數(shù)據(jù)庫只能恢復(fù)到轉(zhuǎn)儲(chǔ)時(shí)的狀態(tài),從那以后的所有更新事務(wù)必須重新運(yùn)行才能恢復(fù)到故障時(shí)的狀態(tài)。如圖9-1所示。圖9-1轉(zhuǎn)儲(chǔ)和恢復(fù)

2.登記日志文件

日志文件是用來記錄對(duì)數(shù)據(jù)庫每一次更新活動(dòng)的文件。圖9-2利用日志文件恢復(fù)9.2.3恢復(fù)策略

1.事務(wù)級(jí)故障恢復(fù)

事務(wù)故障是指事務(wù)在運(yùn)行至正常終止點(diǎn)前被中止,這時(shí)恢復(fù)子系統(tǒng)應(yīng)利用日志文件撤銷(Undo)此事務(wù)已對(duì)數(shù)據(jù)庫進(jìn)行的修改。事務(wù)故障的恢復(fù)是由系統(tǒng)自動(dòng)完成的,對(duì)用戶是透明的。小型故障屬于事務(wù)內(nèi)部故障,恢復(fù)方法是利用事務(wù)的Undo操作,將事務(wù)在非正常終止時(shí)利用Undo恢復(fù)到事務(wù)起點(diǎn)。

2.系統(tǒng)級(jí)故障恢復(fù)

系統(tǒng)故障造成數(shù)據(jù)庫不一致狀態(tài)的原因有兩個(gè),一是未完成事務(wù)對(duì)數(shù)據(jù)庫的更新可能已寫入數(shù)據(jù)庫,二是已提交事務(wù)對(duì)數(shù)據(jù)庫的更新可能還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫。因此恢復(fù)操作就是要撤消故障發(fā)生時(shí)未完成的事務(wù),重做已完成的事務(wù)。

3.介質(zhì)級(jí)故障恢復(fù)

發(fā)生介質(zhì)故障后,磁盤上的物理數(shù)據(jù)和日志文件被破壞,這是最嚴(yán)重的一種故障,恢復(fù)方法是重裝數(shù)據(jù)庫,然后重做已完成的事務(wù)。9.2.4數(shù)據(jù)庫鏡像

1.概述

數(shù)據(jù)庫鏡像是SQLServer2005用于提高數(shù)據(jù)庫可用性的新技術(shù)。數(shù)據(jù)庫鏡像將事務(wù)日志記錄直接從一臺(tái)服務(wù)器傳輸?shù)搅硪慌_(tái)服務(wù)器,并且能夠在出現(xiàn)故障時(shí)快速轉(zhuǎn)移到備用服務(wù)器??梢跃帉懣蛻舳顺绦蜃詣?dòng)重定向連接信息,這樣一旦出現(xiàn)故障轉(zhuǎn)移就可以自動(dòng)連接到備用服務(wù)器和數(shù)據(jù)庫。

2.?dāng)?shù)據(jù)庫鏡像介紹

在數(shù)據(jù)庫鏡像中,一臺(tái)SQLServer2005實(shí)例連續(xù)不斷的將數(shù)據(jù)庫事務(wù)日志發(fā)送到另一臺(tái)備用SQLServer2005實(shí)例的數(shù)據(jù)庫副本中。發(fā)送方的數(shù)據(jù)庫和服務(wù)器擔(dān)當(dāng)主角色,而接收方的數(shù)據(jù)庫和服務(wù)器擔(dān)當(dāng)鏡像角色。主服務(wù)器和鏡像服務(wù)器必須是獨(dú)立的SQLServer2005實(shí)例。9.2.5SQLServer數(shù)據(jù)恢復(fù)技術(shù)

SQLServer利用事務(wù)日志、設(shè)置檢查點(diǎn)、磁盤鏡像等機(jī)制進(jìn)行故障恢復(fù)。設(shè)有一個(gè)事務(wù)T,要在某數(shù)據(jù)庫中插入3行數(shù)據(jù)A、B、C,則:

第1步:BeginTransaction

第2步:InsertA

第3步:InsertB

第4步:Checkpoint

第5步:InsertC

第6步:Commit

9.3并發(fā)控制

9.3.1并發(fā)控制概述

事務(wù)是并發(fā)控制的基本單位,保證事務(wù)ACID的特性是事務(wù)處理的重要任務(wù),而并發(fā)操作有可能會(huì)破壞其ACID特性。

1.丟失數(shù)據(jù)修改

當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問題。每個(gè)事務(wù)都不知道其他事務(wù)的存在,最后的更新將重寫由其他事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)丟失,如表9-2所示。

2.讀“臟”數(shù)據(jù)(臟讀)

讀“臟”數(shù)據(jù)是指事務(wù)T1修改某一數(shù)據(jù),并將其寫回磁盤,事務(wù)T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤消,而此時(shí)T1把已修改過的數(shù)據(jù)又恢復(fù)原值,T2讀到的數(shù)據(jù)與數(shù)據(jù)庫的數(shù)據(jù)不一致,則T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)。如表9-3所示,T1將B值修改為400,T2讀到B為400,而T1由于某種原因撤銷,其修改作廢,B恢復(fù)原值200,這時(shí)T2讀到的B為400,與數(shù)據(jù)庫內(nèi)容不一致,就是“臟”數(shù)據(jù)。

3.不可重復(fù)讀

指事務(wù)T1讀取數(shù)據(jù)后,事務(wù)T2執(zhí)行更新操作,使T1無法讀取前一次結(jié)果。9.3.2封鎖協(xié)議

1.封鎖

所謂封鎖是指事務(wù)T在對(duì)某個(gè)數(shù)據(jù)對(duì)象如表、記錄等操作之前,先向系統(tǒng)發(fā)出請(qǐng)求,對(duì)其加鎖。加鎖后T對(duì)數(shù)據(jù)對(duì)象有一定的控制(具體的控制由封鎖類型決定),在事務(wù)T釋放前,其他事務(wù)不能更新此數(shù)據(jù)對(duì)象。

2.封鎖協(xié)議

所謂封鎖協(xié)議就是在數(shù)據(jù)對(duì)象加鎖、持鎖和放鎖時(shí)所約定的一些規(guī)則。不同的封鎖規(guī)則形成了不同的封鎖協(xié)議,下面分別介紹三級(jí)封鎖協(xié)議。

(1)一級(jí)封鎖協(xié)議

事務(wù)T在修改數(shù)據(jù)A之前必須先對(duì)其加X鎖,直到事務(wù)結(jié)束(即通過Commit和Rollback結(jié)束)才釋放。

作用:防止丟失修改,保證事務(wù)T可恢復(fù)。如圖9-3所示。圖9-3使用一級(jí)封鎖協(xié)議防止丟失更新問題

(2)二級(jí)封鎖協(xié)議

二級(jí)封鎖協(xié)議規(guī)定事務(wù)T在更新數(shù)據(jù)對(duì)象以前必須對(duì)數(shù)據(jù)對(duì)象加X鎖,且直到事務(wù)T結(jié)束時(shí)才可以釋放該鎖。另外,還規(guī)定事務(wù)T在讀取數(shù)據(jù)對(duì)象以前必須先對(duì)其加S鎖,讀完后即可釋放S鎖。

作用:防止丟失修改及讀“臟”數(shù)據(jù)。如圖9-4所示。圖9-4使用二級(jí)封鎖協(xié)議防止丟失修改及讀“臟”數(shù)據(jù)

(3)三級(jí)封鎖協(xié)議

三級(jí)封鎖協(xié)議規(guī)定事務(wù)T在更新數(shù)據(jù)對(duì)象以前,必須對(duì)數(shù)據(jù)對(duì)象加X鎖,且直到事務(wù)T結(jié)束時(shí)才可以釋放該鎖。另外,還規(guī)定事務(wù)T在讀取數(shù)據(jù)對(duì)象以前必須先對(duì)其加S鎖,該S鎖也必須在事務(wù)T結(jié)束時(shí)才可釋放。

作用:防止丟失修改,防止讀“臟”數(shù)據(jù)以及防止不可重復(fù)讀。如圖9-5所示。圖9-5使用三級(jí)封鎖協(xié)議防止丟失修改、防止讀“臟”數(shù)據(jù)以及防止不可重復(fù)讀三個(gè)級(jí)別的封鎖協(xié)議的主要區(qū)別在于何種操作需要申請(qǐng)封鎖,以及何時(shí)釋放鎖(即持鎖時(shí)間)。三個(gè)級(jí)別的封鎖協(xié)議可以總結(jié)為表9-6所示。

3.活鎖和死鎖

1)活鎖

當(dāng)某個(gè)事務(wù)請(qǐng)求對(duì)某一數(shù)據(jù)的排他性封鎖時(shí),由于其他事務(wù)對(duì)該數(shù)據(jù)的操作而使這個(gè)事務(wù)處于永久等待狀態(tài),這種狀態(tài)稱為活鎖。

2)死鎖

在同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事務(wù)中,其中的每一個(gè)在它能夠執(zhí)行之前,都等待著某個(gè)數(shù)據(jù),而這個(gè)數(shù)據(jù)已被它們中的某個(gè)事務(wù)所封鎖,這種狀態(tài)稱為死鎖。目前在數(shù)據(jù)庫中解決死鎖問題主要有兩類方法:一類方法是采取一定措施來預(yù)防死鎖的發(fā)生:另一類方法是允許發(fā)生死鎖,采用一定手段定期診斷系統(tǒng)中有無死鎖,若有則解除之。

(1)死鎖的預(yù)防。

①一次封鎖法。

②順序封鎖法。

(2)死鎖的診斷與解除。

①超時(shí)法。

②等待圖法。9.3.3并發(fā)調(diào)度的可串行性

計(jì)算機(jī)系統(tǒng)對(duì)并發(fā)事務(wù)中并發(fā)操作的調(diào)度是隨機(jī)的,而不同的調(diào)度可能會(huì)產(chǎn)生不同的結(jié)果,那么哪個(gè)結(jié)果是正確的,哪個(gè)結(jié)果是不正確的呢?

如果一個(gè)事務(wù)運(yùn)行過程中沒有其他事務(wù)同時(shí)運(yùn)行,也就是說它沒有受到其他事務(wù)的干擾,那么就可以認(rèn)為該事務(wù)的運(yùn)行結(jié)果是正常的或者預(yù)想的。因此將所有事務(wù)串行起來的調(diào)度策略一定是正確的調(diào)度策略。雖然以不同的順序串行執(zhí)行事務(wù)可能會(huì)產(chǎn)生不同的結(jié)果,但由于不會(huì)將數(shù)據(jù)庫置于不一致狀態(tài),所以都是正確的。并發(fā)調(diào)度的可串行性是指多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與按某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同。我們稱這種調(diào)度策略為可串行化(Serializable)的調(diào)度。

可串行性(Serializability)是并發(fā)事務(wù)正確性的準(zhǔn)則。按這個(gè)準(zhǔn)則規(guī)定,一個(gè)給定的并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認(rèn)為是正確調(diào)度。下面給出串行執(zhí)行、并發(fā)執(zhí)行(不正確)以及并發(fā)執(zhí)行可以串行化(正確)的例子。

以銀行轉(zhuǎn)賬為例,事務(wù)T1從賬號(hào)A(初值為200元)轉(zhuǎn)100元到賬號(hào)B(初值為200元),事務(wù)T2從賬號(hào)A轉(zhuǎn)10%的款項(xiàng)到賬號(hào)B,T1和T2具體執(zhí)行過程如下。9.3.4兩段鎖協(xié)議

所謂兩段鎖協(xié)議是指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖。

(1)在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫操作之前,首先要申請(qǐng)并獲得對(duì)該數(shù)據(jù)的封鎖。

(2)在釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)和獲得任何其他封鎖。例如事務(wù)T1遵守兩段鎖協(xié)議,其封鎖序列如圖9-6所示。圖9-6事務(wù)T1封鎖序列9.3.5SQLServer的并發(fā)控制

上面介紹了并發(fā)控制的一般原則與方法,下面簡單介紹SQLServer數(shù)據(jù)庫系統(tǒng)中的并發(fā)控制機(jī)制。

SQLServer提供了一套安全保護(hù)機(jī)制,具有高的安全性、完整性以及并發(fā)控制和故障恢復(fù)的數(shù)據(jù)控制能力。SQLServer支持廣泛的并發(fā)控制機(jī)制,通過制定下列各項(xiàng),用戶可以指定并發(fā)控制類型:

(1)用于連接的事務(wù)隔離級(jí)別。

(2)游標(biāo)上的并發(fā)選項(xiàng)。

9.4安全性

9.4.1安全性概述

數(shù)據(jù)庫是一個(gè)共享的資源,其中存放了組織、企業(yè)和個(gè)人的各種信息,有的是比較一般的、可以公開的數(shù)據(jù),而有的可能是非常關(guān)鍵的或機(jī)密的數(shù)據(jù),例如國家軍事秘密、銀行儲(chǔ)蓄數(shù)據(jù)、證券投資信息、個(gè)人Internet賬戶信息等。如果對(duì)數(shù)據(jù)庫控制不嚴(yán),就有可能使重要的數(shù)據(jù)被泄露出去,甚至?xí)艿讲环ǚ肿拥钠茐?。因此,必須?yán)格控制用戶對(duì)數(shù)據(jù)庫的使用,這是由數(shù)據(jù)庫的安全性控制來完成的。9.4.2安全性控制

1.用戶標(biāo)識(shí)與鑒別

用戶標(biāo)識(shí)與鑒別是系統(tǒng)提供的最外層安全保護(hù)措施。其方法是由系統(tǒng)提供一定的方式讓用戶標(biāo)識(shí)自己的名字和身份。每次用戶要求進(jìn)入系統(tǒng)時(shí),由系統(tǒng)進(jìn)行核對(duì),通過鑒定后才提供機(jī)器使用權(quán)。對(duì)于獲得上機(jī)權(quán)的用戶若要使用數(shù)據(jù)庫時(shí),DBMS還要進(jìn)行用戶標(biāo)識(shí)和鑒別。用戶標(biāo)識(shí)和鑒別的方法有很多種,而且在一個(gè)系統(tǒng)中一般是許多方法并存,以獲得更強(qiáng)的安全性。用戶標(biāo)識(shí)和鑒別的方法很多,常用的方法有:

(1)身份認(rèn)證。

(2)密碼認(rèn)證。

(3)隨機(jī)數(shù)運(yùn)算認(rèn)證。

2.存取控制

作為共享資源的數(shù)據(jù)庫有很多用戶,其中有些人有權(quán)更新數(shù)據(jù)庫的數(shù)據(jù),有些人卻只能查詢數(shù)據(jù),有些人僅有權(quán)操作數(shù)據(jù)中的某幾個(gè)表或視圖,而有些人卻可以操作數(shù)據(jù)庫中的全部數(shù)據(jù)。

(1)?DBMS的存取控制機(jī)制。DBMS的存取控制包括3個(gè)方面的內(nèi)容:

①DBMS規(guī)定,用戶想要操作數(shù)據(jù)庫中的數(shù)據(jù),必須擁有相應(yīng)的權(quán)限。

②?DBMS將授權(quán)結(jié)果存放于數(shù)據(jù)字典。

③當(dāng)用戶提出操作請(qǐng)求時(shí),DBMS會(huì)根據(jù)數(shù)據(jù)字典中保存的授權(quán)信息,判斷用戶是否有權(quán)對(duì)相應(yīng)的對(duì)象進(jìn)行操作,若無權(quán)則拒絕執(zhí)行操作。

(2)?DBMS的存取控制方法。DBMS的存取控制主要分為自主存取控制(DiscretionaryAccessControl,DAC),強(qiáng)制存取控制(MandatoryAccessControl,MAC)和基于角色的存取控制(RoleBasedAccessControl,RBAC)。

①自主存取控制

②強(qiáng)制存取控制

③基于角色存取控制

3.?dāng)?shù)據(jù)庫審計(jì)

審計(jì)功能就是把用戶對(duì)數(shù)據(jù)庫的所有操作自動(dòng)記錄下來放入審計(jì)日志(AuditLog)中,一旦發(fā)生數(shù)據(jù)被非法存取,DBA可以利用審計(jì)跟蹤的信息,重現(xiàn)導(dǎo)致數(shù)據(jù)庫現(xiàn)有狀況的一系列事件,找出非法存取數(shù)據(jù)的人、時(shí)間和內(nèi)容等。

4.視圖機(jī)制

進(jìn)行存取權(quán)限控制時(shí)我們可以為不同的用戶定義不同的視圖,把數(shù)據(jù)對(duì)象限制在一定的范圍內(nèi),也就是說,通過視圖機(jī)制把要保密的數(shù)據(jù)對(duì)無權(quán)存取的用戶隱藏起來,從而自動(dòng)地對(duì)數(shù)據(jù)提供一定程度的安全保護(hù)。

5.?dāng)?shù)據(jù)加密

對(duì)于高度敏感性數(shù)據(jù),例如財(cái)務(wù)數(shù)據(jù)、軍事數(shù)據(jù)、國家機(jī)密,除以上安全性措施外,還可以采用數(shù)據(jù)加密技術(shù)。數(shù)據(jù)加密是防止數(shù)據(jù)庫中數(shù)據(jù)在存儲(chǔ)和傳輸中失密的有效手段。加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)(術(shù)語為明文,Plaintext)變換為不可直接識(shí)別的格式(術(shù)語為密文,Ciphertext),從而使得不知道解密算法的人無法獲知數(shù)據(jù)的內(nèi)容。9.4.3統(tǒng)計(jì)數(shù)據(jù)庫安全性

一般地,統(tǒng)計(jì)數(shù)據(jù)庫允許用戶查詢聚集類型的信息(例如合計(jì)、平均值等),但是不允許查詢單個(gè)記錄信息。例如,查詢“工程師的平均工資是多少?”是合法的,但是查詢“工程師王兵的工資是多少?”就不允許。9.4.4SQLServer的安全性管理

SQLServer為一個(gè)網(wǎng)絡(luò)數(shù)據(jù)庫管理系統(tǒng),具有完備的安全機(jī)制,能夠確保數(shù)據(jù)庫中的信息不被非法盜用或破壞。SQLServer的安全機(jī)制可分為以下3個(gè)等級(jí):

(1)?SQLServer的登錄安全性。

(2)數(shù)據(jù)庫的訪問安全性。

(3)數(shù)據(jù)庫對(duì)象的使用安全性。

這三個(gè)等級(jí)如同三道閘門,有效地抵御任何非法侵入,保衛(wèi)著數(shù)據(jù)庫中數(shù)據(jù)的安全。

1.SQLServer的身份驗(yàn)證模式

用戶想操作SQLServer中某一數(shù)據(jù)庫中的數(shù)據(jù),必須滿足以下3個(gè)條件:

(1)首先,登錄SQLServer服務(wù)器時(shí)必須通過身份驗(yàn)證;

(2)其次,必須是該數(shù)據(jù)庫的用戶或者是某一數(shù)據(jù)庫角色的成員;

(3)最后,必須有執(zhí)行該操作的權(quán)限。

從上面三個(gè)條件可以看出SQLServer數(shù)據(jù)庫的安全性檢查是通過登錄名、用戶、權(quán)限來完成的。

1)?Windows身份驗(yàn)證模式

當(dāng)用戶通過WindowsNT/2000用戶賬戶進(jìn)行連接時(shí),SQLServer通過回叫WindowsNT/2000以獲得信息,重新驗(yàn)證賬戶名和密碼,并在Syslogins表中查找該賬戶,以確定該賬戶是否有權(quán)限登錄。在這種方式下,用戶不必提供密碼或登錄名讓SQLServer驗(yàn)證。

2)混合驗(yàn)證模式

混合模式使用戶能夠通過Windows身份驗(yàn)證或SQLServer身份驗(yàn)證與SQLServer實(shí)例連接。

在SQLServer驗(yàn)證模式下,SQLServer在Syslogins表中檢測輸入的登錄名和密碼。如果在Syslogins表中存在該登錄名,并且密碼也是匹配的,那么該登錄名可以登錄到SQLServer。否則,登錄失敗。在這種方式下,用戶必須提供登錄名和密碼,讓SQLServer驗(yàn)證。

3)設(shè)置驗(yàn)證模式

可以使用SQLServer企業(yè)管理器來設(shè)置或改變驗(yàn)證模式。圖9-7SQLServer屬性對(duì)話框

圖9-8安全性選項(xiàng)卡

2.登錄管理

1)系統(tǒng)安裝時(shí)創(chuàng)建的登錄賬戶

SQLServer安裝好之后,系統(tǒng)會(huì)自動(dòng)產(chǎn)生兩個(gè)登錄賬戶。

(1)本地管理員組:默認(rèn)屬于sysadmin角色中的成員,因此具有管理員權(quán)限。

(2)系統(tǒng)管理員:默認(rèn)情況下,它指派給固定服務(wù)器角色sysadmin,并不能進(jìn)行更改。

2)添加Windows登錄

在WindowsNT/2000的用戶或組可以訪問數(shù)據(jù)庫之前,必須給其授予連接到SQLServer實(shí)例的權(quán)限。

(1)使用企業(yè)管理器添加Windows登錄賬戶。

(2)使用系統(tǒng)存儲(chǔ)過程sp_grantlogin添加Windows登錄。

3)添加SQLServer登錄

如果用戶沒有Windows賬號(hào),SQLServer配置為在混合模式下運(yùn)行,或SQLServer實(shí)例正在WindowsXP上運(yùn)行,則可以創(chuàng)建SQLServer登錄賬戶。

(1)使用企業(yè)管理器添加SQLServer登錄賬戶。

(2)用系統(tǒng)存儲(chǔ)過程sp_addlogion添加SQLServer登錄。圖9-9添加Windows登錄對(duì)話框圖9-10添加SQLServer登錄對(duì)話框

3.?dāng)?shù)據(jù)庫用戶管理

1)默認(rèn)數(shù)據(jù)庫用戶

(1)數(shù)據(jù)庫所有者(DatabaseOwner,DBO)。

(2)Guest用戶。

2)創(chuàng)建數(shù)據(jù)庫用戶

使用企業(yè)管理器添加數(shù)據(jù)庫用戶。圖9-11數(shù)據(jù)庫用戶屬性對(duì)話框

4.角色管理

1)固定服務(wù)器角色

固定服務(wù)器角色描述如表9-9所示。

圖9-12服務(wù)器角色對(duì)話框圖9-13服務(wù)器角色屬性對(duì)話框

2)固定數(shù)據(jù)庫角色

固定數(shù)據(jù)庫角色描述如表9-10所示。圖9-14數(shù)據(jù)庫角色對(duì)話框圖9-15數(shù)據(jù)庫角色屬性對(duì)話框

3)自定義數(shù)據(jù)庫角色

當(dāng)一組用戶需要在SQLServer中執(zhí)行一組指定的活動(dòng)時(shí),為了方便管理,可以創(chuàng)建數(shù)據(jù)庫角色。用戶自定義數(shù)據(jù)庫角色有兩種:標(biāo)準(zhǔn)角色和應(yīng)用程序角色。

(1)使用企業(yè)管理器創(chuàng)建用戶自定義數(shù)據(jù)庫角色。

(2)應(yīng)用程序角色。圖9-16數(shù)據(jù)庫角色屬性對(duì)話框

5.權(quán)限管理

1)權(quán)限類型

(1)對(duì)象權(quán)限。

①查詢(Select)。

②插入(Insert)。

③更新(Update)。

④刪除(Delete)。

⑤執(zhí)行(Execute)。

前四個(gè)權(quán)限用于表和視圖,執(zhí)行只用于存儲(chǔ)過程。

(2)語句權(quán)限。

①?BackupDatabase。

②?BackupLog。

③?CreateDatabase。

④?Default。

⑤?CreateFunction。

⑥?CreateProcedure。

⑦?CreateRule。

⑧?CreateTable。

⑨?CreateView。

(3)暗示性權(quán)限。暗示性權(quán)限是指系統(tǒng)預(yù)定義角色的成員或數(shù)據(jù)庫對(duì)象所有者擁有的權(quán)限。例如,sysadmin固定服務(wù)器角色成員自動(dòng)繼承在SQLServer安裝中進(jìn)行操作或查看的全部權(quán)限。數(shù)據(jù)庫對(duì)象所有者有暗示性權(quán)限,可以對(duì)所擁有的對(duì)象執(zhí)行一切活動(dòng)。

2)權(quán)限管理操作

一個(gè)用戶或角色的權(quán)限可以有三種存在的形式:授予(Granted)是賦予用戶某權(quán)限;拒絕(Denied)是禁止用戶的某權(quán)限;廢除(Revoked)是撤銷以前授予或拒絕的權(quán)限。

(1)使用企業(yè)管理器管理權(quán)限。

(2)用Transact_SQL語句管理權(quán)限。

9.5完整性

9.5.1完整性約束條件

為維護(hù)數(shù)據(jù)庫的完整性,DBMS必須提供一種機(jī)制來檢查數(shù)據(jù)庫中的數(shù)據(jù),看其是否滿足語義規(guī)定的條件。這些加在數(shù)據(jù)庫數(shù)據(jù)之上的語義約束條件稱為數(shù)據(jù)庫完整性約束條件,也稱為完整性規(guī)則。

1.靜態(tài)列級(jí)約束

靜態(tài)列級(jí)約束是對(duì)一個(gè)列的取值域的說明,這是最常用也最容易實(shí)現(xiàn)的一類完整性約束,包括以下幾個(gè)方面:

(1)對(duì)數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長度、單位和精度等。

(2)對(duì)數(shù)據(jù)格式的約束。

(3)對(duì)取值范圍的約束。

(4)對(duì)空值的約束。

2.靜態(tài)元組約束

一個(gè)元組是由若干個(gè)列值組成的,靜態(tài)元組約束就是規(guī)定元組的各個(gè)列之間的約束關(guān)系。例如課程表中包含課程號(hào)、課程名稱等列,規(guī)定一個(gè)課程號(hào)對(duì)應(yīng)一個(gè)課程名;又如教師基本信息表中包含職稱、工資等列,規(guī)定講師的工資不低于2000元。

3.靜態(tài)關(guān)系約束

在一個(gè)關(guān)系的各個(gè)元組之間或者若干關(guān)系之間常常存在各種聯(lián)系或約束。常見的靜態(tài)關(guān)系約束有:

(1)實(shí)體完整性約束:

(2)參照完整性約束:

(3)函數(shù)依賴約束:

(4)統(tǒng)計(jì)約束,規(guī)定某個(gè)屬性值與一個(gè)關(guān)系多個(gè)元組的統(tǒng)計(jì)值之間必須滿足某種約束條件。

4.動(dòng)態(tài)列級(jí)約束

動(dòng)態(tài)列級(jí)約束是修改列定義或列值時(shí)應(yīng)滿足的約束條件,包括下面兩方面:

(1)修改列定義時(shí)的約束。

(2)修改列值時(shí)的約束。

5.動(dòng)態(tài)元組約束

動(dòng)態(tài)元組約束是指修改元組的值時(shí)元組中各個(gè)字段間需要滿足某種約束條件。例如教師工資調(diào)整時(shí)新工資不得低于原工資?+?工齡*2等。

6.動(dòng)態(tài)關(guān)系約束

動(dòng)態(tài)關(guān)系約束是加在關(guān)系變化前后狀態(tài)上的限制條件,例如事務(wù)一致性、原子性等約束條件。

以上六類完整性約束條件的含義可用表9-11完整性約束條件進(jìn)行概括。9.5.2完整性控制

DBMS的完整性控制機(jī)制應(yīng)具有三個(gè)方面的功能:

(1)定義功能,提供定義完整性約束條件的機(jī)制。

(2)檢查功能,檢查用戶發(fā)出的操作請(qǐng)求是否違背了完整性約束條件。

(3)如果發(fā)現(xiàn)用戶的操作請(qǐng)求使數(shù)據(jù)違背了完整性約束條件,則采取一定的動(dòng)作來保證數(shù)據(jù)的完整性。

1.外鍵的空值問題

在實(shí)現(xiàn)參照完整性時(shí),系統(tǒng)除了應(yīng)該提供定義外鍵的機(jī)制,還應(yīng)提供定義外鍵列是否允許空值的機(jī)制。在“成績表”中,“學(xué)號(hào)”是其外鍵,要求“學(xué)號(hào)”不允許為空,因此“成績表”的外鍵不允許為空。

2.在參照關(guān)系中刪除元組的問題

當(dāng)刪除被參照關(guān)系的某個(gè)元組時(shí),如果參照關(guān)系中有若干個(gè)元組的外鍵值與被參照關(guān)系刪除元組的主鍵值相同,則可以采用級(jí)聯(lián)刪除、受限刪除和置空刪除3種策略。

3.在參照關(guān)系中插入元組時(shí)的問題

例如向“成績表”中插入(學(xué)號(hào),課程號(hào),成績)的值為(2013009,20005,82)元組,而“學(xué)生表”中尚沒有學(xué)號(hào)=2013009的學(xué)生,一般地,當(dāng)參照關(guān)系插入某個(gè)元組,而被參照關(guān)系不存在相應(yīng)的元組,其主碼值與參照關(guān)系插入元組的外碼值相同,這時(shí)可有以下策略:

1)受限插入

2)遞歸插入

4.修改關(guān)系中主鍵值的問題

在有些關(guān)系數(shù)據(jù)庫系統(tǒng)中,主鍵是不允許修改的,如果要修改主鍵值,只能先刪除要修改主鍵的元組,然后再插入具有新主鍵值的元組。

有些關(guān)系數(shù)據(jù)庫系統(tǒng)是允許修改主鍵的。對(duì)于修改被參照關(guān)系主鍵的操作,系統(tǒng)也可采用下列3種策略之一。

1)級(jí)聯(lián)方式(Cascades)

2)受限方式(Restricted)

3)置空方式(SetNull)

9.5.3SQLServer的完整性策略

1.默認(rèn)約束

默認(rèn)約束使用戶能夠定義一個(gè)值,每當(dāng)用戶沒有在某一列中輸入值時(shí),則將所定義的值提供給這一列。例如,在“學(xué)生表”中的“備注”這一列中,可以讓數(shù)據(jù)庫服務(wù)器在用戶沒有輸入時(shí)填上某個(gè)值,例如“群眾”或者隨意指定的其他值。默認(rèn)約束可以在CreateTable時(shí)使用Default選項(xiàng)建立,例如建立一個(gè)學(xué)生表,設(shè)置“備注”的默認(rèn)值為群眾。

2.主鍵約束

主鍵約束確保在特定的列中不會(huì)輸入重復(fù)的值,并且在這些列中也不允許輸入NULL值??梢允褂弥麈I約束強(qiáng)制唯一性和引用完整性。例如上面的例子給“學(xué)號(hào)”建立主鍵約束,可以使用PrimaryKey指定。

3.唯一約束

對(duì)于一個(gè)表中非主鍵列的指定列,唯一約束確保不會(huì)輸入重復(fù)的值。但是,唯一約束允許存在空值。創(chuàng)建唯一約束來確保不參與主鍵的特定列的值不重復(fù)。盡管唯一約束和主鍵都強(qiáng)制唯一性,但在下列情況下,應(yīng)該為表附加唯一約束以取代主鍵約束:

(1)如果要對(duì)列或列的組合強(qiáng)制唯一性,可以為表附加多個(gè)唯一約束,但只能附加一個(gè)主鍵約束。

(2)如果要對(duì)允許空值的列強(qiáng)制唯一性,可以為允許空值的列附加唯一約束,但只能將主鍵約束附加到不允許空值的列。當(dāng)將唯一約束附加到允許空值的列時(shí),確保在約束列中最多有一行含有空值。例如,在“學(xué)生表”中給“聯(lián)系方式”建立唯一約束,可以使用Unique指定。

4.Check約束

Check約束指定可由表中一列或多列接受的數(shù)據(jù)值或格式。可以為一個(gè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論