數(shù)據(jù)庫原理及應用教程(第5版) (微課版)課件 第5章 數(shù)據(jù)庫優(yōu)化和管理_第1頁
數(shù)據(jù)庫原理及應用教程(第5版) (微課版)課件 第5章 數(shù)據(jù)庫優(yōu)化和管理_第2頁
數(shù)據(jù)庫原理及應用教程(第5版) (微課版)課件 第5章 數(shù)據(jù)庫優(yōu)化和管理_第3頁
數(shù)據(jù)庫原理及應用教程(第5版) (微課版)課件 第5章 數(shù)據(jù)庫優(yōu)化和管理_第4頁
數(shù)據(jù)庫原理及應用教程(第5版) (微課版)課件 第5章 數(shù)據(jù)庫優(yōu)化和管理_第5頁
已閱讀5頁,還剩139頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

北京林業(yè)大學數(shù)據(jù)庫原理與應用數(shù)據(jù)庫安全內容概述背景企業(yè)的業(yè)務過程信息國家機構的業(yè)務管理信息國防情報等具有密級的信息數(shù)據(jù)庫······管理存儲和使用存儲和使用············DBMS為了適應和滿足數(shù)據(jù)共享的環(huán)境和要求,DBMS要保證整個系統(tǒng)的正常運轉,防止數(shù)據(jù)泄露,惡意修改,不一致產(chǎn)生,產(chǎn)生問題后的及時恢復,需要一整套而有效的保護措施。數(shù)據(jù)庫安全內容概述DBMS對數(shù)據(jù)安全的保護功能安全性控制完整性控制并發(fā)性控制數(shù)據(jù)庫恢復數(shù)據(jù)庫安全內容針對的問題數(shù)據(jù)庫安全內容概述安全性控制完整性控制并發(fā)性控制數(shù)據(jù)庫恢復防止數(shù)據(jù)泄露,惡意修改產(chǎn)生問題后的及時恢復防止數(shù)據(jù)的不一致性數(shù)據(jù)庫安全性含義、控制方法及SQLServer安全性機制數(shù)據(jù)庫安全性含義安全性控制的一般方法SQLServer數(shù)據(jù)庫安全性機制總結本章目錄CONTENTS數(shù)據(jù)庫安全性含義數(shù)據(jù)庫安全性含義法律、社會和倫理方面環(huán)境控制方面政策方面計算機軟硬件的安全性運行方面系統(tǒng)軟件方面物理控制方面數(shù)據(jù)庫的安全性是指保護數(shù)據(jù)庫以防止非法使用所造成的數(shù)據(jù)泄露、更改或破壞。安全性控制的一般方法編寫合法的程序繞過DBMS的安全管理機制,直接在操作系統(tǒng)上,讀取、修改相關數(shù)據(jù)。用戶登錄數(shù)據(jù)庫管理系統(tǒng)后,使用了不在其權限范圍中的數(shù)據(jù)?!踩钥刂剖侵敢M可能地杜絕所有可能的數(shù)據(jù)庫非法訪問。安全性控制的主要問題面臨的問題:安全性不僅是數(shù)據(jù)庫層面的問題,在計算機系統(tǒng)中都存在這個問題。在計算機系統(tǒng)中,安全措施是通過層層設置的,安全模型的層次如下:安全性控制模型用戶DBMS數(shù)據(jù)庫操作系統(tǒng)安全控制模型的層次用戶標識和鑒定數(shù)據(jù)庫安全性控制的手段用戶存取權限控制定義視圖數(shù)據(jù)加密數(shù)據(jù)審計數(shù)據(jù)庫安全性控制手段由系統(tǒng)提供一定的方式讓用戶標識自己的名字或身份,系統(tǒng)內部記錄著所有合法用戶的標識。每次用戶要求進入系統(tǒng)時,由系統(tǒng)進行核實,通過鑒定后才提供機器的使用權。用戶標識和鑒定手段概述用戶提供標識系統(tǒng)用戶提供標識存儲合法標識比較服務器級別安全性管理SQLServer登錄賬號的相關操作SQLServer身份驗證模式SQLServer服務器角色總結主要內容CONTENTSSQLServer登錄賬號的相關操作登錄賬號和用戶賬號在SQLServer中,賬號有兩種:登錄賬號(LoginName)數(shù)據(jù)庫的用戶賬號(UserName)數(shù)據(jù)庫及其管理系統(tǒng)服務器表和視圖登錄賬號數(shù)據(jù)庫的用戶賬號創(chuàng)建登錄賬號的過程創(chuàng)建登錄賬號的用戶名和密碼等登錄標識信息。創(chuàng)建登錄賬號的服務器角色創(chuàng)建登錄賬號的登錄名、驗證模式和密碼步驟如下:‘對象資源管理器’;展開‘安全性’節(jié)點;右鍵單擊‘登錄名’;選擇‘新建登錄名’;輸入登錄名;選擇身份驗證模式;輸入密碼并確認;選擇密碼策略。指定登錄賬號的服務器角色步驟如下:選擇‘服務器角色’;確定服務器角色并點擊‘確認’。修改和刪除登錄賬號修改登錄賬號在‘對象資源管理器’中展開‘安全性’節(jié)點下面的‘登錄名’節(jié)點,右鍵選擇要修改的登錄名,選擇彈出菜單中的‘屬性’菜單就可以對登錄賬號進行修改。刪除登錄賬號在‘對象資源管理器’中展開‘安全性’節(jié)點下面的‘登錄名’節(jié)點,右鍵選擇要刪除的登錄名,選擇彈出菜單中的‘刪除’菜單即可刪除指定的登錄賬號。SQLServer身份驗證模式SQLServer身份驗證方法的設置步驟如下:‘對象資源管理器’中右鍵‘服務器’彈出菜單中選擇‘屬性’‘服務器屬性’窗口中‘選擇左側的‘安全性’選擇身份驗證模式重啟SQLServer兩種主要的驗證模式Windows身份驗證使用Windows操作系統(tǒng)進行用戶的登錄身份驗證將驗證用戶的工作讓windows進行。只支持windows環(huán)境的驗證?;旌向炞C方式SQLServer自行進行用戶的登錄身份驗證支持非windows用戶登錄。一般用于各類Web程序應用使用數(shù)據(jù)庫的情況。SQLServer服務器角色SQLServer服務器角色的查看主要步驟:角色是權限的集合,將不同權限根據(jù)業(yè)務關系,組成角色。SQLServer默認提供的角色如圖所示:默認安裝的角色權限概述數(shù)據(jù)庫管理員不能創(chuàng)建服務器角色,只能夠將其他角色或者用戶添加到服務器角色中。服務器角色描

