《資料庫系統概論》 第4章——資料庫安全性
雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正!
目錄
4.1資料庫安全性概述
●資料庫的安全性:保護資料庫以防止不合法使用所造成的資料洩露、更改或破壞。
4.1.1資料庫的不安全因素
❶非授權使用者對資料庫的惡意存取和破壞
♦一些黑客和犯罪分子在使用者存取資料庫時獵取使用者名稱和口令,假冒合法使用者偷取、修改或者破壞使用者資料。因此必須阻止有損資料庫安全的非法操作,以保證資料免受未經授權的訪問和破壞,資料庫管理系統提供的安全措施主要包括:
▷使用者身份鑑別
▷存取控制
▷檢視
❷資料庫中重要或者敏感的資料被洩露
♦黑客盜取資料庫中的重要資料,使得一些機密資訊被暴漏。以防止資料洩露,資料庫管理系統提供的主要技術有
▷強制存取控制
▷資料加密儲存
▷加密傳輸
♦安全性要求較高的部門提供“審計”功能,通過分析審計日誌,可以對潛在的威脅提前採取措施加以防範,非授權使用者的入侵行為及資訊破壞能夠進行跟蹤。
❸安全環境的脆弱性
♦資料庫的安全性與與計算機系統的安全性(包括計算機硬體、作業系統網路系統)是緊密聯絡的。作業系統安全的脆弱、網路協議安全保障的不足等都會造成資料庫安全性的破壞。
4.1.2安全標準簡介
❶TCSEC標準(Trusted Computer System Evaluation Criteria):可信計算機系統評估準則
❷CC標準(Common Criteria):通用準則
●TCSEC/TDI(Trusted Database Interpretation):標準的基本內容。
從4個方面來描述安全級別劃分的指標:①安全策略、②責任、③保證、④文件
安全級別 |
定義 |
①按系統可靠或可信程度逐漸增高 ②各安全級別之間:偏序向下相容 |
A1 |
驗證設計 |
|
B3 |
安全域 |
|
B2 |
結構化保護 |
|
B1 |
標記安全保護 |
|
C2 |
受控的存取保護 |
|
C1 |
自主安全保護 |
|
D |
最小保護 |
D級:最小保護 |
♦將一切不符合更高標準的系統均歸於D組 ♦典型例子:DOS系統是安全標準為D的作業系統,DOS在安全性方面幾乎沒有什麼專門的機制來保障 |
C1級:自主安全保護 |
♦非常初級的自主安全保護,能夠實現使用者和資料的分離,進行自主存取控制(DAC),保護或限制使用者許可權的傳播 |
C2級:受控的存取保護 |
♦安全產品的最低檔次; ♦提供受控的存取保護,將C1級的DAC進一步細化,以個人身份註冊負責,並實施審計和資源隔離; ♦達到C2級的產品在其名稱中往往不突出“安全”這一特色 |
B1級:標記安全保護 |
♦標記安全保護。“安全”(Security)或“可信的”(Trusted)產品。 ♦對系統的資料加以標記,對標記的主體和客體實施強制存取控制(MAC)、審計等安全機制。 |
B2級:結構化保護 |
♦結構化保護 ♦建立形式化的安全策略模型並對系統內的所有主體和客體實施DAC和MAC。 ♦經過認證的B2級以上的安全系統非常稀少 |
B3級:安全域 |
♦該級的TCB(Trusted Computing Base)必須滿足訪問監控器的要求,審計跟蹤能力更強,並提供系統恢復過程 |
A1級:驗證設計 |
♦驗證設計:即提供B3級保護的同時給出系統的形式化設計說明和驗證以確信各安全保護真正實現 ♦說明:B2以上的系統 ♦還處於理論研究階段; ♦應用多限於一些特殊的部門如軍隊等; ♦美國正在大力發展安全產品,試圖將目前僅限於少數領域應用的B2安全級別下放到商業應用中來,並逐步成為新的商業標準。 |
4.2資料庫安全性控制
❶非法使用資料庫的情況
♦編寫合法程式繞過DBMS及其授權機制
♦直接或編寫應用程式執行非授權操作
♦通過多次合法查詢資料庫從中推匯出一些保密資料(比如我要求x,y,如果直接查詢x與y的值是非法的,而x+y的值查詢合法,x-y的值查詢合法,我們就可以通過查詢這兩個值求出x與y的值)
❷計算機系統中,安全措施是一級一級層層設定
4.2.1使用者身份鑑別
●系統提供的最外層安全保護措施:
♦由系統提供一定的方式讓使用者標示自己的名字或者身份,每次使用者要求進入系統時,由系統進行核對,通過鑑定後才提供機器使用權。
♦使用者標誌(UID)(大概等於我們的登入賬號)
♦口令(系統核對口令以鑑別使用者身份,大概就是我們的登入密碼)
♦使用者名稱和口令易被竊取
❶靜態口令鑑別
♦靜態口令一般由使用者自己設定,鑑別時只要按要求輸入正確的口令,系統將允許使用者使用資料庫管理系統。
♦方式簡單,但是容易被攻擊,安全性較低。
❷動態口令鑑別
♦口令是動態變化的,每次鑑別時均需要使用動態產生的新口令登入資料庫管理系統,即採用的一次一加密的方法,常用的方法如簡訊密碼和動態口令牌的方法
♦與靜態口令牌相比,這種認證方式增加了口令被竊取或破解的難度,安全性相對高一些
❸生物特徵鑑別
♦通過生物特徵進行認證的技術,其中生物特徵是 指的生物體唯一具有的,可測量的、識別和驗證的穩定生物特徵,如指紋、虹膜和掌紋等。這種方式通過採用影象處理和模式識別等技術實現了基於生物特徵的認證。(指紋支付)
♦安全性較高
❹智慧卡技術
♦智慧卡是一種不可複製的硬體,內建積體電路的晶片,具有硬體加密功能。智慧卡由使用者隨時攜帶,登入資料庫管理系統時將智慧卡插入專用的讀卡器進行身份驗證。
♦每次從智慧卡中讀取的資料是靜態的,因此通過記憶體掃描或網路監聽等技術還是可能擷取到使用者的身份驗證資訊,存在安全隱患,實際應用中一般採用個人身份識別碼和智慧卡相結合的方式。
4.2.2存取控制
●資料庫安全最重要的一點就是確保只授權給有資格的使用者訪問資料庫,同時使得所有未授權的人員無法接近資料,這主要就是通過資料庫系統的存取控制機制實現的。
●使用者許可權定義和合法權檢查機制一起組成了DBMS的安全子系統
●可以看到我這邊寫出了英文,為什麼要寫英文呢?因為老師說如果出“名詞解釋”題的話,要連著英文一起寫!
4.2.3自主存取控制方法
●通過 SQL 的 GRANT. 語句和 REVOKE 語句實現
●使用者許可權是通過兩個要素組成的:資料庫物件和操作型別。
●定義使用者存取許可權:定義使用者可以在哪些資料庫物件上進行哪些型別的操作
●定義存取許可權稱為授權(authorization)
●存取控制的物件不僅有資料本身(基本表中的資料、屬性列上的資料),還有資料庫模式(包括資料庫、基本表、檢視和索引的建立等)。
4.2.4授權:授予與收回
●GRANT語句向用戶授予許可權,REVOKE語句收回已經授予的許可權
❶GRANT <許可權> [,<許可權>]...
ON <物件型別> <物件名>]
TO <使用者> [,<使用者>]...
[WITH GRANT OPTION];
●誰發出GRANT:
♦DBA
♦資料庫物件建立者(即屬主Owner)
♦擁有該許可權的使用者
●接受許可權的使用者:
♦一個或多個具體使用者
♦PUBLIC(全體使用者)
●WITH GRANT OPTION:指定了這個子句,就表示獲得這個許可權的使用者可以把獲得的許可權再傳播給他人,反之只能自己使用。
●不允許迴圈授權。
●訪問資料的許可權 |
SELECT(讀取許可權):允許讀資料,但不能修改資料 |
INSERT(插入許可權):允許插入一條新的資料,但不能修改已有資料 |
UPDATE(修改許可權):允許修改資料,但不能刪除資料 |
DELETE(刪除許可權):允許刪除資料 |
●修改資料庫模式(SQL92標準)的許可權 |
Index(索引許可權):允許建立或刪除索引 |
Create(建立許可權):允許建立新的關係表 |
Alter(修改許可權):允許對關係表中的屬性進行增加、刪除 |
Drop(刪除許可權):允許刪除關係表 |
例4.1:把查詢Student表許可權授給使用者U1(GRANT操作)
GRANT SELECT
ON TABLE student
TO U1;
例4.2:把對Student表和Course表的全部操作許可權授予使用者U2和U3(ALL PRIVILEGES)
GRANT ALL PRIVILEGES
ON TABLE student,course
TO U2,U3;
例4.3:把對錶SC的查詢許可權授予所有使用者(PUBLIC)
GRANT SELECT
ON TABLE sc
TO PUBLIC;
例4.4:把查詢Student表和修改學生學號的許可權授給使用者U4
GRANT UPDATE(SNO),SELECT
ON TABLE student
TO U4;
例4.5:把對錶SC的INSERT許可權授予U5使用者,並允許他將此許可權授予其他使用者(WITH GRANT OPTION)
GRANT INSERT
ON TABLE sc
TO U5
WITH GRANT OPTION;
例4.6:將U5的許可權授權給U6(是U5執行的授權操作!)
GRANT INSERT
ON TABLE sc
TO U6
WITH GRANT OPTION;
一頓操作猛如虎後:
❷REVOKE <許可權>[,<許可權>]...
ON <物件型別> <物件名>]
FROM <使用者>[,<使用者>]...;
●DBA:擁有所有物件的所有許可權
♦不同的許可權授予不同的使用者
●使用者:擁有自己建立的物件的全部的操作許可權
♦GRANT:授予其他使用者
●被授權的使用者
♦“繼續授權”許可:再授予
●所有授予出去的權力在必要時又都可用REVOKE語句收回
例4.8:把使用者U4修改學生學號的許可權收回
REVOKE UPDATE(SNO)
ON TABLE student
FROM U4;
例4.9:收回所有使用者對錶SC的查詢許可權
REVOKE SELECT
ON TABLE sc
FROM PUBLIC;
例4.10:把使用者U5對SC表的INSERT許可權被收回(級聯CASCADE)
REVOKE INSERT
ON TABLE sc
FROM U5 CASCADE;/*CASCADE級聯收回了U6的INSERT許可權*/
又一頓操作猛如虎後:
❸ 建立資料庫模式的許可權
●對建立資料庫模式一類的資料庫物件的授權由DBA在建立使用者時實現
CREATE USER語句格式
CREATE USER <username>
[WITH][DBA | RESOURCE | CONNECT]
●只有系統的超級使用者才有權建立一個新的資料庫使用者
●具有CONNECT特權的使用者
♦不能建立新使用者,不能建立模式和基本表,可以與資料庫連線,能根據授權進行資料庫中資料的查詢、更新。
●具有RESOURCE特權的使用者
♦除具有CONNECT特權外,還能建立表、索引,修改表結構,能將自己建立的資料物件的訪問權授予其他使用者或從其他使用者那兒收回,對自己建立的資料物件能進行跟蹤審查。
●具有DBA特權的使用者
♦能進行所有的資料庫操作
4.2.5資料庫角色
●資料庫角色:被命名的一組與資料庫操作相關的許可權。
♦角色是許可權的集合
♦可以為一組具有相同許可權的使用者建立一個角色
♦使用角色來管理資料庫許可權可以簡化授權的過程
(通俗理解:就是把幾個許可權糅合在一起,給它一個名字,以後要把這幾個許可權一起給某個人的時候就可以直接通過名字給了)
❶角色的建立:
CREATE ROLE <角色名>
❷對角色授權:
GRANT <許可權>[,<許可權>]…
ON <物件型別>物件名
TO <角色>[,<角色>]…
❸將一個角色授予其他的角色或使用者
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<使用者1>]…
[WITH ADMIN OPTION]
❹角色許可權的收回
REVOKE <許可權>[,<許可權>]…
ON <物件型別> <物件名>
FROM <角色>[,<角色>]…
例4.11:通過角色來實現將一組許可權授予一個使用者(注意過程)
-- ①首先建立一個角色R1
CREATE ROLE R1;
-- ②然後使用GRANT語句,使角色R1擁有Student表的SELECT、UPDATE、INSERT許可權
GRANT SELECT,UPDATE,INSERT
ON TABLE student
TO R1;
-- ③將這個角色授予王平、張明、趙玲,使他們具有角色R1所包含的全部許可權。
GRANT R1
TO 王平,張明,趙玲;
-- ④當然也可以一次性通過R1來回收王平的這三個許可權
REVOKE R1
FROM 王平;
例4.12:角色的許可權修改,使角色R1在原來的基礎上增加了對student表的delete許可權(此時所有擁有R1角色的使用者都將擁有delete許可權)
GRANT DELETE
ON TABLE student
TO R1;
例4.13:使R1減少了select 許可權
REVOKE DELETE
ON TABLE student
FROM R1;
4.2.6強制存取控制方法
●自主存取控制缺點
♦可能存在資料的“無意洩露”
♦原因:這種機制僅僅通過對資料的存取許可權來進行安全控制,而資料本身並無安全性標記
♦解決:對系統控制下的所有主客體實施強制存取控制策略
●強制存取控制(MAC)
♦保證更高程度的安全性
♦使用者不能直接感知或進行控制
♦使用與對資料由嚴格而固定密級分類的部門(軍事部門、行政部門)
●實體:系統中的活動實體
♦DBMS(資料庫管理系統)所管理的實際使用者
♦代表使用者的各程序
●客體:是系統中的被動實體,是受主體操縱的物件
♦檔案、基本表、索引、檢視
●敏感度標記(Lable)
♦絕密(Top Secret)
♦機密(Secret)
♦可信(Confidential)
♦公開(Public)
♦主體的敏感度標記稱為許可證級別(Clearance Level)
♦客體的敏感度標記稱為密級(Classification Level)
♦當主體的許可證級別等於客體的密級,主體可以更新相應客體
●強制存取控制規則
♦僅當 主體的許可證級別 ≥ 客體的密級時,該主體才能 讀取 相應的客體
♦僅當 主體的許可證級別 = 客體的密級時,該主體才能 寫 相應的客體
●修正規則
♦主體的許可證級別 <= 客體的密級 à主體能 寫 客體
●規則的共同點
♦禁止了擁有高許可證級別的主體更新低密級的資料物件。
♦強制存取控制是對資料本身進行密級標記,無論資料如何複製,標記與資料是一個不可分的整體,只有符合密級要求的使用者才可以操作資料,從而提供了更高級別的安全性。
●DAC與MAC共同構成DBMS的安全機制
●實現MAC時要首先實現DAC
♦原因:較高安全性級別提供的安全保護 要包含 較低級別的所有保護
♦先進行DAC檢查,通過DAC檢查的資料物件再由系統進行MAC檢查,只有通過MAC檢查的資料物件方可存取
4.3檢視機制
●把要保密的資料對無權存取的使用者隱藏起來,對資料提供一定程度的安全保護
♦主要功能是提供資料獨立性,無法完全滿足要求
♦間接實現了支援存取謂詞的使用者許可權定義
例4.14:建立軟體學院學生的檢視,把對該檢視的SELECT許可權授於王平,把該檢視上的所有操作許可權授於張明
-- ①建立檢視CS_Student
CREATE VIEW CS_Student
AS
SELECT *
FROM student
WHERE SDEPT='CS';
-- 王平老師只能檢索計算機系的學生
GRANT SELECT
ON CS_Student
TO 王平;
-- 系主任具有檢索和增刪計算機系學生資訊的所有許可權
GRANT ALL PRIVILEGES
ON CS_Student
TO 張明;
*4.4審計(不重要)
●審計功能:資料庫管理系統達到C2以上安全級別必不可少的一項指標
●把使用者對資料庫的所有操作自動記錄下來放入審計日記(audit log)中,審計員可以利用審計日誌監控資料庫的各種行為,找出非法資料的人、時間和內容,對潛在的威脅提前採取措施加以防範。
●審計通常很費時間和空間,所以資料庫管理系統往往都將審計設定為可選特徵,允許資料庫管理員根據具體應用對安全性的要求靈活地開啟或者關閉審計功能。
●可審計事件:伺服器事件、系統許可權、語句事件和模式物件事件,還包括使用者鑑別、自主訪問控制和強制存取控制
♦伺服器事件:審計資料庫伺服器發生的事件,包括資料庫伺服器的啟動、停止,資料庫伺服器配置檔案的重新載入;
♦系統許可權:對系統擁有的結構或者模式物件進行操作的審計要求該操作是通過系統許可權獲得的;
♦語句事件:對SQL語句的審計;
♦模式物件事件:對特定模式物件上進行的SELECT或者DML操作的審計,模式物件包括表、檢視、儲存過程、函式等,但不包括依附於表的索引、約束、觸發器、分割槽表等。
●AUDIT語句:設計審計功能
●NOAUDIT語句:取消審計功能
例4.15:對修改SC表結構或修改SC表資料的操作進行審計
AUDIT ALTER,UPDATE
ON SC;
例4.16:取消對SC表的一切審計
NOAUDIT ALTER,UPDATE
ON SC;
*4.5資料加密(不重要)
4.6其他安全性保護
●推理控制(inference control)處理是強制存取控制未解決的問題。例如,利用列的函式依賴關係,使用者能從低安全等級資訊推匯出起無權訪問的高安全等級資訊
(之前提到過的例子,要是想知道x與y,但是不能直接查詢,而x+y與x-y的值可以查詢,就可以根據這兩個值推理出x與y(解方程!))
●統計資料庫
♦允許使用者查詢聚集型別的資訊(如合計、平均值等)
♦不允許查詢單個記錄資訊
♦統計資料庫中特殊的安全性問題
●隱蔽的資訊通道
♦能從合法的查詢中推匯出不合法的資訊
規則1:任何查詢至少要涉及N(N足夠大)個以上的記錄
規則2:任意兩個查詢的相交資料項不能超過M個
規則3:任一使用者的查詢次數不能超過1+(N-2)/M
●資料庫安全機制的設計目標:
試圖破壞安全的人所花費的代價 >> 得到的利益