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