述bulkadmin允許非sysadmin用戶運行BULKINSERT語句dbcreator創(chuàng)建、更改、刪除和還原任何數(shù)據(jù)庫diskadmin管理磁盤文件processadmin終止SQLServer實例中運行的進程public每個SQLServer登錄賬號都屬于public服務器角色securityadmin管理登錄名及其屬性serveradmin更改服務器范圍的配置選項和關閉服務器setupadmin添加和刪除鏈接的服務器,并且也可以執(zhí)行某些系統(tǒng)存儲過程sysadmin在服務器中執(zhí)行任何活動總結知識點總結賬號登錄賬號用戶賬號創(chuàng)建方法修改方法刪除方法用戶名驗證模式密碼策略windows混合服務器角色用一個用戶名或用戶標識符來標明用戶的身份,系統(tǒng)以此來鑒別用戶的合法性。用戶標識和鑒定標識的表示方法用戶標識和鑒定標識的表示方法用戶標識符是用戶公開的標識,它不足以成為鑒別用戶身份的憑證。通過用戶名和口令來鑒定用戶的方法簡單易行,但用戶名和口令的產(chǎn)生和使用比較簡單,也容易被竊取,因此還可采用更復雜的方法。用戶存取權限控制手段概述用戶存取權限指的是不同的用戶對于不同的數(shù)據(jù)對象允許執(zhí)行的操作權限。在數(shù)據(jù)庫系統(tǒng)中,定義用戶存取權限稱為授權。這些授權定義經(jīng)過編譯后以一張授權表的形式存放在數(shù)據(jù)字典中。實施方法建立授權表用戶標識數(shù)據(jù)對象操作類型用戶存取權限控制存取權限的例子對于授權的使用,一個衡量授權機制的重要指標就是授權粒度,即可以定義的數(shù)據(jù)對象的范圍,在關系數(shù)據(jù)庫中,授權粒度包括關系、記錄或屬性。授權粒度越細,授權子系統(tǒng)就越靈活,能夠提供的安全性就越完善。數(shù)據(jù)對象操作類型模式模式建立、修改、檢索外模式建立、修改、檢索內模式建立、修改、檢索數(shù)據(jù)表查找、插入、修改、刪除屬性列查找、插入、修改、刪除為不同的用戶定義不同的視圖,可以限制各個用戶的訪問范圍。視圖是邏輯存在的,其修改操作會受到限制。定義視圖手段概述實施方法學生表學生選課表學生看到的成績單老師看到的成績單虛擬的視圖替換方法,該方法使用密鑰將明文中的每一個字符轉換為密文中的字符。轉換方法,該方法將明文中的字符按不同的順序重新排列。數(shù)據(jù)加密實施方法通常將這兩種方法結合起來使用,就可以達到相當高的安全程度。手段概述加密的基本思想是根據(jù)一定的算法將原始數(shù)據(jù)加密成為不可直接識別的格式,數(shù)據(jù)以密文的形式存儲和傳輸。數(shù)據(jù)審計手段概述審計功能是一種監(jiān)視措施,它跟蹤記錄有關數(shù)據(jù)的訪問活動。審計追蹤把用戶對數(shù)據(jù)庫的所有操作自動記錄下來,存放在一個特殊文件中,即審計日志中。操作類型(如修改、查詢等),操作終端標識與操作者標識,操作日期和時間,操作所涉及到的相關數(shù)據(jù)(如基本表、視圖、記錄、屬性等),數(shù)據(jù)的前象和后象等。記錄的內容一般包括:SQLServer數(shù)據(jù)安全性機制三層安全結構結合安全性模式以及安全性控制手段,SQLServer使用了2層結構的數(shù)據(jù)庫安全機制,表現(xiàn)為:用戶提供標識服務器數(shù)據(jù)庫及其管理系統(tǒng)具體數(shù)據(jù)庫及其對象級別安全性表和視圖總結總結安全性控制的一般方法用戶標識與鑒定用戶存取權限控制定義視圖數(shù)據(jù)加密數(shù)據(jù)審計SQLServer數(shù)據(jù)安全機制服務器級別的安全性具體數(shù)據(jù)庫及其對象的安全性SQLServer具體數(shù)據(jù)庫級安全管理數(shù)據(jù)庫用戶賬號的相關操作數(shù)據(jù)庫角色用戶權限管理總結CONTENTS主要內容數(shù)據(jù)庫用戶賬號的相關操作用戶賬號要在特定的數(shù)據(jù)庫內創(chuàng)建,并關聯(lián)一個登錄賬號(當一個數(shù)據(jù)庫的用戶創(chuàng)建時,必須關聯(lián)一個登錄賬號)。每個登錄賬號在一個數(shù)據(jù)庫中只能有一個用戶賬號,但每個登錄賬號可以在不同的數(shù)據(jù)庫中各有一個用戶賬號。數(shù)據(jù)庫用戶賬號登錄賬號用戶賬號用戶賬號用戶賬號創(chuàng)建賬戶的方式使用‘對象資源管理器’使用SQL語句創(chuàng)建數(shù)據(jù)庫用戶賬號1.打開‘對象資源管理器’2.開展要創(chuàng)建用戶的數(shù)據(jù)庫3.找到其下的‘安全性’節(jié)點創(chuàng)建數(shù)據(jù)庫用戶賬號使用‘對象資源管理器’4.右鍵點擊出現(xiàn)的用戶文件夾1.右鍵‘用戶’文件夾2.點擊‘新建用戶’3.添加‘常規(guī)選項卡’中信息創(chuàng)建數(shù)據(jù)庫用戶賬號使用‘對象資源管理器’登錄名:對應的登錄賬號默認架構:該用戶所屬架構擁有的架構查看和設置該用戶擁有的架構。創(chuàng)建數(shù)據(jù)庫用戶賬號使用‘對象資源管理器’使用用戶映射查看數(shù)據(jù)庫用戶賬號和登錄賬號的綁定關系。創(chuàng)建數(shù)據(jù)庫用戶賬號使用‘對象資源管理器’user_name:數(shù)據(jù)庫用戶名。login_name:登錄用戶名。創(chuàng)建數(shù)據(jù)庫用戶賬號使用語句創(chuàng)建CreateUseruser_name

