數(shù)據(jù)庫安全技術及應用.ppt_第1頁
數(shù)據(jù)庫安全技術及應用.ppt_第2頁
數(shù)據(jù)庫安全技術及應用.ppt_第3頁
數(shù)據(jù)庫安全技術及應用.ppt_第4頁
數(shù)據(jù)庫安全技術及應用.ppt_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章 數(shù)據(jù)庫安全技術,目 錄,本章要點及教學目標,本章要點 數(shù)據(jù)庫的安全性、權限及監(jiān)控方法 數(shù)據(jù)完整性控制 并發(fā)控制與封鎖技術 數(shù)據(jù)備份與恢復 數(shù)據(jù)庫安全解決方案 教學目標 理解數(shù)據(jù)庫的安全性、權限及監(jiān)控方法 了解數(shù)據(jù)完整性控制、并發(fā)控制與封鎖技術 掌握數(shù)據(jù)備份與恢復 理解數(shù)據(jù)庫安全解決方案,重點,6.1 數(shù)據(jù)庫的安全性,6.1.1數(shù)據(jù)庫安全性問題 1數(shù)據(jù)庫安全性的概念 數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù),以防止非法使用所造成的數(shù)據(jù)泄漏、更改或破壞。數(shù)據(jù)庫管理系統(tǒng)安全性保護是通過各種防范措施以防止用戶越權使用數(shù)據(jù)庫。數(shù)據(jù)庫系統(tǒng)中一般采用用戶標識和鑒別、存取控制、視圖以及密碼存儲等技術進行安全控制。數(shù)據(jù)庫安全的核心和關鍵是其數(shù)據(jù)安全。 數(shù)據(jù)安全是指防止數(shù)據(jù)信息被故意的或偶然的非授權泄露、更改、破壞或使數(shù)據(jù)信息被非法的系統(tǒng)辨識與控制。以確保數(shù)據(jù)的完整性、保密性、可用性和可控性。由于數(shù)據(jù)庫保存著大量的重要信息和機密數(shù)據(jù),而且在數(shù)據(jù)庫系統(tǒng)中大量數(shù)據(jù)集中存放,為許多用戶共享,因此,加強對數(shù)據(jù)庫訪問的控制和數(shù)據(jù)安全防護至關重要。,主要指標之一,6.1 數(shù)據(jù)庫的安全性,數(shù)據(jù)庫安全分為系統(tǒng)安全性和數(shù)據(jù)安全性. 系統(tǒng)安全性是指在系統(tǒng)級控制數(shù)據(jù)庫的存取和使用的機制,包含: (1) 有效的用戶名/口令的組合; (2) 對用戶可連接數(shù)據(jù)庫授權; (3) 用戶對象可用的磁盤空間的數(shù)量; (4) 用戶的資源限制; (5) 數(shù)據(jù)庫審計有效性; (6) 用戶可執(zhí)行的系統(tǒng)操作。 數(shù)據(jù)安全性是在對象級控制數(shù)據(jù)庫的存取和使用的機制,包括用戶可存取指定的模式對象及在對象上允許具體操作類型。 【案例6-1】某銀行以數(shù)據(jù)安全業(yè)務價值鏈,可將數(shù)據(jù)庫安全的技術手段分為預防保護類、檢測跟蹤類和響應恢復類等3大類,如圖6-1所示:,圖6-1 數(shù)據(jù)庫安全關鍵技術,6.1 數(shù)據(jù)庫的安全性,2SQL Server的安全性 SQL Server系統(tǒng)負責管理大量的業(yè)務數(shù)據(jù),保證其業(yè)務數(shù)據(jù)的安全是數(shù)據(jù)庫管理員DBA的一項最重要任務。SQL erver系統(tǒng)提供了強大的安全機制來保證數(shù)據(jù)的安全。安全性包括3個方面:管理規(guī)章制度方面的安全性、數(shù)據(jù)庫服務器物理方面的安全性和數(shù)據(jù)庫服務器邏輯方面的安全性。在此主要討論數(shù)據(jù)庫服務器邏輯方面的安全性,身份驗證模式是SQL Server系統(tǒng)驗證客戶端和服務器之間連接的方式。SQL系統(tǒng)提供了兩種身份驗證模式:Windows身份驗證模式和混合模式。 3. SQL Server的安全機制 SQL Server具有權限層次安全機制。SQL Server 2005的安全性管理可分為3個等級:操作系統(tǒng)級、SQL Server級和數(shù)據(jù)庫級。,6.1 數(shù)據(jù)庫的安全性,(1)操作系統(tǒng)級的安全性 用戶使用客戶機通過網(wǎng)絡實現(xiàn)SQL Server服務器訪問時,首先要獲得操作系統(tǒng)的使用權。SQL可直接訪問網(wǎng)絡端口,對Windows安全體系以外的服務器及其數(shù)據(jù)庫的訪問。由于SQL采用了集成Windows網(wǎng)絡安全性機制,所使得OS安全性提高。 (2)SQL Server級的安全性 SQL Server 的服務器級安全性建立在控制服務器登錄帳號和口令基礎上。采用標準SQL Server登錄和集成Windows NT登錄兩種方式。用戶在登錄時提供的登錄帳號和口令,決定了用戶能否獲得SQL Server的訪問權和在獲得訪問權后擁有的具體權限。 (3)數(shù)據(jù)庫級的安全性 用戶通過SQL Server服務器的安全性檢驗后,直接面對第三次安全性檢驗。在建立用戶的登錄帳號信息時,提示用戶選擇默認的數(shù)據(jù)庫。在默認的情況下只有數(shù)據(jù)庫的擁有者才可訪問該數(shù)據(jù)庫的對象,并分配訪問權限給別的用戶,以便讓別的用戶也擁有該數(shù)據(jù)庫的訪問權利,在SQL Server中并不是所有的權利都可轉(zhuǎn)讓分配。,6.1 數(shù)據(jù)庫的安全性,6.1.2 數(shù)據(jù)庫權限管理 1. 權限管理概念 權限是執(zhí)行操作及訪問數(shù)據(jù)的通行證。主體和安全對象之間通過權限相關聯(lián),主體可請求系統(tǒng)資源的用戶、組和進程。SQL管理者可以通過權限保護分層實體(安全對象)集合。 權限用于控制用戶對數(shù)據(jù)庫對象的訪問,指定用戶對數(shù)據(jù)庫可執(zhí)行的操作,用戶可以設置服務器和數(shù)據(jù)庫的權限。主要包括 3種權限:服務器權限(DBA)、數(shù)據(jù)庫對象權限和數(shù)據(jù)庫權限。 (1) 服務器權限 服務器權限允許DBA執(zhí)行任務。權限定義在固定服務器角色中.這些角色可分配給登錄用戶,但這些角色是不能修改。一般只將服務器權限授給DBA,而不需修改或者授權給別的用戶登錄. (2) 數(shù)據(jù)庫對象權限 數(shù)據(jù)庫對象是授予用戶以允許他們訪問數(shù)據(jù)庫中對象的一類權限,對象權限對于使用SQL語句訪問表或視圖是必須的。,數(shù)據(jù)庫權限用于控制對象訪問和語句執(zhí)行,6.1 數(shù)據(jù)庫的安全性,【案例6-2】在SQL Server Management Studio(簡稱SSMS)中給用戶添加對象權限。依次單擊“對象資源管理器”窗口中樹型節(jié)點前“”號,直到展開目標數(shù)據(jù)庫“用戶”節(jié)點.在“用戶”節(jié)點下的目標用戶上右鍵,彈出快捷菜單,選擇“屬性(R)”命令。,圖6-2 利用對象資源管理器為用戶添加對象權限,6.1 數(shù)據(jù)庫的安全性,(3) 數(shù)據(jù)庫權限 對象權限使用戶能夠訪問存在于數(shù)據(jù)庫中的對象,除了數(shù)據(jù)庫對象權限外,還可給用戶分配數(shù)據(jù)庫權限。它除了授權用戶可以創(chuàng)建數(shù)據(jù)庫對象和進行數(shù)據(jù)庫備份外,還增加一些更改數(shù)據(jù)庫對象的權限。一個用戶可直接分配到權限也可作為一個角色中的成員間接得到權限.【案例6-3】通過下面方式給用戶添加數(shù)據(jù)庫權限。 在“對象資源管理器”窗口中,單擊服務器前的“+”號,展開服務器節(jié)點。單擊“數(shù)據(jù)庫”前的“+”號,展開數(shù)據(jù)庫節(jié)點。在要給用戶添加數(shù)據(jù)庫權限的目標數(shù)據(jù)庫上單擊鼠標右鍵,彈出快捷菜單,如圖6-3所示,從中選擇“屬性(R)”命令。,圖6-3利用對象資源管理器為用戶添加DB權限,6.1 數(shù)據(jù)庫的安全性,2. SQL的安全模式與驗證 (1)SQL的安全模式 SQL Server采用兩層安全模式:第一層是訪問SQL ,驗證連接人的有效賬號(稱為登錄)。第二層訪問數(shù)據(jù)庫。SQL支持多個數(shù)據(jù)庫,每個數(shù)據(jù)庫都有各自的安全層,通過用戶賬號提供對數(shù)據(jù)庫的訪問。在各數(shù)據(jù)庫中建立用戶時,可根據(jù)需要限制對數(shù)據(jù)庫的訪問。 (2)登錄身份驗證模式及設置 用戶連接到SQL賬戶稱為登錄:用戶為特定數(shù)據(jù)庫定義時才可創(chuàng)建。SQL為每一用戶分配了唯一的用戶名和密碼??蔀椴煌~號授予不同的安全級別。訪問SQL登錄有兩種驗證模式:Windows身份驗證和混合模式身份驗證(登錄名和密碼)。SQL Server 與Windows 二者登錄安全過程結合起來提供安全登錄服務。網(wǎng)絡安全性通過向Windows 提供復雜加密過程進行驗證。用戶登錄一經(jīng)過驗證,訪問SQL Server不再需要其他身份驗證。,6.1 數(shù)據(jù)庫的安全性,【案例6-4】在SSMS中設置身份驗證模式的方法。 1)打開SSMS并連接到目標服務器,在“資源管理器”窗口中,在目標服務器上單擊鼠標右鍵,彈出快捷菜單,從中選擇“屬性”命令,如圖6-4所示. 2)出現(xiàn)“服務器屬性”窗口,選擇“選擇頁”中的“安全性”選項,進入安全性設置頁面,如圖6-5所示。,圖6-4利用對象資源管理器設置身份驗證模式 圖6-5服務器屬性窗口的安全性頁面,6.1 數(shù)據(jù)庫的安全性,3)在“服務器身份驗證”選項級中選擇驗證模式前的單選按鈕,選中需要的驗證模式。用戶還可以在“登錄審核”選項級中設置需要的審核方式,如圖6-6所示。,圖6-6 服務器屬性,審核方式取決于安全性要求,4種審核級別為: “無”:不使用登錄審核. “僅限失敗的登錄”:記錄所有的失敗登錄。 “僅限成功的登錄”:記錄所有的成功登錄。 “失敗和成功的登錄”:記錄所有的登錄。 最后單擊“確定”按鈕,完成登錄驗證模式的設置,6.1 數(shù)據(jù)庫的安全性,3. 權限的管理 在SQL中,不同對象有不同的權限。權限管理的內(nèi)容包括:權限的類型、授予權限、收回權限、否認權限等幾個方面。 (1) 權限的種類 權限的種類,可按照預先定義分為:預先定義的權限和預先未定義的權限。按照針對的對象也可分為:針對所有對象的權限和針對特殊對象的權限。常按權限等級分為3種:系統(tǒng)權限(隱含權限)、對象權限和語句權限。 1)系統(tǒng)權限(隱含權限)。是服務器級別上對整個服務器和數(shù)據(jù)庫進行管理的權限。服務器角色sysadmin具有全部系統(tǒng)權限。數(shù)據(jù)庫對象所有者和服務器固定角色均具有這種權限,可對所擁有的對象執(zhí)行一切活動。如擁有表的用戶可查看、添加或刪除數(shù)據(jù),更改表定義,或控制允許其他用戶對表操作的權限。,6.1 數(shù)據(jù)庫的安全性,2)對象權限。用于控制一個用戶與一個數(shù)據(jù)庫對象交互操作,有5個不同的權限:查詢、插入、修改、刪除和執(zhí)行。 不同的安全對象具有不同的權限,對各對象主要操作包括:,表6-1 對象類型和操作權限,6.1 數(shù)據(jù)庫的安全性,3)語句權限。授予用戶執(zhí)行相應的語句命令的能力,可以決定用戶能否操作和創(chuàng)建數(shù)據(jù)庫對象,語句權限(如 CREATE DATABASE)適用于語句自身,而不適用于數(shù)據(jù)庫中定義的特定對象。其語句權限主要包括: 表6-2語句權限的執(zhí)行操作,6.1 數(shù)據(jù)庫的安全性,(2) 授予權限 在SQL系統(tǒng)中,可使用GRANT語句將安全對象的權限授予給指定的安全主體。這些可使用GRANT語句授權的安全對象包括應用程序角色、程序集、非對稱密鑰、證書、約定、數(shù)據(jù)庫、端點、全文目錄、函數(shù)、消息類型、對象、隊列、角色、路由、架構、服務器、服務、存儲過程、對稱密鑰、系統(tǒng)對象、表、類型、用戶、視圖、XML架構集合等。GRANT語句的語法如下: GRANT ALL | permission ( column ,.n ) ,.n ON securable TO principal ,.n WITH GRANT OPTION 其中各參數(shù)的含義為: 1)ALL:該選項并不授予全部可能的權限。 2)permission:權限的名稱。 3)column:指定表中將授予其權限的列名稱。需使用括號“()”。 4)securable:指定將授予其權限的安全對象。 5)TO principal:主體的名稱。 6)GRANT OPTION:指示被授權者在獲得指定權限的同時還可將其權限授予其他主體。,6.1 數(shù)據(jù)庫的安全性,(3) 收回權限 利用REVOKE語句,可從某個安全主體處收回(也稱撤銷)權限.它與GRANT語句相對應,可將通過它授予給安全主體的權限收回(刪除),使用REVOKE語句也可收回對特定數(shù)據(jù)庫對象的權限。 收回權限是指不再賦予此權限,但并非禁止。因為用戶可能從角色中繼承了該項權限。REVOKE語句語法格式為: REVOKE GRANT OPTION FOR ALL |permission ( column ,.n ) ,.n ON securable TO | FROM principal ,.n CASCADE 其中各參數(shù)的含義為: 1)GRANT OPTION FOR:將撤銷授予指定權限的能力. 2)CASCADE:指示當前正在撤銷的權限也將從其他被該主體授權的主體中撤銷。 其余參數(shù)的含義與GRANT語句中的各參數(shù)含義相同。,6.1 數(shù)據(jù)庫的安全性,(4) 拒絕(否認)權限 安全主體可以通過兩種方式獲得權限:直接使用GRANT語句為其授予權限,通過作為角色成員繼承角色的權限。使用REVOKE語句只能刪除安全主體,通過方式得到的權限,要徹底刪除安全主體的指定權限必須使用DENY語句。DENY語法形式與REVOKE非常類似。 使用DENY語句可以拒絕(否認)對特定數(shù)據(jù)庫對象的權限,防止主體通過其組或角色成員身份繼承權限。語法格式如下: DENY ALL | permission ( column ,.n ) ,.n ON securable TO principal ,.n CASCADE 其中:參數(shù)CASCADE指示拒絕授予指定主體該權限,同時,拒絕該主體將該權限授予其他主體。其余參數(shù)的含義與Grant語句中的各參數(shù)含義相同。,6.1 數(shù)據(jù)庫的安全性,4. 管理權限的設置 設置權限下面兩種方法各有利弊,前者操作簡單而直觀,但不能設置表或視圖的列權限;用T-SQL語句操作功能齊較繁瑣。 (1) 使用SSMS(SQL Server Management Studio)設置權限 在“數(shù)據(jù)庫屬性”窗口,選擇“選擇頁”窗口中的“權限”項,可以進入“權限設置”頁面。 (2) 使用T-SQL語句設置權限 T-SQL語句中的權限設置有下面3種: 1)GRANT語句:允許權限。 2)REVOKE:禁止權限。 3)DENY:取消允許設置。 GRANT語句的權限設置語法格式為: GRANT ALL | statement ,.n TO security_account ,.n REVOKE ALL | statement ,.n FROM security_account ,.n DENY ALL | statement ,.n TO security_account ,.n ,6.1 數(shù)據(jù)庫的安全性,6.1.3 安全監(jiān)控方法 1.登錄名管理 登錄名管理包括創(chuàng)建登錄名、設置密碼策略、查看登錄名信息、修改和刪除登錄名。登錄名管理的方法主要有兩種。 (1) 創(chuàng)建登錄名 創(chuàng)建基于Windows登錄名,創(chuàng)建SQL Server登錄名,查看登錄名信息 【案例6-5】登錄屬于服務器級的安全策略,通過合法的登錄才能連接到數(shù)據(jù)庫。SQL系統(tǒng)登錄驗證過程如圖6-7 所示.在SSMS中創(chuàng)建登錄的步驟如下。,1)打開SSMS并連接到目標服務器,在“對象資源管理器” 窗口中, 單擊“安全性”前的“”號 .在“登錄名”上單擊鼠標右鍵,彈出快捷菜單, 從中選擇“新建登錄”命令,如圖6-8所示。,圖6-8 利用對象資源管理器創(chuàng)建登錄,圖6-7 SQL Server系統(tǒng)登錄驗證過程,6.1 數(shù)據(jù)庫的安全性,2)出現(xiàn)“登錄名”對話框,單擊需要創(chuàng)建的登錄模式前的單選按鈕,選定驗證方式。如圖6-9所示,并完成“登錄名”、“密碼”、“確認密碼”和其他參數(shù)設置。,圖6-9 登錄名對話框,3)選擇“選擇頁”中的“服務器角色”項,出現(xiàn)服務器角色設定頁面,用戶可為此用戶添加服務器角色。 4)選擇“登錄名”對話框中的“用戶映射”項,進入映射設置頁面,為新建的登錄添加映射到此登錄名的用戶,并添加數(shù)據(jù)庫角色,從而使該用戶獲得數(shù)據(jù)庫的相應角色對應的數(shù)據(jù)庫權限。最后單擊“確定”按鈕,完成登錄名創(chuàng)建。 (2)修改和刪除登錄名 DBA應定期檢查訪問的用戶.,6.1 數(shù)據(jù)庫的安全性,2.監(jiān)控錯誤日志 用戶應經(jīng)常查看SQL Server錯誤日志。在查看時,應注意在正常情況下不應出現(xiàn)的錯誤消息。錯誤日志的內(nèi)容不僅包括出錯的消息,也包括大量關于事件狀態(tài)、版權信息等各類消息。要求學會在繁雜的錯誤信息中找到關鍵的出錯信息。當瀏覽錯誤日志時,要特別注意以下的關鍵字:錯誤、故障、表崩潰、16級錯誤和嚴重錯誤等。 查看日志2種方法:利用SSMS查看日志;利用文本編輯器查看日志。 3.記錄配置信息 當無法啟動 SQL Server時借助服務器的配置信息,微軟公司技術支持部門可以幫助恢復. 服務器的運行。在日常的維護計劃中應該安排對配置信息的維護,特別是當配置信息修改時。使用系統(tǒng)過程sp_configure 可以生成服務器的配置信息列表。 (1)打開SSMS。 (2)選擇服務器,單擊“連接”按鈕,進入SSMS窗口。 (3)打開一個新的查詢窗口,可以輸入各種SQL命令。 (4)在查詢窗口中輸入命令。,6.1 數(shù)據(jù)庫的安全性,6.1.4 用戶與角色管理 用戶是數(shù)據(jù)庫級的安全策略,在為數(shù)據(jù)庫創(chuàng)建新的用戶前,必須存在創(chuàng)建用戶的一個登錄或使用已經(jīng)存在的登錄創(chuàng)建用戶. 1. 使用SSMS創(chuàng)建用戶 【案例6-6】使用 SSMS創(chuàng)建用戶的具體步驟如下。 (1)打開SSMS并連接到目標服務器,在“對象資源管理器”窗口中,單擊“數(shù)據(jù)庫”節(jié)點前的“”號,展開數(shù)據(jù)庫節(jié)點。單擊要創(chuàng)建用戶的目標數(shù)據(jù)節(jié)點前的“”號, 展節(jié)點Northwind。單擊“安全性” 節(jié)點前的“”號。 在“用戶”上單擊鼠標右鍵,彈出 快捷菜單,從中選擇“新建用戶” 命令,如圖6-10所示。,圖6-10 利用對象資源管理器創(chuàng)建用戶,6.1 數(shù)據(jù)庫的安全性,(2)在出現(xiàn)“數(shù)據(jù)庫用戶新建”對話框的“常規(guī)”頁面中,填寫“用戶名”,選擇“登錄名”和“默認架構”名稱。添加此用戶擁有的架構和數(shù)據(jù)庫角色。 (3)在“數(shù)據(jù)庫用戶新建”對話框的“選擇頁”中選擇“安全對象”,進入權限設置頁面(即“安全對象”頁面). “安全對象頁面”主要用于設置數(shù)據(jù)庫用戶擁有的能夠訪問的數(shù)據(jù)庫對象以及相應的訪問權限。單擊“添加”按鈕為該用戶添加數(shù)據(jù)庫對象,并為添加的對象添加顯示權限。 2角色管理 角色用來簡化將很多權限分配給用戶這一復雜任務的管理。用戶可根據(jù)所執(zhí)行的任務成為一個或多個角色的成員。用戶可不必是任何角色的成員,也可為用戶分配個人權限。,6.1 數(shù)據(jù)庫的安全性,1)在“對象資源管理器”中,單擊服務器前“+”號展開.單擊“安全性”節(jié)點前“+”號.在次節(jié)點可看到固定服務器角色,在要給用戶添加的目標角色上單擊鼠標右鍵,彈出快捷菜單從中選擇“屬性”. 2)在“服務器角色屬性”對話框中,單擊“添加(A)”按鈕.3)在出現(xiàn)“選擇登陸名”對話框中單擊“瀏覽(B)”按鈕。 4)在出現(xiàn)“查找對象”對話框中,選擇目標用戶前的復選框,選中其用戶,最后單擊“確定”按鈕. 5)回到“選擇登陸名”對話框,可以看到選中的目標用戶已包含在對話框中,確定無誤后,單擊“確定”. 6)回到“服務器角色屬性”對話框。確定添加的用戶無誤后,單擊“確定” 。,圖6-11 利用對象資源管理器為用戶分配固定服務器角色,(1) 固定服務器角色 SQL安裝時就創(chuàng)建了在服務器級別上應用大量預定義的角色,每個角色對應著相應的管理權限。通過給用戶分配固定服務器角色,可以使用戶具有執(zhí)行管理任務的角色權限。固定服務器角色的維護比單個權限容易,但是固定服務器角色不能修改。 【案例6-7】用SSMS為用戶分配固定服務器角色,從而使該用戶獲取相應的權限。,6.1 數(shù)據(jù)庫的安全性,(2) 數(shù)據(jù)庫角色 在創(chuàng)建每個數(shù)據(jù)庫時都添加這些角色到新創(chuàng)建的數(shù)據(jù)庫中,每個角色對應著相應的權限。這些數(shù)據(jù)庫角色用于授權給數(shù)據(jù)庫用戶,擁有某種或某些角色的用戶會獲得相應角色對應的權限。 可為數(shù)據(jù)庫添加角色,然后把角色分配給用戶,使用戶擁有相應的權限,在SSMS中,給用戶添加角色(或?qū)⒔巧跈嘤脩簦┎僮髋c將固定服務器角色授予用戶方法類似,通過相應角色的屬性對話框可方便添加用戶,使用戶成為角色成員。 用戶也可使用圖形界面工具Transact-SQL命令創(chuàng)建新角色,使之擁有某個或某些權限;創(chuàng)建的角色還可修改其對應的權限。各種方法都需完成以下3項任務:創(chuàng)建新的數(shù)據(jù)庫角色、給創(chuàng)建的角色分配權限、將角色授予某個用戶。 【案例6-8】在SSMS創(chuàng)建新的數(shù)據(jù)庫角色操作步驟如下。 展開要添加新角色的目標數(shù)據(jù)庫,單擊目標數(shù)據(jù)庫節(jié)點下的“安全性”節(jié)點前的“+”號,展開節(jié)點。然后在“角色”節(jié)點上單擊右鍵,彈出快捷菜單,選擇快捷菜單中的“新建”下“ 新建數(shù)據(jù)庫角色”命令,如圖6-12所示。,6.1 數(shù)據(jù)庫的安全性,出現(xiàn)“數(shù)據(jù)庫角色-新建”對話框,在“常規(guī)”頁面中,添加“角色名稱”和“所有者”,并選擇此角色所擁有的架構。在此對話框中也可以單擊“添加”按鈕為新創(chuàng)建的角色添加用戶。 選擇“選擇頁”中的“安全對象”項,進入權限設置頁面(即“安全對象”頁面),之后可以為新創(chuàng)建的角色添加所擁有的數(shù)據(jù)庫對象的訪問權限。 此外,還可以使用 T-SQL語句來實現(xiàn)同樣目標的相關內(nèi)容。,6-12新建數(shù)據(jù)庫角色,6.2 完整性控制,6.2 完整性控制 6.2.1 數(shù)據(jù)的完整性 數(shù)據(jù)完整性(Data Integrity)是指數(shù)據(jù)的精確性(Accuracy)和可靠性(Reliability)。用于防止數(shù)據(jù)庫中存在不符合語義規(guī)定的數(shù)據(jù),造成無效操作或錯誤。DBMS提供一種檢查數(shù)據(jù)庫中的數(shù)據(jù)是否滿足語義規(guī)定的條件的機制,數(shù)據(jù)語義檢查條件稱為數(shù)據(jù)完整性約束條件,作為表定義的一部分存儲在數(shù)據(jù)庫中。DBMS中檢查數(shù)據(jù)完整性條件的機制就稱為完整性檢查。 狹義上數(shù)據(jù)的完整性和安全性是數(shù)據(jù)庫保護的兩個不同的方面。安全性側(cè)重保護數(shù)據(jù)庫,以防止非法使用所造成數(shù)據(jù)的泄露、更改或破壞,其防范對象是非法用戶和非法操作;完整性是防止合法用戶使用數(shù)據(jù)庫時向其中加入不符合語義的數(shù)據(jù),防范對象側(cè)重不合語義的數(shù)據(jù)。但從宏觀角度,安全性和完整性密切相關,完整性也屬于安全性范疇。,6.2 完整性控制,6.2.2 完整性規(guī)則構成 由DBA或應用開發(fā)者所決定的一組預定義的完整性約束條件稱為規(guī)則。關系數(shù)據(jù)庫允許可用完整性約束和數(shù)據(jù)庫觸發(fā)器定義各種數(shù)據(jù)完整性規(guī)則。數(shù)據(jù)完整性規(guī)則主要由以下3部分構成: 觸發(fā)條件:規(guī)定系統(tǒng)何時使用規(guī)則檢查數(shù)據(jù); 約束條件:規(guī)定系統(tǒng)檢查用戶發(fā)出的操作請求違背了什么樣的完整性約束條件; 違約響應:規(guī)定系統(tǒng)如果發(fā)現(xiàn)用戶的操作請求違背了完整性約束條件,應該采取一定的動作來保證數(shù)據(jù)的完整性,即違約時要做的事情。 完整性規(guī)則從執(zhí)行時間上可分為立即執(zhí)行約束和延遲執(zhí)行約束.關系數(shù)據(jù)模型的完整性約束,是對表的列定義規(guī)則的說明性方法,其完整性約束條件包括3大類:實體完整性、參照完整性和用戶定義完整性.,6.2 完整性控制,6.2.3 完整性約束條件的分類 數(shù)據(jù)的完整性約束可分以下兩類: 1從約束條件使用的對象分 從約束條件使用的對象分為值約束和結構約束2種: (1)值約束:對數(shù)據(jù)類型、數(shù)據(jù)格式、取值范圍及空值等進行規(guī)定。 (2)結構約束:即對數(shù)據(jù)之間聯(lián)系的約束。 數(shù)據(jù)庫中同一關系的不同屬性間應滿足一定約束條件,同時不同關系的屬性間也有聯(lián)系也應滿足一定約束條件。常見的結構約束有4種: 1) 函數(shù)依賴約束。明確同一關系中不同屬性之間應滿足的約束條件。 2) 實體完整性約束。規(guī)定鍵的屬性列必須唯一,其值不能為空或部分為空, 3) 參照完整性約束。規(guī)定不同關系的屬性之間的約束條件. 4) 統(tǒng)計約束。 2從約束對象的狀態(tài)分 從約束對象的狀態(tài)分為靜態(tài)約束和動態(tài)約束2種。 (1)靜態(tài)約束.指對數(shù)據(jù)庫每一個確定狀態(tài)所應滿足的約束條件,是反映數(shù)據(jù)庫狀態(tài)合理性的約束,這是最重要的一類完整性約束。 (2)動態(tài)約束.指數(shù)據(jù)庫從一種狀態(tài)轉(zhuǎn)變?yōu)榱硪环N狀態(tài)時,新舊值之間所應滿足的約束條件,動態(tài)約束反映的是數(shù)據(jù)庫狀態(tài)變遷的約束。,6.2 完整性控制,6.2.4 數(shù)據(jù)完整性的實施 數(shù)據(jù)庫采用多種方法以保證數(shù)據(jù)完整性,包括外鍵、束約、規(guī)則和觸發(fā)器。 1實現(xiàn)數(shù)據(jù)完整性的方法 1)在服務器端。定義表時聲明數(shù)據(jù)完整性,在服務器端以觸發(fā)器來實現(xiàn)。 2)在客戶端。在應用程序中編寫代碼來保證。在客戶端實現(xiàn)數(shù)據(jù)完整性的好處是在將數(shù)據(jù)發(fā)送到服務器端之前,可以先進行判斷,然后,只將正確的數(shù)據(jù)發(fā)送給數(shù)據(jù)庫服務器。 2. 完整性約束條件的作用對象及實現(xiàn) 完整性約束條件的作用對象為: 字段(列)級約束:數(shù)據(jù)類型、格式、取值范圍、空值約束 行(元組)級約束:各字段之間聯(lián)系的約束.訂貨數(shù)量小于等于庫存數(shù)量. 表(關系)級約束:表約束是指若干行之間、表之間的聯(lián)系的約束.如零件ID的取值不能重復也不能取空值。 具體實現(xiàn)包括:主關鍵字約束、外關鍵字約束、唯一性約束、檢查約束、缺省約束.約束提供了自動保持數(shù)據(jù)完整性的一種方法,6.2 完整性控制,(1)主關鍵字約束 主關鍵字約束(Primary Key Constraint,簡稱主鍵約束)指定表的一列或幾列的組合的值在表中具有唯一性,每個表中只能有一列被指定為主關鍵字,且IMAGE 和TEXT 類型的字段都不能被指定為主關鍵字,也不允許指定主關鍵字列有NULL 屬性。主鍵約束可以確保實體完整性。可在創(chuàng)建表時定義主鍵約束,也可在以后改變表時添加。 定義主鍵約束時需指定約束名.如未指定SQL會自動為該約束分配一名字。如果將主鍵約束定義在一個已包含數(shù)據(jù)的列上,那么,該列中已存在的數(shù)據(jù)將被檢查. 如果發(fā)現(xiàn)任何重復的值,則主鍵約束將被拒絕。其語法如下: CONSTRAINT constraint_name PRIMARY KEY CLUSTERED | NONCLUSTERED (column_name1, column_name2,column_name16) 【案例6-9】創(chuàng)建訂單(Orders)表,訂單編號(cOrderNo)為主鍵. CREATE TABLE Orders ( cOrderNo CHAR(6) CONSTRAINTpkOrderNoPRIMARYKEYCLUSTERED, ) 也可用:ALTER TABLE Orders ADD CONSTRAINT pkOrderNo PRIMARY KEY CLUSTERED (cOrderNo),6.2 完整性控制,(2)外關鍵字約束 外關鍵字約束(Foreign Key Constraint,簡稱外鍵約束)定義了表之間的關系。當一個表中的數(shù)據(jù)依賴于另一個表中的數(shù)據(jù)時,你可以使用外鍵約束避免兩個表之間的不一致性。 當一個表中的一個列/多個列的組合和其它表中的主關鍵字定義相同時,就可以將這些列/列的組合定義為外關鍵字,并設定它適合哪個表中哪些列相關聯(lián)。還可以使用級聯(lián)更新和插入檢查方法。外鍵約束實施了引用完整性。與主關鍵字相同,不能使用一個定義為 TEXT 或IMAGE 數(shù)據(jù)類型的列創(chuàng)建外關鍵字。外關鍵字最多由16個列組成。 外關鍵字約束語法如下: CONSTRAINT constraint_name FOREIGN KEY (column_name1, column_name2,column_name16) REFERENCES ref_table (ref_column1,ref_column2, ref_column16) ON DELETE CASCADE | NO ACTION ON UPDATE CASCADE | NO ACTION NOT FOR REPLICATION ,6.2 完整性控制,(3)唯一性約束 唯一性約束(Unique Constraint)指定一個或多個列的組合的值具有唯一性,以防止在列中輸入重復的值。唯一性約束指定的列可有NULL屬性。 由于主關鍵字值具有唯一性,因此主關鍵字列不能再設定唯一性約束。唯一性約束最多由16個列組成。創(chuàng)建UNIQUE約束有關的規(guī)則為:可以創(chuàng)建在列級,也可以創(chuàng)建在表級。不允許一個表中有兩行取相同的非空值。一個表中可有多個UNIQUE約束。即使指定了WITH NOCHECK 選項,也不能阻止根據(jù)約束對現(xiàn)有數(shù)據(jù)進行的檢查.語法如下: CONSTRAINT constraint_name UNIQUE CLUSTERED | NONCLUSTERED (column_name1, column_name2,column_name16 ),6.2 完整性控制,(4)檢查約束 檢查約束(Check Constraint)通過限制插入列中的值來實施域完整性??稍谝涣猩隙x多個檢查約束.按定義次序?qū)嵤?。當約束被定義成表級時,單一的檢查約束可被應用到多列.語法如下: CONSTRAINT constraint_name CHECK NOT FOR REPLICATION(logical_expression) 1)IN關鍵字。用IN 關鍵字可以確保:鍵入的值被限制在一個常數(shù)表達式列表中。 2)LIKE關鍵字。使用LIKE關鍵字可通過通配符來確保輸入某一列的值符合一定的模式。 3)BETWEEN關鍵字??赏ㄟ^BETWEEN指明常數(shù)表達式的范圍。該范圍中包括上限值和下限值。如CHECK(siToyQoh BETWEEN 0 AND 100)。 (5)缺省約束 缺省約束(Default Constraint)可用于為某列指定一常數(shù)值,這樣用戶就不需要為該列插入值。只能在一列上創(chuàng)建一個缺省約束,且該列不能是IDENTITY列。 缺省約束通過定義列的默認值或使用數(shù)據(jù)庫的默認值對象綁定表的列,來指定列的默認值。SQL Server 推薦使用缺省約束,而不使用定義默認值的方式來指定列的默認值。,6.2 完整性控制,語法如下: CONSTRAINT constraint_name DEFAULT constant_expression FOR column_name 如果表已經(jīng)創(chuàng)建,而沒有指定缺省,則可用ALTER TABLE 命令來指定缺?。?ALTER TABLE Shopper ADD CONSTRAINT defCity DEFAULT “Chicago” FOR cCity (6)在企業(yè)管理器中創(chuàng)建約束 通過“屬性”對話框選擇操作, 如圖6-13所示。,圖6-13 在企業(yè)管理器中創(chuàng)建約束,6.2 完整性控制,(7)系統(tǒng)對約束的檢查 1)主鍵約束。每當用戶執(zhí)行插入數(shù)據(jù)時,系統(tǒng)檢查新插入的數(shù)據(jù)的主鍵值是否與已存在的主鍵值重復,或新插入的主鍵值是否為空. 2)唯一值約束。對唯一值約束的檢查同主鍵很類似只是在檢查有唯一值約束的列時,系統(tǒng)只需檢查新插入數(shù)據(jù)或者更改后的有唯一值約束的列的值是否與表中已有數(shù)據(jù)有重復,而不檢查是否有空值。只要新插人數(shù)據(jù)或更改后的值滿足不重復這個條件,才可進行操作。 【注意】對于有唯一值約束的列,可以有空值,但整個列只允許有一個空值。系統(tǒng)會將后續(xù)的空值看成與第一個空值重復的值,因此全拒絕操作。 3)外鍵約束。 4)檢查約束 5)缺省約束,6.2 完整性控制,6.2.5完整性規(guī)則實現(xiàn) 規(guī)則(Rule)是數(shù)據(jù)庫中對存儲在表的列或用戶自定義數(shù)據(jù)類型中的值的規(guī)定和限制。規(guī)則是單獨存儲的獨立的數(shù)據(jù)庫對象。規(guī)則與其作用的表或用戶自定義數(shù)據(jù)類型是相互獨立的。規(guī)則和約束可以同時使用,表的列可以有一個規(guī)則及多個檢查約束。 1. 創(chuàng)建規(guī)則 (1)用命令創(chuàng)建 語法為:CREATE RULE rule_name AS condition_expression 其中condition_expression 子句是規(guī)則的定義??捎糜赪HERE 條件子句中的任何表達式,可包含算術運算符、關系運算符和謂詞(IN、LIKE、BETWEEN 等)。 【注意】condition_expression 子句中的表達式必須以字符“”開頭。,表6-3 規(guī)則的示例,6.2 完整性控制,(2)用企業(yè)管理器創(chuàng)建規(guī)則 在企業(yè)管理器中選擇數(shù)據(jù)庫對象“規(guī)則”,單擊右鍵從快捷菜單中可選“新建規(guī)則”項。 (3)使用規(guī)則的限制 某一個時刻只有一條規(guī)則可綁定到某列或某用戶自定義數(shù)據(jù)類型。如果一條規(guī)則被綁定到某用戶自定義數(shù)據(jù)類型上,它并不會替代綁定到該數(shù)據(jù)類型的列上的規(guī)則。如果一條新的規(guī)則綁定到某列或某數(shù)據(jù)類型上,而該列或類型上已經(jīng)綁定了一條規(guī)則,那么,新規(guī)則將替代舊規(guī)則。,2. 查看規(guī)則 語法: sp_helptext objname = name 如:exec sp_helptext birthday_defa 查看birthday_defa規(guī)則, 也可用企業(yè)管理器查看規(guī)則如圖所示,圖6-14 用企業(yè)管理器查看規(guī)則,6.2 完整性控制,3. 規(guī)則的綁定與松綁 創(chuàng)建規(guī)則后,規(guī)則只是一個存在于數(shù)據(jù)庫中的對象,并未發(fā)生作用。將規(guī)則與數(shù)據(jù)庫表或用戶自定義對象聯(lián)系起來,才能達到創(chuàng)建規(guī)則的目的。解除規(guī)則與對象的綁定稱為“松綁”. (1)用存儲過程Sp_bindrule 綁定規(guī)則 語法:sp_bindrule rulename = rule, objname = object_name , futureonly 其中,參數(shù)為: rulename = rule:指定規(guī)則名稱。 objname = object_name:指定規(guī)則綁定的對象。 futureonly:此選項僅在綁定規(guī)則到用戶自定義數(shù)據(jù)類型上時才可以使用。當指定此選項時,僅以后使用此用戶自定義數(shù)據(jù)類型的列會應用新規(guī)則,而當前已經(jīng)使用此數(shù)據(jù)類型的列則不受影響。,第6 章 數(shù)據(jù)庫安全,【案例6-14】綁定規(guī)則rulMaxPrice到用戶自定義數(shù)據(jù)類型 MaxPrice上,帶futureonly選項。exec sp_bindrule rulMaxPrice, MaxPrice, futureonly 【注意】規(guī)則對已經(jīng)輸入表中的數(shù)據(jù)不起作用。 (2)用Sp_unbindrule解除規(guī)則的綁定 語法為:sp_unbindrule objname = object_name,futureonly 4. 刪除規(guī)則 語法為:DROP RULE rule_name ,.n 【注意】在刪除一個規(guī)則前,必須先將與其綁定的對象解除綁定。,6.2 完整性控制,6.2.6 默認值 默認值(Default)也稱缺省值,是往用戶輸入記錄時沒有指定具體數(shù)據(jù)的列中自動插入的數(shù)據(jù)。默認值對象與ALTER TABLE 或CREATE TABLE 命令操作表時用DEFAULT選項指定的默認值功能相似,但默認值對象可以用于多個列或用戶自定義數(shù)據(jù)類型,它的管理與應用同規(guī)則有許多相似之處。表的一列或一個用戶自定義數(shù)據(jù)類型也只能與一個默認值相綁定。 1. 創(chuàng)建默認值 用CREATE DEFAULT 命令創(chuàng)建默認值,用于在當前數(shù)據(jù)庫中創(chuàng)建默認值對象。其語法如下: CREATE DEFAULT default_name AS constant_expression 其中constant_expression 子句是默認值的定義,可以是數(shù)學表達式或函數(shù),也可以包含表的列名或其它數(shù)據(jù)庫對象。,6.2 完整性控制,【案例6-17】創(chuàng)建生日默認值birthday_defa。 CREATE DEFAULT birthday_defa AS 1978-1-1 2. 默認值的綁定與松綁 (1)用存儲過程Sp_bindefault 綁定默認值 ,語法如下: sp_bindefault defname = default, objname = object_name , futureonly (2)用存儲過程Sp_unbindefault解除默認值的綁定,語法: Sp_unbindefault objname = object_name ,futureonly 3. 刪除默認值 可以在企業(yè)管理器中選擇默認值,單擊右鍵,從快捷菜單中選擇“刪除”選項刪除默認值。也可使用DROP DEFAULT 命令刪除當前數(shù)據(jù)庫默認值。 其語法為:DROP DEFAULT default_name ,.n 【注意】在刪除一個默認值前須先將與其綁定的對象解除綁定,6.3 并發(fā)控制與封鎖,6.3.1 并發(fā)操作帶來的問題 為了充分利用數(shù)據(jù)資源,經(jīng)常進行并行存取,就會發(fā)生多用戶并發(fā)存取同一數(shù)據(jù)塊的情況,即數(shù)據(jù)庫的并行操作。數(shù)據(jù)庫并發(fā)控制是對多個用戶程序并行存取的控制機制,目的是避免數(shù)據(jù)的丟失修改、無效數(shù)據(jù)的讀出與不可重復讀數(shù)據(jù)現(xiàn)象的發(fā)生,從而保持數(shù)據(jù)的一致性。 6.3.2 事務 1事務 (1)事務的定義 數(shù)據(jù)庫的并發(fā)控制是以事務為基本單位進行的。事務是數(shù)據(jù)庫系統(tǒng)中執(zhí)行的一個工作單位,它是由用戶定義的一組操作序列。一個事務可以是一組SQL語句、一條SQL命令或整個程序,一個應用程序可以包括多個事務。 在SQL語言中,定義事務的語句有3條: BEGIN TRANSACTION COMMIT ROLLBACK,6.3 并發(fā)控制與封鎖,(2)事務的特征 事務是由有限的數(shù)據(jù)庫操作序列組成,但并不是任意的數(shù)據(jù)庫操作序列都能成為事務,為了保護數(shù)據(jù)的完整性,一般要求事務具有以下4個特征: 1) 原子性(Atomic)。各事務為不可分割的工作單位,執(zhí)行時應遵守“要么不做,要么全做”的原則,不允許事務部分完成。若意外故障而使事務未能完成,它執(zhí)行的部分結果應被取消。 2) 一致性(Consistency)。事務對數(shù)據(jù)庫的功能是從一個一致狀態(tài)轉(zhuǎn)變到另一個一致狀態(tài)。所謂數(shù)據(jù)庫的一致狀態(tài)是指數(shù)據(jù)庫中的數(shù)據(jù)滿足完整性約束。 3) 隔離性(Isolation)。如果多個事務并發(fā)地執(zhí)行,應像各事務獨立執(zhí)行一樣,各事務的執(zhí)行不能被其他事務干擾。并發(fā)控制可保證事務間的隔離性。 4) 持久性(Durability)。指一個事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是持久的,即使數(shù)據(jù)庫因故障而受到破壞,DBMS也應該能夠恢復。 上述4個性質(zhì)的英文術語的第一個字母為ACID。故稱4個性質(zhì)為事務的ACID準則。,6.3 并發(fā)控制與封鎖,2并發(fā)控制概述 事務是數(shù)據(jù)庫并發(fā)控制的基本單位。保證事務ACID特性是事務處理的重要任務,而并發(fā)操作有可能會破壞其ACID特性。DBMS并發(fā)控制機制有對并發(fā)操作進行正確調(diào)度,保證事務的隔離性更強,確保數(shù)據(jù)庫的一致性。 【案例6-18】以飛機訂票系統(tǒng)說明并發(fā)操作帶來的數(shù)據(jù)不一致的問題. 拿飛機訂票系統(tǒng)中的一個活動序列(同一時刻讀?。槔?分4步: 甲售票點(甲事務)讀取某航班的機票余額A,A=16; 乙售票點(乙事務)讀取同一航班機票余額A,A=16; 甲售票點賣出一張機票,修改A=A-1,即A=15,寫入數(shù)據(jù)庫; 乙售票點也賣出一張機票,修改A=A-1,即A=15,寫入數(shù)據(jù)庫. 結果:賣出兩張票,數(shù)據(jù)庫中機票余額只減少1。 造成數(shù)據(jù)庫的不一致性是由并發(fā)操作引起的。在此情況下,對甲、乙事務的操作序列是隨機的。若按上面的調(diào)度序列執(zhí)行,甲事務的修改被丟失,因為第4步中乙事務修改A并寫回后覆蓋了甲事務的修改。,6.3 并發(fā)控制與封鎖,如果沒有鎖定且多個用戶同時訪問一個數(shù)據(jù)庫,則當多個事務同時使用相同數(shù)據(jù)時可能會發(fā)生問題。并發(fā)操作帶來的數(shù)據(jù)不一致性包括: (1)丟失更新 當多個事務選擇同一行,然后基于最初選定的值更新該行時,會發(fā)生丟失更新問題。每個事務都不知道其它事務的存在。最后的更新將重寫由其它事務所做的更新,這將導致數(shù)據(jù)丟失。 (2)讀“臟”數(shù)據(jù)(臟讀) 讀“臟”數(shù)據(jù)是指事務T1修改某一數(shù)據(jù),并將其寫回磁盤,事務T2讀取同一數(shù)據(jù)后,T1由于某種原因被撤消,而此時T1把已修改過的數(shù)據(jù)又恢復原值,T2讀到的數(shù)據(jù)與數(shù)據(jù)庫的數(shù)據(jù)不一致,則T2讀到的數(shù)據(jù)就為“臟”數(shù)據(jù),即不正確的數(shù)據(jù)。 (3)不可重復讀 當事務T1讀取數(shù)據(jù)后,事務T2執(zhí)行更新操作,使T1無法讀取前一次結果。不可重復讀包括3種情況:事務T1讀取某一數(shù)據(jù)后,T2對其做了修改,當T1再次讀該數(shù)據(jù)后,得到與前一不同的值。,6.3 并發(fā)控制與封鎖,產(chǎn)生數(shù)據(jù)的不一致性的主要原因是并發(fā)操作破壞了事務的隔離性。其現(xiàn)象如表6-4所示。 表6-4 數(shù)據(jù)庫并發(fā)操作中3種數(shù)據(jù)不一致性現(xiàn)象,6.3 并發(fā)控制與封鎖,6.3.3 封鎖技術 并發(fā)控制措施的本質(zhì)是用正確方式調(diào)度并發(fā)操作,使一個用戶事務的執(zhí)行不受其它事務干擾,從而避免造成數(shù)據(jù)的不一致性。并發(fā)控制的主要技術是封鎖(locking).如在飛機訂票例中,甲事務要修改A,若在讀出A前先鎖住A,其它事務不能再讀取和修改A,直到甲修改并寫回A后解除了對A的封鎖為止,這樣甲就不會丟失修改。 事務T在對某個數(shù)據(jù)對象(表、記錄等)操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后T對數(shù)據(jù)對象有一定的控制(具體由封鎖類型決定),在事務T釋放前,其它事務不能更新.基本的封鎖類型有兩種: (1)排它鎖(X鎖、寫鎖) 若事務T對數(shù)據(jù)對象A加上X鎖,則只允許T讀取和修改A,其它任何事務不能對A加任何類型的鎖,直到T釋放A上的鎖。以保證其它事務在T釋放A上的鎖前不再讀取和修改A。 (2)共享鎖(S鎖、讀鎖) T對數(shù)據(jù)對象A加上S鎖,則T可以讀A但不能修改A,其它事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。保證了在T對A加S鎖過程中其它事務對A只能讀,不能修改。,6.3 并發(fā)控制與封鎖,6.3.4并發(fā)操作的調(diào)度 系統(tǒng)對并行操作的調(diào)度是隨機的,不同的調(diào)度可能會產(chǎn)生不同結果。如果一個事務運行中不同時運行其他事務,則可認為該事務的運行結果是正常的或預期的,因此將所有事務串行起來的調(diào)度策略是正確的。雖然以不同的順序串行執(zhí)行事務也可能會產(chǎn)生不同的結果,但由于不會將數(shù)據(jù)庫置于不一致狀態(tài),所以都可認為是正確的。由此可得結論:幾個事務的并行執(zhí)行是正確的,當且僅當其結果與按某一次序串行地執(zhí)行它們的結果相同。這種并行調(diào)度策略稱為可串行化(serializable)的調(diào)度??纱行?serializability)是并行事務正確性的唯一準則 。 【案例6-20】現(xiàn)有兩個事務,分別包含下列操作: 事務1:讀B;A=B+1;寫回A; 事務2:讀A;B=A+1;寫回B; 假設A的初值為10,B的初值為2。表6-5給出了對這兩個事務的三種不同的調(diào)度策略,(a)和(b)為兩種不同的串行調(diào)度策略,雖然執(zhí)行結果不同,但他們都是正確的調(diào)度.(c)中兩個事務是交錯執(zhí)行的,由于執(zhí)行結果與(a)(b)的結果都不同,所以是錯誤的調(diào)度。,6.3 并發(fā)控制與封鎖,(d)中的兩個事務也是交錯執(zhí)行的,由于執(zhí)行結果與串行調(diào)度1(a)的執(zhí)行結果相同,所以是正確的調(diào)度。 DBMS普遍采用悲觀封鎖方法,如DM和SQL Server,以保證調(diào)度的正確性,即并行操作調(diào)度的可串行性。還有時標封鎖方法、樂觀封鎖方法等.,表6-5 對兩個事務的不同調(diào)度策略,6.4 數(shù)據(jù)備份與恢復,數(shù)據(jù)備份與恢復非常重要,是防止意外故障的必備措施。意外故障包括:存儲媒體損壞、用戶操作錯誤、硬件故障或自然災難等。 6.4.1 數(shù)據(jù)備份 1數(shù)據(jù)備份概述 數(shù)據(jù)備份(Data Backup)是指為防止系統(tǒng)出現(xiàn)操作失誤或系統(tǒng)故障導致數(shù)據(jù)丟失,而將全系統(tǒng)或部分數(shù)據(jù)從應用主機中復制(轉(zhuǎn)存)到其它存儲介質(zhì)上的過程。其目的是為了系統(tǒng)數(shù)據(jù)崩潰時能夠快速的恢復數(shù)據(jù),使系統(tǒng)迅速恢復運行。數(shù)據(jù)備份不僅是簡單的文件復制,在多數(shù)是指數(shù)據(jù)庫備份,指制作數(shù)據(jù)庫結構和數(shù)據(jù)的副本。備份的內(nèi)容包括:用戶和系統(tǒng)的數(shù)據(jù)庫內(nèi)容。 數(shù)據(jù)備份也是將數(shù)據(jù)庫數(shù)據(jù)復制到備份設備的過程,也常將存放于備份設備中的數(shù)據(jù)庫的拷貝稱為原數(shù)據(jù)庫的備份或備份.常用的技術就是數(shù)據(jù)備份和登記日志文件。,6.4 數(shù)據(jù)備份與恢復,(1)備份 備份也稱轉(zhuǎn)儲是DBA定期地將數(shù)據(jù)庫復制到儲存介質(zhì)的過程。其備用的數(shù)據(jù)文本稱為后備副本或后援副本。系統(tǒng)在Ta時刻停止運行事務進行數(shù)據(jù)庫備份,在Tb時刻備份完畢,得到Tb時刻的數(shù)據(jù)庫一致性副本。系統(tǒng)運行到Tf時發(fā)生故障。為恢復數(shù)據(jù)庫,首先由DBA重裝數(shù)據(jù)庫后備副本,將數(shù)據(jù)庫恢復至Tb時刻的狀態(tài),然后重新運行自Tb時刻至Tf時刻的所有更新事務,就可將數(shù)據(jù)庫恢復到故障發(fā)生前的狀態(tài)。如圖所示。 備份十分耗費時間

溫馨提示

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

最新文檔

評論

0/150

提交評論