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