[{For|From}{Loginlogin_name|Certificatecert_name|AsymmetricKeyasym_key_name}|WithoutLogin]和創(chuàng)建用戶的方法類似,找到數(shù)據(jù)庫下的‘安全’文件夾節(jié)點。在文件夾下找到所要修改的用戶。右鍵該用戶,選擇屬性,則可以按照對話框修改用戶信息。修改步驟如下:修改和刪除數(shù)據(jù)庫用戶賬號和創(chuàng)建用戶的方法類似,找到數(shù)據(jù)庫下的‘安全’文件夾節(jié)點。在文件夾下找到所要刪除的用戶。右鍵該用戶,選擇刪除對象,則可以刪除用戶信息。刪除步驟如下:修改和刪除數(shù)據(jù)庫用戶賬號數(shù)據(jù)庫角色數(shù)據(jù)庫角色概述角色名稱權限public最基本的數(shù)據(jù)庫角色db_accessadmin可以添加或刪除用戶標識db_backupoperator可以發(fā)出DBCC、CHECKPOINT和BACKUP語句db_datareader可以選擇(取)數(shù)據(jù)庫內任何用戶表中的所有數(shù)據(jù)db_datawriter可以更改數(shù)據(jù)庫內任何用戶表中的所有數(shù)據(jù)db_ddladmin可以發(fā)出所有DDL語句,但不能發(fā)出GRANT(授權)、REVOKE或DENY語句db_denydatareader不能選擇(?。?shù)據(jù)庫內任何用戶表中的任何數(shù)據(jù)db_denydatawriter不能更改數(shù)據(jù)庫內任何用戶表中的任何數(shù)據(jù)db_owner在數(shù)據(jù)庫中有全部權限db_securityadmin

