數(shù)據(jù)庫(kù)的安全性
安全性概述
安全性
? 數(shù)據(jù)庫(kù)的安全性是指保護(hù)數(shù)據(jù)庫(kù),防止因用戶非法使用數(shù)據(jù)庫(kù)造成數(shù)據(jù)泄露、更改或破壞
數(shù)據(jù)庫(kù)安全性保護(hù)分層
? 物理層
? 人際層
? 網(wǎng)絡(luò)層
? 操作系統(tǒng)層
? 數(shù)據(jù)庫(kù)系統(tǒng)層
數(shù)據(jù)庫(kù)安全保護(hù)的任務(wù)
? 防止未經(jīng)過(guò)授權(quán)的人員訪問(wèn)數(shù)據(jù),確保敏感信息沒(méi)有被不“需要知道”的人員讀取到
? 防止未經(jīng)過(guò)授權(quán)的人員刪除和修改數(shù)據(jù)
? 監(jiān)視對(duì)數(shù)據(jù)的訪問(wèn)和更改等使用情況
用戶標(biāo)識(shí)與鑒別
用戶標(biāo)識(shí)與鑒別
? 用戶標(biāo)識(shí)與鑒別是系統(tǒng)提供的最外層安全保護(hù)措施
? 其基本方法是:系統(tǒng)提供一定的方式讓用戶標(biāo)識(shí)自己的名字或身份;系統(tǒng)內(nèi)部記錄著所有合法用戶的標(biāo)識(shí);每次用戶要求進(jìn)入系統(tǒng)(與數(shù)據(jù)庫(kù)連接)時(shí),由系統(tǒng)核對(duì)用戶提供的身份標(biāo)識(shí);通過(guò)鑒別的合法用戶才能進(jìn)入系統(tǒng),建立數(shù)據(jù)庫(kù)連接
更新方式的用戶標(biāo)識(shí)與鑒別
? 使用動(dòng)態(tài)產(chǎn)生的新口令登錄數(shù)據(jù)庫(kù)管理系統(tǒng),比如短信密碼或者動(dòng)態(tài)令牌方式
? 利用只有用戶具有的物品鑒別用戶:可以使用磁卡、IC卡等作為用戶身份的憑證,但必須有相應(yīng)的讀卡設(shè)備
? 例如,銀行廣泛使用磁卡+密碼鑒別儲(chǔ)戶身份,允許合法的儲(chǔ)戶訪問(wèn)他/她的儲(chǔ)蓄信息
? 利用用戶的個(gè)人特征鑒別用戶:指紋、視網(wǎng)膜、聲波、人臉等都是用戶個(gè)人特征
自主存取控制
自主存取控制
? 存取控制的任務(wù)
? 數(shù)據(jù)對(duì)象和存取權(quán)限
? 角色
? 權(quán)限的授予和回收容
存取控制的任務(wù)
授權(quán)
? DCL中提供了相應(yīng)的授權(quán)語(yǔ)句,允許用戶自主地定義存取權(quán)限,并將用戶的授權(quán)登記在數(shù)據(jù)字典中合法權(quán)限檢查
? 當(dāng)用戶發(fā)出存取數(shù)據(jù)庫(kù)的操作請(qǐng)求后,DBMS將查找數(shù)據(jù)字典,根據(jù)用戶權(quán)限進(jìn)行合法權(quán)限的檢查;如果用戶的操作請(qǐng)求超出了自身的權(quán)限,系統(tǒng)將拒絕執(zhí)行此操作
數(shù)據(jù)對(duì)象和存取權(quán)限
權(quán)限的授予和回收
? 授權(quán)語(yǔ)句GRANT,語(yǔ)句格式如下:
GRANT <權(quán)限列表> ON <對(duì)象名> TO <用戶/角色列表> [WITH GRANT OPTION] ? 將一種或多種存取權(quán)限賦予一個(gè)或多個(gè)用戶或角色
? 可選項(xiàng)WITH GRANT OPTION,表示獲得授權(quán)的用戶還可以把他/她獲得的權(quán)限轉(zhuǎn)授給其他用戶;缺省時(shí),獲得權(quán)限的用戶不能傳播權(quán)限
角色
? SQL-99支持角色
? 使用角色進(jìn)行授權(quán)必須先創(chuàng)建角色,將數(shù)據(jù)庫(kù)對(duì)象上的存取權(quán)限授予角色,才能將角色授予用戶,使得用戶擁有角色所具有的所有存取權(quán)限
? SQL-99允許收回賦予角色的存取權(quán),收回授予用戶的角色
? 創(chuàng)建角色使用如下形式的語(yǔ)句:
CREATE ROLE <角色名>
使用角色授權(quán)
? 使用如下語(yǔ)句將一個(gè)或多個(gè)角色授予一個(gè)或多個(gè)用戶/角色:
GRANT <角色列表> TO <用戶/角色列表>
[WITH ADMIN OPTION]
? 其中<角色列表>是一個(gè)或多個(gè)角色名,中間用逗號(hào)隔開(kāi);
? <用戶/角色列表>是一個(gè)或多個(gè)用戶名或角色名,中間用逗號(hào)隔開(kāi)
? 可選項(xiàng)WITH ADMIN OPTION允許獲得角色授權(quán)的用戶轉(zhuǎn)授角色權(quán)限;缺省時(shí)不能轉(zhuǎn)授
強(qiáng)制存取控制
自主存取控制存在的問(wèn)題
例如:用戶A將自己權(quán)限內(nèi)的數(shù)據(jù)存取權(quán)轉(zhuǎn)授給用戶B,本來(lái)只是允許用戶B本人操縱這些數(shù)據(jù)。但是,用戶B復(fù)制了這些數(shù)據(jù),并在未
征得用戶A的同意情況下傳播副本給用戶C,這就可能導(dǎo)致數(shù)據(jù)不安全
? 在自主存取控制中,系統(tǒng)只是根據(jù)用戶對(duì)數(shù)據(jù)庫(kù)對(duì)象的存取權(quán)限來(lái)進(jìn)行安全控制,而沒(méi)有考慮數(shù)據(jù)庫(kù)對(duì)象本身的安全等級(jí)
? 自主存取控制不能阻止副本的非授權(quán)傳播
強(qiáng)制存取控制
? 強(qiáng)制存取控制(Mandatory Access Control,簡(jiǎn)稱MAC)是系統(tǒng)為保證更高程度的安全性所采取的強(qiáng)制存取檢查手段
? MAC是用戶不能直接感知或進(jìn)行控制的,適用于對(duì)數(shù)據(jù)有嚴(yán)格而固定密級(jí)分類的部門(mén),如軍事部門(mén)、政府部門(mén)等
主體與客體
? 在MAC 中,DBMS 所管理的全部實(shí)體被分為主體和客體兩大類:
? 主體是系統(tǒng)中的活動(dòng)實(shí)體,可以是DBMS管理的實(shí)際用戶或代表用戶的各個(gè)進(jìn)程
? 客體是系統(tǒng)中的被動(dòng)實(shí)體,是受主體操縱的對(duì)象。如文件、基本表、索引、視圖等
敏感度標(biāo)記
? 對(duì)于主體和客體,DBMS為它們的每個(gè)實(shí)例值指派一個(gè)敏感度標(biāo)記(Label),敏感度標(biāo)記分成若干級(jí)別
? 絕密(Top Secret)、 機(jī)密(Secret)、 秘密(Confidential)、公開(kāi)(Public)
? 主體的敏感度標(biāo)記稱為許可證級(jí)別(Clearance Level) ? 客體的敏感度標(biāo)記稱為密級(jí)(Classification Level) ? MAC機(jī)制就是通過(guò)對(duì)比主體和客體的敏感度標(biāo)記,確定主體是否能夠存取客體
強(qiáng)制存取控制規(guī)則
? 當(dāng)某一用戶(或某一主體)注冊(cè)進(jìn)入系統(tǒng)時(shí),系統(tǒng)要求他對(duì)任何客體的存取必須遵循下面兩條規(guī)則:
? (1) 僅當(dāng)主體的許可證級(jí)別大于或等于客體的密級(jí)時(shí),該主體才能讀取相應(yīng)的客體
? (2) 僅當(dāng)主體的許可證級(jí)別小于或等于客體的密級(jí)時(shí),該主體才能寫(xiě)相應(yīng)的客體
MAC與DAC
? MAC比DAC具有更高的保護(hù)級(jí)別,因此支持MAC的系統(tǒng)必須支持DAC,由DAC與MAC共同構(gòu)成了DBMS的安全機(jī)制
? 同時(shí)提供DAC和MAC保護(hù)的系統(tǒng)稱為多級(jí)安全系統(tǒng)
? 在多級(jí)安全系統(tǒng)中,系統(tǒng)首先進(jìn)行DAC檢查,對(duì)通過(guò)DAC檢查的允許存取的數(shù)據(jù)對(duì)象,再由系統(tǒng)自動(dòng)進(jìn)行MAC檢查,只有通過(guò)MAC檢查的訪問(wèn)才是允許的
視圖機(jī)制
基于視圖的授權(quán)
? 視圖可以隱蔽一些不希望用戶看到的數(shù)據(jù)
? 可以與授權(quán)結(jié)合,限制用戶只能訪問(wèn)所需要的數(shù)據(jù),實(shí)現(xiàn)一定程度的安全保護(hù)
? 利用視圖實(shí)現(xiàn)安全保護(hù)的基本思想是:
? 首先通過(guò)定義視圖,屏蔽掉一部分需要對(duì)某些用戶保密的數(shù)據(jù)
? 然后,在視圖上定義存取權(quán)限,將對(duì)視圖的訪問(wèn)權(quán)授予這些用戶而不允許他們直接訪問(wèn)定義視圖的基本表
? 需要說(shuō)明的是
? 創(chuàng)建視圖的用戶不一定能夠獲得該視圖上的所有權(quán)限
? 為了有效地阻止用戶透過(guò)視圖越權(quán)訪問(wèn)數(shù)據(jù)庫(kù),創(chuàng)建視圖的用戶在視圖上所獲得的權(quán)限不能超過(guò)他在定義視圖的基本表上所擁有的權(quán)限
例如,假設(shè)用戶U對(duì)基本表T1擁有修改權(quán)(UPDATE),對(duì)基本表T2擁有讀取數(shù)據(jù)權(quán)(SELECT),若用戶U基于T1和T2創(chuàng)建了一個(gè)視圖 V,則用戶U只能查詢(SELECT)該視圖
其他安全性技術(shù)
審計(jì)
? 審計(jì)啟用一個(gè)專門(mén)的審計(jì)日志(Audit Log),自動(dòng)記錄所有用戶對(duì)數(shù)據(jù)庫(kù)的更新操作(插入、刪除和修改)。審計(jì)日志記錄如下信息:
? 操作類型
? 操作終端標(biāo)識(shí)與操作者標(biāo)識(shí)
? 操作日期和時(shí)間
? 操作涉及的數(shù)據(jù)
? 數(shù)據(jù)的舊值和新值
數(shù)據(jù)加密
? 數(shù)據(jù)加密的基本思想:
? 按照一定的加密算法,將原始數(shù)據(jù)(明文)變換成不可直接識(shí)別的格式(密文),使得不知道解密方法的人即使獲得數(shù)據(jù),也不知道數(shù)據(jù)的真實(shí)內(nèi)容,從而達(dá)到保護(hù)數(shù)據(jù)的目的
? 合法用戶使用數(shù)據(jù)時(shí),可以使用解密算法還原數(shù)據(jù)
? 目前商品化的DBMS產(chǎn)品都提供了數(shù)據(jù)加密例行程序,根據(jù)用戶要求自動(dòng)對(duì)存儲(chǔ)和傳輸?shù)臄?shù)據(jù)進(jìn)行加密處理。即使沒(méi)有提供這種加密程序的DBMS,也都會(huì)提供加密接口,以方便用戶使用其他廠商提供的加密程序?qū)?shù)據(jù)進(jìn)行加密
? 數(shù)據(jù)的加密和解密是比較費(fèi)時(shí)的,并且占用大量的系統(tǒng)資源,因此一般只對(duì)高度機(jī)密的數(shù)據(jù)進(jìn)行數(shù)據(jù)加密
加密算法
? 一個(gè)好的加密技術(shù)應(yīng)該具有下面的性質(zhì):
? 對(duì)授權(quán)用戶來(lái)說(shuō),加密數(shù)據(jù)和解密數(shù)據(jù)相對(duì)簡(jiǎn)單
? 加密模式不應(yīng)依賴于算法的保密,而是依賴于算法參數(shù),即依賴于密鑰
? 對(duì)入侵者來(lái)說(shuō),確定密鑰是極其困難的
歡迎關(guān)注微信公眾號(hào):蛋炒番茄
同步更新技術(shù)知識(shí)、資源等等?。?!