数据库安全保护
什么是數據庫安全保護?
防止數據意外丟失和不一致數據的產生,以及當數據庫遭受破壞后迅速恢復正常。
DBMS對數據庫的安全保護方功能是通過四方面實現的,即安全性控制、完整性控制、并發性控制和數據庫恢復。
安全性控制:
含義:盡可能地杜絕所有可能的數據庫非法訪問。例如:繞過DBMS的授權機制,通過操作系統直接存取、修改或備份有關數據。
一般方法:
DBMS是建立在操作系統之上的,安全的操作系統是數據庫安全的前提。操作系統應能保證數據庫中的數據必須由DBMS訪問,而不允許用戶越過DBMS直接通過操作系統訪問。數據最后可以通過密碼的形式存儲到數據庫中。這里只討論數據庫有關的安全性措施,分為用戶標識和鑒定、用戶存取權限控制、定義視圖、數據加密和審計等。
用戶標識和鑒定:
系統提供一定的方式讓用戶標識自己的名字和身份,系統內部記錄著所有合法用戶的標識,每次用戶要求進入系統時,由系統進行核實,通過鑒定后才提供計算機的使用權,它是最外層的安全保護措施。常用方法:(1)用一個用戶名或用戶標識符來標明用戶的身份(2)用戶名與口令相結合(3)每個用戶預先約定好一個過程或者函數,鑒別用戶身份時,系統提供一個隨機數,用戶根據自己預先約定的計算過程或者函數進行計算,系統根據計算結果辨別用戶身份的合法性。
用戶存取權限控制:
存取權限由兩個要素組成:數據對象和操作類型。定義一個用戶的存取權限就是要定義這個用戶可以在哪些數據對象上進行哪些類型的操作。定義用戶存取權限稱為授權。權限可以分為系統權限和對象權限兩種,系統權限是由DBA授予某些數據庫用戶能夠對數據庫系統進行某種特定操作的權利,如創建一個基本表(CREATE TABLE),只有得到系統權限,才能成為數據庫用戶;對象權限可以由DBA授予,也可以由基本表、視圖等數據對象的創建者授予,使數據庫用戶具有對某些數據對象進行某些操作的權限,如查詢(SELECT)、添加(INSERT)、修改(UPDATE)和刪除(DELETE)等操作。
在系統初始化時,系統中至少有一個具有DBA權限的用戶,DBA可以通過GRANT語句將系統權限或對象權限授予其他用戶,并可以通過REVOKE語句收回所授予的權限。
角色是多種權限的集合,可以把角色授予用戶或其他角色。可以避免許多重復性的工作,簡化了數據庫用戶的權限管理工作。
定義視圖:
為不同的用戶定義不同的視圖,可以限制各個用戶的訪問范圍。通過視圖機制把要保密的數據對無權存取這些數據的用戶隱藏起來,從而自動地對數據提供一定程度地安全保護。
數據加密:
前面幾種數據庫安全措施,都是防止從數據庫系統中竊取保密數據,不能防止通過不正常渠道非法訪問數據,例如,偷取存儲數據的硬盤,或在通信線路上竊取數據,為了防止此類手段,比較好的辦法是對數據加密。加密的基本思想是根據一定的算法將原始數據(術語明文)加密成為不可直接識別的格式(術語密文),數據以密文的形式存儲和傳輸。
審計:
實際上任何系統的安全性措施都不是絕對可靠的,對于某些高度敏感的保密數據,必須以審計作為預防手段。審計功能是一種監視措施,它跟蹤記錄有關數據的訪問活動。使用審計功能把用戶對數據庫的的所有操作自動記錄下來,存放在一個特殊文件中,即審計日志(Audit Log)中。利用這些信息,可以重現導致數據庫現有狀況的一系列事件,以進一步找出非法存取數據的人、時間和內容等。但使用審計功能會大大增加系統開銷,所以DBMS通常將其作為可選特征,并提供相應的操作語句,可靈活地打開或關閉審計功能。
完整性控制:
含義:數據庫的完整性是指保護數據的正確性、有效性和相容性,防止錯誤的數據進入數據庫造成無效操作。
數據庫的完整性和安全性是數據庫保護的兩個不同的方面,安全性措施的防范對象是非法用戶和非法操作,完整性措施的防范對象是合法用戶的不合語義的數據。
完整性約束條件的分類:
【按約束條件使用的對象劃分】
(1)值的約束和結構約束。值的約束即對數據類型、數據格式、取值范圍和空值等進行規定。結構的約束即對數據之間聯系的約束。
【按約束對象的狀態劃分】
(2)靜態約束和動態約束
方法:
聲明式數據完整性:約束(Constraint)、默認值(Default)、規則(Rule)
程序化數據完整性:存儲過程(Stored Procedure)、觸發器(Trigger)
并發控制與封鎖:
含義:前面的完整性控制是保證各個事務本身能得到正確的數據,只考慮一個用戶使用數據庫的情況,但實際上數據庫中有許多用戶,每個時刻可能只有一個用戶程序運行,也可能有多個用戶并行地存取數據庫,這樣就會發生多個用戶并發存取同一數據的情況,如果對并發操作不加控制可能會產生不正確的數據,破壞數據的完整性。并發控制就是要解決這類問題,以保持數據庫中數據的一致性,即在任何一個時刻數據庫都將以相同的形式給用戶提供數據。
方法:
封鎖技術和時標技術。封鎖技術是目前DBMS普遍采用的并發控制方法。這里介紹封鎖技術。
所謂封鎖就是當一個事務在對某個數據對象(可以是數據項、記錄、數據集以及整個數據庫)進行操作之前,必須獲得相應的鎖,以保證數據操作的正確性和一致性。
封鎖類型:
(1)排他型封鎖。又稱寫封鎖,簡稱為X封鎖,原理是禁止并發操作。當事務T對某個數據對象R實現X封鎖后,其他事務要等T解鎖X封鎖后,才能對R進行封鎖。
(2)共享封鎖。又稱讀封鎖,簡稱為S鎖,原理是允許其他用戶對同一數據對象進行查詢,但不能對該數據對象進行修改。當事務T對某個數據對象R實現S封鎖后,其他事務只能對R加S鎖,而不能加X鎖,直到T釋放R上的S鎖。
封鎖協議:
實際上,鎖是一個控制塊,其中包括被加鎖記錄的標識符及持有鎖的事務的標識符等。在封鎖時,要考慮一定的封鎖規則,例如,何時開始封鎖、封鎖多長時間、何時釋放等,這些封鎖規則稱為封鎖協議。對封鎖方式規定不同的規則,就形成了各種不同的封鎖協議。
封鎖粒度:
封鎖粒度指封鎖的數據對象的大小。根據對數據的不同處理,封鎖的對象可以是這樣的一些邏輯單元:字段、記錄、表和數據庫等。
死鎖和活鎖:
封鎖技術可有效解決并行操作的一致性問題,但也可產生新的問題,即活鎖和死鎖問題。
(1)活鎖。當某個事務請求對某一數據進行排他性封鎖時,由于其他事務對該數據的操作而使這個事務處于永久等待狀態,這種狀態稱為活鎖。
(2)死鎖。在同時處于等待狀態的兩個或多個事務中,其中的每一個在它能夠進行之前,都等待著某個數據,而這個數據已被它們中的某個事務所封鎖,這種狀態稱為死鎖。
數據庫的恢復:
含義:盡管有許多保護措施,但數據庫的數據仍然無法保證絕對不遭受破壞,例如硬件的故障、軟件的錯誤、操作的失誤、惡意的破壞以及計算機病毒等都有可能發生,使數據庫中的數據丟失。因此,系統必須具有檢測故障并把數據從錯誤狀態中恢復到某一正確狀態的功能,這就是數據庫的恢復。
基本原理:利用數據的冗余。數據庫中任何被破壞或不正確的數據都可以利用存儲在其他地方的冗余數據來修復。
因此恢復系統應該提供兩種類型的功能:一種是生成冗余數據,即對可能發生的故障做某些準備,最常用的技術是登記日志文件和數據轉儲;另一種是冗余重建,即利用這些冗余數據恢復數據庫。
總結
- 上一篇: echart各种显示数据的格式化
- 下一篇: linux cmake编译源码,linu