可以管理全部權限、對象所有權、角色和角色成員資格用戶權限管理權限管理分類用戶對數(shù)據(jù)庫的權限操作系統(tǒng)權限對象權限用戶權限管理分類創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表、存儲過程等。用戶對特定數(shù)據(jù)庫對象操作對表和視圖的操作總結數(shù)據(jù)庫安全知識點總結創(chuàng)建用戶的方式修改用戶的方式刪除用戶的方式用戶權限管理數(shù)據(jù)庫完整性含義、描述方式及分類方式數(shù)據(jù)庫完整性含義數(shù)據(jù)庫完整性的描述方式數(shù)據(jù)庫完整性約束的分類總結本章目錄CONTENTS數(shù)據(jù)庫完整性的含義數(shù)據(jù)庫完整性的定義確保數(shù)據(jù)庫中的數(shù)據(jù)數(shù)據(jù)庫的完整性數(shù)據(jù)的正確性數(shù)據(jù)的有效性數(shù)據(jù)的相容性數(shù)據(jù)庫完整性的定義防止合法用戶使用數(shù)據(jù)庫時向數(shù)據(jù)庫中加入不符合語義的數(shù)據(jù)。完整性措施的防范對象是不合語義的數(shù)據(jù)。在安全性的基礎上,完整性可以理解為:數(shù)據(jù)庫完整性的描述方式使用規(guī)則描述數(shù)據(jù)庫完整性的方法違約響應:規(guī)定系統(tǒng)如果發(fā)現(xiàn)用戶發(fā)出的操作請求違背了完整性約束條件,應該采取一定的動作來保證數(shù)據(jù)的完整性,即違約時要做的事情。WHEN約束條件:規(guī)定系統(tǒng)檢查用戶發(fā)出的操作請求違背了什么樣的完整性約束條件。觸發(fā)條件:規(guī)定系統(tǒng)什么時候使用規(guī)則來檢查數(shù)據(jù)。ConditionWhat描述完整性的3個部分規(guī)則的執(zhí)行時間立即執(zhí)行:在執(zhí)行多個語句構成的事務時,執(zhí)行完用戶事務的一條語句后,系統(tǒng)立即對數(shù)據(jù)進行完整性條件檢查。延遲執(zhí)行:執(zhí)行完事務的所有語句后,系統(tǒng)才數(shù)據(jù)進行完整性條件檢查。規(guī)則的執(zhí)行時間完整性的形式化描述一條完整性可以用一個五元組(D,O,A,C,P)來形式化地表示代表約束作用的數(shù)據(jù)對象。可以是關系、元組和列三種對象;D(Data):代表觸發(fā)完整性檢查的數(shù)據(jù)庫操作,即當用戶發(fā)出什么操作請求時需要檢查該完整性規(guī)則,是立即執(zhí)行還是延遲執(zhí)行;O(Operation)代表數(shù)據(jù)對象必須滿足的語義約束,這是規(guī)則的主體;A(Assertion)完整性的形式化描述代表選擇A作用的數(shù)據(jù)對象值的謂詞;C(Condition)代表違反完整性規(guī)則時觸發(fā)執(zhí)行的操作過程。P(Procedure)完整性的形式化舉例例如,對于“學號(SNo)不能為空”的這條完整性約束中,D、O、A、C、P的含義分別如下:D:代表約束作用的數(shù)據(jù)對象為SNo屬性;O:當用戶插入或修改數(shù)據(jù)時需要檢查該完整性規(guī)則;A:SNo不能為空;C:A可作用于所有記錄的SNo屬性;P:拒絕執(zhí)行用戶請求。數(shù)據(jù)庫完整性約束的分類數(shù)據(jù)庫完整性約束的分類根據(jù)約束條件:值的約束和結構的約束(1)對數(shù)據(jù)類型的約束,包括數(shù)據(jù)的類型、長度、單位和精度等。例如:規(guī)定學生的姓名數(shù)據(jù)類型為字符型,長度為8值的約束即對數(shù)據(jù)類型、數(shù)據(jù)格式、取值范圍和空值等進行規(guī)定數(shù)據(jù)庫完整性約束的分類(2)對數(shù)據(jù)格式的約束。例如:規(guī)定出生日期的格式為YY.MM.DD(3)對取值范圍的約束。例如:月份的取值范圍為1~12(4)對空值的約束,空值表示未定義或者未知數(shù)值。例如,在SC關系中,學號和課程號不可以為空。數(shù)據(jù)庫完整性約束的分類結構的約束即對數(shù)據(jù)之間聯(lián)系的約束(1)函數(shù)依賴約束。例如:2NF,3NF和BCNF需要滿足的函數(shù)依賴。(2)實體完整性約束。例如:在學生關系中,主碼學號不能為空。(3)參照完整性約束。例如:在學生關系中,外碼系別的約束。(4)統(tǒng)計約束。例如:規(guī)定某一個的數(shù)值不得高于這一列的平均值等。數(shù)據(jù)庫完整性約束的分類根據(jù)約束狀態(tài):靜態(tài)約束和動態(tài)約束靜態(tài)約束是指對數(shù)據(jù)庫每一個確定狀態(tài)所應滿足的約束條件,是反映數(shù)據(jù)庫狀態(tài)合理性的約束,這是最重要的一類完整性約束。值的約束和結構的約束均屬于靜態(tài)約束。靜態(tài)約束數(shù)據(jù)庫完整性約束的分類根據(jù)約束狀態(tài):靜態(tài)約束和動態(tài)約束動態(tài)約束是指數(shù)據(jù)庫從一種狀態(tài)轉變?yōu)榱硪环N狀態(tài)時,新舊值之間所應滿足的約束條件,動態(tài)約束反映的是數(shù)據(jù)庫狀態(tài)變遷的約束。例如,學生年齡在更改時只能增長,職工工資在調整時不得低于其原來的工資。動態(tài)約束總結知識點總結含義描述方式形式化表達分類觸發(fā)條件約束條件違約條件D,O,A,C,P值和結構靜態(tài)和動態(tài)數(shù)據(jù)庫完整性數(shù)據(jù)庫完整性的實施規(guī)則默認總結本章目錄CONTENTS規(guī)則使用規(guī)則進行數(shù)據(jù)庫完整性控制規(guī)則(Rule)就是數(shù)據(jù)庫對存儲在表中的列或用戶自定義數(shù)據(jù)類型中的值的規(guī)定和限制。規(guī)則與其作用的表或用戶自定義數(shù)據(jù)類型是相互獨立的,即表或用戶自定義對象的刪除、修改不會對與之相連的規(guī)則產(chǎn)生影響。規(guī)則和約束可以同時使用,表的列可以有一個規(guī)則及多個check約束。規(guī)則的使用步驟創(chuàng)建規(guī)則將規(guī)則綁定到數(shù)據(jù)庫的對象上,或者將規(guī)則從數(shù)據(jù)庫的對象上松綁。CREATERULErule_nameAScondition_expression創(chuàng)建規(guī)則規(guī)則的使用步驟CREATERULEage_ruleAS@age>=18and@age<=50【例】創(chuàng)建學生年齡規(guī)則規(guī)則的使用步驟創(chuàng)建規(guī)則將規(guī)則綁定到數(shù)據(jù)庫的對象上,或者將規(guī)則從數(shù)據(jù)庫的對象上松綁。創(chuàng)建規(guī)則后,規(guī)則僅僅是一個存在于數(shù)據(jù)庫中的對象,并未發(fā)生作用。需要將規(guī)則與數(shù)據(jù)庫表或用戶自定義對象聯(lián)系起來,才能達到創(chuàng)建規(guī)則的目的。所謂綁定就是指定規(guī)則作用于哪個表的哪一列或哪個用戶自定義數(shù)據(jù)類型。解除規(guī)則與對象的綁定稱為“松綁”。綁定規(guī)則和松綁規(guī)則的方法sp_bindrule[@rulename=]'rule',[@objname=]'object_name'[,'futureonly’][例]綁定規(guī)則age_rule到S表的字段Age。EXECsp_bindrule'age_rule','S.Age‘用存儲過程sp_bindrule綁定規(guī)則規(guī)則對已經(jīng)輸入表中的數(shù)據(jù)不起作用。綁定規(guī)則和松綁規(guī)則的方法用存儲過程sp_unbindrule松綁規(guī)則的綁定sp_unbindrule[@objname=]'object_name'[,'futureonly'][例]解除已綁定到S表的字段Age的規(guī)則age_rule。EXECsp_unbindrule'S.Age'刪除規(guī)則的方法刪除規(guī)則使用DROPRULE命令刪除規(guī)則DROPRULE{rule_name}[,...n][例]刪除age_rule規(guī)則。DROPRULEage_rule在刪除一個規(guī)則前必須先將與其綁定的對象解除綁定。默認默認的定義及創(chuàng)建方法默認(Default)是向用戶輸入記錄時沒有指定具體數(shù)據(jù)的列中自動插入的數(shù)據(jù)。表的一列或一個用戶自定義數(shù)據(jù)類型只能與一個默認綁定。默認的定義及創(chuàng)建方法創(chuàng)建默認綁定默認到數(shù)據(jù)庫中的對象默認的使用步驟默認的定義及創(chuàng)建方法創(chuàng)建默認CREATEDEFAULTdefault_nameASconstant_expression[例]創(chuàng)建出生日期默認birthday_defa。CREATEDEFAULTbirthday_defaAS'1978-1-1'默認的查看、綁定和松綁使用sp_helptext存儲過程可以查看默認的信息。[例]查看默認birthday_defa。EXECsp_helptextbirthday_defa查看默認默認的查看、綁定和松綁默認的綁定與松綁用存儲過程sp_bindefault綁定默認sp_bindefault[@defname=]'default', [@objname=]'object_name' [,'futureonly']用存儲過程sp_unbindefault解除默認的綁定sp_unbindefault[@objname=]'object_name'[,'futureonly']默認的綁定和松綁的舉例、刪除默認[例]綁定默認birthday_defa到數(shù)據(jù)表S的Birthday列上。EXECsp_bindefaultbirthday_defa,‘S.[Birthday]’[例]解除默認birthday_defa與表S的Birthday列的綁定EXECsp_unbindefault‘S.[Birthday]’默認的綁定和松綁的舉例、刪除默認使用DROPDEFAULT命令刪除默認DROPDEFAULT{default_name}[,…n][例5-21]刪除學生生日默認birthday_defa.DROPDEFGAULTbirthday_defa刪除默認在刪除一個默認前必須先將與其綁定的對象解除綁定總結知識點總結數(shù)據(jù)庫完整性的實施使用規(guī)則使用默認數(shù)據(jù)庫并發(fā)性的含義事務及其特性并發(fā)操作帶來的不一致性封鎖協(xié)議本章目錄CONTENTS總結數(shù)據(jù)庫并發(fā)性的含義多個用戶同時訪問數(shù)據(jù)庫,如果對并發(fā)操作不加控制可能會產(chǎn)生不正確的數(shù)據(jù),破壞數(shù)據(jù)的完整性。并發(fā)控制就是解決這類問題,以保持數(shù)據(jù)庫中數(shù)據(jù)的一致性,即在任何一個時刻數(shù)據(jù)庫都將以相同的形式給用戶提供數(shù)據(jù)。數(shù)據(jù)庫并發(fā)性的含義事務及其特性事務的開始事務是數(shù)據(jù)庫系統(tǒng)中執(zhí)行的一個工作單位,它是由用戶定義的一組操作序列。一個事務可以是一組SQL語句、一條SQL語句或整個程序,一個應用程序可以包括多個事務。事務(Transaction)定義事務的語句有三條:BEGINTRANSACTION事務的提交COMMIT事務的回滾ROLLBACK持久性指一個事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是持久的,即使數(shù)據(jù)庫因故障而受到破壞,DBMS也應該能夠恢復。如果多個事務并發(fā)地執(zhí)行,應像各個事務獨立執(zhí)行一樣,一個事務的執(zhí)行不能被其他事務干擾。事務對數(shù)據(jù)庫的作用是數(shù)據(jù)庫從一個一致狀態(tài)轉變到另一個一致狀態(tài)。所謂數(shù)據(jù)庫的一致狀態(tài)是指數(shù)據(jù)庫中的數(shù)據(jù)滿足完整性約束。一個事務是一個不可分割的工作單位,事務在執(zhí)行時,應該遵守“要么不做,要么全做”(NothingorAll)的原則,即不允許完成部分的事務。事務(Transaction)原子性(Atomicity)一致性(Consistency)隔離性(Isolation)持久性(Durability)并發(fā)操作帶來的不一致性舉例說明不一致問題的產(chǎn)生過程并發(fā)取款操作。假設存款余額R=1000元,甲事務T1取走存款100元,乙事務T2取走存款200元,如果正常操作,即甲事務T1執(zhí)行完畢再執(zhí)行乙事務T2,存款余額更新后應該是700元。但是如果按照如下順序操作,則會有不同的結果:例:舉例說明不一致問題的產(chǎn)生過程結果兩個事務共取走存款300元,而數(shù)據(jù)庫中的存款卻只少了200元。得到這種錯誤的結果是由甲乙兩個事務并發(fā)操作引起的。甲事務T1讀取存款余額R=1000元;01乙事務T2讀取存款余額R=1000元;02甲事務T1取走存款100元,修改存款余額R=R-100=900,把R=900寫回到數(shù)據(jù)庫;03乙事務T2取走存款200元,修改存款余額R=R-200=800,把R=800寫回到數(shù)據(jù)庫;04引起數(shù)據(jù)不一致性的主要問題數(shù)據(jù)庫的并發(fā)操作導致的數(shù)據(jù)庫不一致性主要有以下三種:丟失更新(LostUpdate)污讀(DirtyRead)不可重讀(UnrepeatableRead)引起數(shù)據(jù)不一致性的主要問題數(shù)據(jù)庫的并發(fā)操作導致的數(shù)據(jù)庫不一致性主要有以下三種:丟失更新(LostUpdate)時

間事務T1數(shù)據(jù)庫中R的值事務T2t0

1000

t1FINDR

t2

FINDRt3R=R-100

t4

R=R-200t5UPDATER

t6

900UPDATERt7

800

當兩個事務T1和T2讀入同一數(shù)據(jù),并發(fā)執(zhí)行修改操作時,T2把T1或T1把T2的修改結果覆蓋掉,造成了數(shù)據(jù)的丟失更新問題,導致數(shù)據(jù)的不一致。引起數(shù)據(jù)不一致性的主要問題數(shù)據(jù)庫的并發(fā)操作導致的數(shù)據(jù)庫不一致性主要有以下三種:污讀(DirtyRead)時

間事務T1數(shù)據(jù)庫中R的值事務T2t0

1000

t1FINDR

t2R=R-100

t3UPDATER

t4

900FINDRt5ROLLBACK

t6

1000事務T1更新了數(shù)據(jù)R,事務T2讀取了更新后的數(shù)據(jù)R,事務T1由于某種原因被撤銷,修改無效,數(shù)據(jù)R恢復原值。事務T2得到的數(shù)據(jù)與數(shù)據(jù)庫的內容不一致,這種情況稱為“污讀”。引起數(shù)據(jù)不一致性的主要問題數(shù)據(jù)庫的并發(fā)操作導致的數(shù)據(jù)庫不一致性主要有以下三種:不可重讀(UnrepeatableRead)時

間事務T1數(shù)據(jù)庫中R的值事務T2t0

1000

t1FINDR

t2

FINDRt3

R=R-200

t4

UPDATERt5

800

事務T1讀取了數(shù)據(jù)R,事務T2讀取并更新了數(shù)據(jù)R,當事務T1再讀取數(shù)據(jù)R以進行核對時,得到的兩次讀取值不一致,這種情況稱為“不可重讀”。封鎖協(xié)議封鎖分類所謂封鎖就是當一個事務在對某個數(shù)據(jù)對象(可以是數(shù)據(jù)項、記錄、數(shù)據(jù)集以至整個數(shù)據(jù)庫)進行操作之前,必須獲得相應的鎖,以保證數(shù)據(jù)操作的正確性和一致性。封鎖的定義封鎖(Lock)技術和時標(Timestamping)技術,重點介紹封鎖技術。實現(xiàn)并發(fā)控制的方法主要有兩種:封鎖分類基本的封鎖類型有兩種排它型封鎖又稱寫封鎖,簡稱為X封鎖,它采用的原理是禁止并發(fā)操作。排它型封鎖(ExclusiveLock)共享封鎖又稱讀封鎖,簡稱為S鎖,它采用的原理是允許其他用戶對同一數(shù)據(jù)對象進行查詢,但不能對該數(shù)據(jù)對象進行修改。共享封鎖(ShareLock)封鎖可以保證合理地進行并發(fā)控制,保證數(shù)據(jù)的一致性。在封鎖時,要考慮一定的封鎖規(guī)則,例如,何時開始封鎖、封鎖多長時間、何時釋放等,這些封鎖規(guī)則稱為封鎖協(xié)議。封鎖協(xié)議的定義(LockProtocol)使用封鎖協(xié)議的過程使用封鎖協(xié)議的過程通過三級封鎖協(xié)議在不同程度上給予解決:一級封鎖協(xié)議二級封鎖協(xié)議三級封鎖協(xié)議使用封鎖協(xié)議的過程事務T在修改數(shù)據(jù)對象之前必須對其加X鎖,直到事務結束。一級封鎖協(xié)議時

間事務T1數(shù)據(jù)庫中R的值事務T2t0

XLOCKR1000

t1FINDR

t2

XLOCKRt3R=R-100

WAITt4UPDATER

WAITt5UNLOCKX900WAITt6

XLOCKRt7

R=R?200

t8UPDATERt9700UNLOCKX使用封鎖協(xié)議的過程在一級封鎖協(xié)議的基礎上,另外加上事務T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后釋放S鎖。二級封鎖協(xié)議時

間事務T1數(shù)據(jù)庫中R的值事務T2t0

XLOCKR1000

t1FINDR

t2

R=R-100

t3UPDATER

t4900SLOCKRt5ROLLBACKWAITt6UNLOCKX1000SLOCKRt7

FINDRt8UNLOCKS使用封鎖協(xié)議的過程在一級封鎖協(xié)議的基礎上,另外加上事務T在讀取數(shù)據(jù)R之前必須先對其加S鎖,讀完后并不釋放S鎖,而直到事務T結束才釋放。三級封鎖協(xié)議時

間事務T1數(shù)據(jù)庫中R的值事務T2t01000

t1SLOCKR

t2FINDR

t3

XLOCKRt4COMMIT

WAITt5UNLOCKSWAITt6

XLOCKRt7

FINDRt8R=R?200t9UPDATERt10800UNLOCKX封鎖粒度封鎖粒度指封鎖的單位。根據(jù)對數(shù)據(jù)的不同處理,封鎖的對象可以是這樣一些邏輯單元:字段、記錄、表、數(shù)據(jù)庫等,封鎖的數(shù)據(jù)對象的大小叫封鎖粒度。封鎖粒度的含義封鎖粒度封鎖粒度越小,系統(tǒng)中能夠被封鎖的對象就越多,并發(fā)度越高,但封鎖機構復雜,系統(tǒng)開銷也就越大。封鎖粒度越大,系統(tǒng)中能夠被封鎖的對象就越少,并發(fā)度越低,封鎖機構越簡單,相應系統(tǒng)開銷也就越小。死鎖和活鎖封鎖所產(chǎn)生的額問題當某個事務請求對某一數(shù)據(jù)進行排它性封鎖時,由于其他事務對該數(shù)據(jù)的操作而使這個事務處于永久等待狀態(tài),這種狀態(tài)稱為活鎖?;铈i(Livelock)時

間事務T1事務T2事務T3事務T4t0LOCKR

t1

LOCKR

t2

WAITLOCKR

t3UNLOCKWAITWAITLOCKRt4

WAITLOCKRWAITt5

WAIT

WAITt6

WAITUNLOCKWAITt7

WAIT

LOCKRt8

WAIT

死鎖和活鎖封鎖所產(chǎn)生的額問題在同時處于等待狀態(tài)的兩個或多個事務中,其中的每一個在它能夠進行之前,都等待著某個數(shù)據(jù),而這個數(shù)據(jù)已被它們中的某個事務所封鎖,這種狀態(tài)稱為死鎖。死鎖(Deadlock)時

間事務T1事務T2t0LOCKR1

t1

LOCKR2t2

t3LOCKR1t4WAITt5WAITLOCKR1t6WAITWAITt7WAITWAIT解決封鎖的方法死鎖的預防一次性對所有資源加鎖,如果有一個資源無法加鎖,則等待。一次加鎖法:規(guī)定資源的序號,按序號加鎖順序加鎖法:解決封鎖的方法死鎖的預防如果在事務依賴圖中沿著箭頭方向存在一個循環(huán),那么死鎖的條件就形成了,系統(tǒng)就會出現(xiàn)死鎖。選擇一個處理死鎖代價最小的事

溫馨提示

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

評論

0/150

提交評論