文章目錄
0.思維導圖
1.數據庫安全性概述
(1)爲什麼要研究數據庫的安全性?
問題的提出:
- 數據庫的一大特點是數據可以共享
- 數據共享必然帶來數據庫的安全性問題
數據庫系統中的數據共享不能是無條件的共享
- 例: 軍事祕密、國家機密、新產品實驗數據、
市場需求分析、市場營銷策略、銷售計劃、
客戶檔案、醫療檔案、銀行儲蓄數據
非法使用數據庫的情況:
- 編寫合法程序繞過DBMS及其授權機制(黑客等)
- 直接或編寫應用程序執行非授權操作(黑客等)
- 通過多次合法查詢數據庫從中推導出一些保密數據(黑客等)
(2)安全標準簡介
① TCSEC/TDI標準的基本內容
- TCSEC/TDI,從四個方面來描述安全性級別劃分的指標
安全策略
責任
保證
文檔
② TCSEC/TDI安全級別劃分
-
按系統可靠或可信程度逐漸增高
-
各安全級別之間:偏序向下兼容
B2以上的系統:
- 還處於理論研究階段
- 應用多限於一些特殊的部門,如軍隊等
- 美國正在大力發展安全產品,試圖將目前僅限於少數領域應用的B2安全級別下放到商業應用中來,並逐步成爲新的商業標準
2.數據庫安全性控制概述
- 用戶要求進入計算機系統時,系統首先根據輸入的用戶標識進行用戶身份鑑定,只有合法的用戶才准許進入計算機系統;對已進入系統的用戶,數據庫管理系統還要進行存取控制,只允許用戶執行合法操作;操作系統也會有自己的保護措施;數據最後還可以以密碼形式存儲到數據庫中(例如md5加密密碼等信息)。
數據庫安全性控制的常用方法:
- 用戶標識和鑑定
- 存取控制
- 視圖
- 審計
- 密碼存儲
3.數據庫安全性控制
(1)用戶標識與鑑別(Identification & Authentication)
是系統提供的最外層安全保護措施
- 用戶標識
每個用戶標識由用戶名(user name)和用戶標識號(UID)兩部分組成。
UID在系統的整個生命週期內是唯–的。系統內部記錄着所有合法用戶的標識 - 口令
系統覈對口令以鑑別用戶身份 (口令可理解爲密碼) - 用戶標識和口令易被竊取
每個用戶預先約定好一個計算過程或者函數
常用的用戶身份鑑別方法有以下幾種:
① 靜態口令鑑別
- 這種方式是當前常用的鑑別方法。
靜態口令一般由用戶自己設定,鑑別時只要按要求輸入正確的口令,系統將允許用戶使用數據庫管理系統。
- 這些口令是靜態不變的,在實際應用中,用戶常常用自己的生日、電話、簡單易記的數字等內容作爲口令,很容易被破解。而一旦被破解,非法用戶就可以冒充該用戶使用數據庫。
- 這種方式雖然簡單,但容易被攻擊,安全性較低。
② 動態口令鑑別
- 它是目前較爲安全的鑑別方式。
- 這種方式的口令是動態變化的,每次鑑別時均需使用動態產生的新口令登錄數據庫管理系統,即採用一次一密的方法。
常用的方式如短信密碼和動態令牌方式,每次鑑別時要求用戶使用通過短信或令牌等途徑獲取的新口令登錄數據庫管理系統。
- 與靜態口令鑑別相比,這種認證方式增加了口令被竊取或破解的難度,安全性相對高一些。
③ 生物特徵鑑別
- 它是一種通過生物特徵進行認證的技術,其中,生物特徵是指生物體唯一具有的,可測量、識別和驗證的穩定生物特徵,如
指紋、虹膜和掌紋等
。 - 這種方式通過採用圖像處理和模式識別等技術實現了基於生物特徵的認證,- 與傳統的口令鑑別相比,無疑產生了質的飛躍,安全性較高。
④ 智能卡鑑別
- 智能卡是一種不可複製的硬件,內置集成電路的芯片,具有硬件加密功能。
智能卡由用戶隨身攜帶,登錄數據庫管理系統時用戶將智能卡插入專用的讀卡器進行身份驗證。
- 由於每次從智能卡中讀取的數據是靜態的,通過內存掃描或網絡監聽等技術還是可能截取到用戶的身份驗證信息,存在安全隱患。
- 因此,實際應用中一般採用
個人身份識別碼(PIN)和智能卡
相結合的方式。這樣,即使PIN或智能卡中有一種被竊取,用戶身份仍不會被冒充。
(2)存取控制
- 數據庫安全最重要的一點就是確保只授權給有資格的用戶訪問數據庫的權限,同時令所有未被授權的人員無法接近數據,這
主要通過數據庫系統的存取控制機制實現。
① 存取控制機制組成:
-
定義用戶權限
,並將用戶權限登記到數據字典中;
用戶對某一數據對象的操作權力稱爲權限。 -
合法權限檢查
,每當用戶發出存取數據庫的操作請求後(請求一般應包括操作類型、操作對象和操作用戶等信息),數據庫管理系統查找數據字典,根據安全規則進行合法權限檢查
,若用戶的操作請求超出了定義的權限,系統將拒絕執行此操作。
定義用戶權限
和合法權限檢查機制
一起組成了數據庫管理系統的存取控制子系統
。
C2級
的數據庫管理系統支持自主存取控制
( Discretionary Access Control, DAC),B1級
的數據庫管理系統支持強制存取控制
( Mandatory Access Control, MAC)。
這兩類方法的簡單定義是:
- (1)在
自主存取控制
方法中,用戶對於不同的數據庫對象有不同的存取權限,不同的用戶對同一對象也有不同的權限,而且用戶還可將其擁有的存取權限轉授給其他用戶。因此自主存取控制非常靈活。 - (2)在
強制存取控制
方法中,每一個 數據庫對象被標以一定的密級,每一個用戶也被授予某一個級別的許可證。對於任意一個對象, 只有具有合法許可證的用戶纔可以存取。強制存取控制因此相對比較嚴格。
(3)自動存取控制方法—DAC: Discretionary Access Control
- 通過 SQL 的
GRANT
語句和REVOKE
語句實現 - 用戶權限組成
數據對象
操作類型
- 定義用戶存取權限:定義用戶可以在哪些數據庫對象上進行哪些類型的操作
定義存取權限稱爲授權
① 授權與回收—針對用戶
1️⃣ 授權—GRANT
GRANT語句的一般格式:
GRANT <權限>[,<權限>]...
[ON <對象類型> <對象名>]
TO <用戶>[,<用戶>]...
[WITH GRANT OPTION];
語義:將對指定操作對象的指定操作權限授予指定的用戶
發出GRANT:
- DBA
- 數據庫對象創建者(即屬主Owner)
- 擁有該權限的用戶
按受權限的用戶:
- 一個或多個具體用戶
- PUBLIC(全體用戶)
WITH GRANT OPTION子句:
- 指定:可以再授予
- 沒有指定:不能傳播
不允許循環授權:
[例1] 把查詢Student表權限授給用戶U1
GRANT SELECT
ON TABLE Student
TO U1;
舉個例子而已,不同數據庫請參考相關文檔,先打基礎。有個印象,知道有這麼個東西,其實很多數據庫管理系統已經將這些封裝好了,簡潔漂亮的UI,靈活的操作,基本不會用到語句來寫。話不多說,直接上圖:
[例2] 把對Student表和Course表的全部權限授予用戶U2和U3
GRANT ALL PRIVILIGES
ON TABLE Student, Course
TO U2, U3;
[例3] 把對錶SC的查詢權限授予所有用戶
GRANT SELECT
ON TABLE SC
TO PUBLIC;
[例4] 把查詢Student表和修改學生學號的權限授給用戶U4
對屬性列的授權時必須明確指出相應屬性列名
GRANT UPDATE(Sno), SELECT
ON TABLE Student
TO U4;
[例5] 把對錶SC的INSERT權限授予U5用戶,並允許他再將此權限授予其他用戶
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
執行例5後,U5不僅擁有了對錶SC的INSERT權限,
還可以傳播此權限:
[例6]
GRANT INSERT ON TABLE SC TO U6
WITH GRANT OPTION;
同樣,U6還可以將此權限授予U7:
[例7]
GRANT INSERT ON TABLE SC TO U7;
但U7不能再傳播此權限,因爲沒有寫這條語句WITH GRANT OPTION
。
2️⃣ 回收—REVOKE
授予的權限可以由DBA或其他授權者用REVOKE語句收回
REVOKE語句的一般格式爲:
REVOKE <權限>[,<權限>]...
[ON <對象類型> <對象名>]
FROM <用戶>[,<用戶>]...;
[例8] 把用戶U4修改學生學號的權限收回
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4;
[例9] 收回所有用戶對錶SC的查詢權限
REVOKE SELECT
ON TABLE SC
FROM PUBLIC;
[例10] 把用戶U5對SC表的INSERT權限收回
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE ;
將用戶U5的INSERT權限收回的時候必須級聯(CASCADE)收回 系統只收回直接或間接從U5處獲得的權限
3️⃣ 小結:SQL靈活的授權機制
- DBA:
擁有所有對象的所有權限
不同的權限授予不同的用戶 - 用戶:擁有自己建立的對象的全部的操作權限
GRANT:授予其他用戶 - 被授權的用戶
“繼續授權”(WITH GRANT OPTION)許可:可以再授予給其它用戶 - 所有授予出去的權力在必要時又都可用REVOKE語句收回
4️⃣ 創建數據庫模式的權限
DBA在創建用戶時實現
CREATE USER語句格式
CREATE USER <username>
[WITH][DBA | RESOURCE | CONNECT]
② 數據庫角色—針對角色
數據庫角色:被命名的一組與數據庫操作相關的權限
- 角色是權限的集合 ,
結合我剛剛上面截得黑色背景圖片瞭解
- 可以爲一組具有相同權限的用戶創建一個角色
- 簡化授權的過程
1️⃣ 角色的創建
CREATE ROLE <角色名>
2️⃣ 給角色授權
GRANT <權限>[,<權限>]…
ON <對象類型>對象名
TO <角色>[,<角色>]…
3️⃣ 將一個角色授予其他的角色或用戶
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用戶1>]…
[WITH ADMIN OPTION]
4️⃣ 角色權限的收回
REVOKE <權限>[,<權限>]…
ON <對象類型> <對象名>
FROM <角色>[,<角色>]…
[例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來回收王平的這3個權限
REVOKE R1
FROM 王平;
[例12] 角色的權限修改
GRANT DELETE
ON TABLE Student
TO R1
[例13] 角色權限的收回
REVOKE SELECT
ON TABLE Student
FROM R1;
(4)強制存取控制方法—MAC: Mandatory Access Control
自主存取控制缺點:
- 可能存在數據的“無意泄露”
- 原因:這種機制僅僅通過對數據的存取權限來進行安全控制,而數據本身並無安全性標記
- 解決:對系統控制下的所有主客體實施強制存取控制策略
強制存取控制(MAC):
- 保證更高程度的安全性
- 用戶能不能直接感知或進行控制,因爲對數據進行了加密
- 適用於對數據有嚴格而固定密級分類的部門
*軍事部門
*政府部門
在強制存取控制中,數據庫管理系統所管理的全部實體被分爲主體和客體兩大類。
-
主體
是系統中的活動實體
DBMS所管理的實際用戶
代表用戶的各進程 -
客體
是系統中的被動實體,是受主體操縱的
文件
基表
索引
視圖
對於主體和客體,數據庫管理系統爲它們每個實例(值)指派一個敏感度標記(label)。
敏感度標記(Label)分爲若干個級別:
- 絕密(Top Secret)
- 機密(Secret)
- 可信(Confidential)
- 公開(Public)
主體的敏感度標記稱爲許可證級別
(Clearance Level)客體的敏感度標記稱爲密級
(Classification Level)- 密級:T>=S>=C>=P
強制存取控制規則:
- (1)僅當主體的許可證級別
大於或等於客體
的密級時,該主體才能讀取
相應的客體 - (2)僅當主體的許可證級別
等於
客體的密級時,該主體才能寫
相應的客體 - 修正規則
主體的許可證級別 <=客體的密級→ 主體能寫客體
規則的共同點:
禁止
了擁有高許可證級別的主體更新
低密級的數據對象
(5)DAC與MAC共同構成DBMS的安全機制
- 實現MAC時要首先實現DAC
原因:較高安全性級別提供的安全保護要包含較低級別的所有保護 - 先進行DAC檢查,通過DAC檢查的數據對象再由系統進行MAC檢查,只有通過MAC檢查的數據對象方可存取。
4.視圖機制
把要保密的數據對無權存取這些數據的用戶隱藏起來,對數據提供一定程度的安全保護
- 主要功能是提供數據獨立性,無法完全滿足要求
- 間接實現了支持存取謂詞的用戶權限定義
[例14]建立計算機系學生的視圖,把對該視圖的SELECT權限授於王平,把該視圖上的所有操作權限授於張明
先建立計算機系學生的視圖CS_Student
CREATE VIEW CS_Student AS
SELECT *
FROM Student
WHERE Sdept='CS';
在視圖上進一步定義存取權限:
GRANT SELECT
ON CS_Student
TO 王平 ;
GRANT ALL PRIVILIGES
ON CS_Student
TO 張明;
5.審計(Audit) —日誌
什麼是審計:
審計日誌(Audit Log)
;
將用戶對數據庫的所有操作記錄在上面- DBA利用審計日誌
找出非法存取數據的人、時間和內容 - C2以上安全級別的DBMS必須具有
審計分爲:
用戶級審計
針對自己創建的數據庫表或視圖進行審計 ;
記錄所有用戶對這些表或視圖的一切成功和(或)不成功的訪問要求以及各種類型的SQL操作 ;系統級審計
DBA設置 ;
監測成功或失敗的登錄要求 ;
監測GRANT和REVOKE操作以及其他數據庫級權限下的操作;
AUDIT語句:設置審計功能
NOAUDIT語句:取消審計功能
[例15]對修改SC表結構或修改SC表數據的操作進行審計
AUDIT ALTER,UPDATE
ON SC;
[例16]取消對SC表的一切審計
NOAUDIT ALTER,UPDATE
ON SC;
6.數據加密
-
數據加密
防止數據庫中數據在存儲
和傳輸
中失密的有效手段 -
數據加密分爲
存儲加密
和傳輸加密
(1)存儲加密
- 對於存儲加密,一般提供
透明和非透明
兩種存儲加密方式。
透明
存儲加密是內核級加密保護
方式,對用戶完全透明
非透明
存儲加密則是通過多個加密函數
實現的。 透明存儲加密
是數據在寫到磁盤時對數據進行加密,授權用戶讀取數據時再對其進行解密。由於數據加密對用戶透明,數據庫的應用程序不需要做任何修改,只需在創建表語句中說明需加密的字段即可。當對加密數據進行增、刪、改、查詢操作時,數據庫管理系統將自動對數據進行加、解密工作。基於數據庫內核的數據存儲加密、解密方法性能較好,安全完備性較高。
(2)傳輸加密
- 在客戶/服務器結構中,數據庫用戶與服務器之間若採用明文方式傳輸數據,容易被網絡惡意用戶截獲或篡改,存在安全隱患。因此,爲保證二者之間的安全數據交換,數據庫管理系統提供了傳輸加密功能。
- 常用的傳輸加密方式如
鏈路加密和端到端加密
。
① 鏈路加密
- 鏈路加密對傳輸數據在鏈路層進行加密,它的傳輸信息由報頭和報文兩部分組成,前者是路由選擇信息,而後者是傳送的數據信息。這種方式對報文和報頭均加密。
② 端到端加密
- 端到端加密對傳輸數據在發送端加密,接收端解密。它只加密報文,不加密報頭。與鏈路加密相比,它只在發送端和接收端需要密碼設備,而中間節點不需要密碼設備,因此它所需密碼設備數量相對較少。但這種方式不加密報頭,從而容易被非法監聽者發現並從中獲取敏感信息。
7.統計數據庫安全性
統計數據庫
允許用戶查詢聚集類型的信息(如合計、平均值等)
不允許查詢單個記錄信息
統計數據庫中特殊的安全性問題:
隱蔽的信息通道
能從合法的查詢中推導出不合法的信息
統計數據庫安全性規則:
-
規則1:任何查詢至少要涉及N(N足夠大)個以上的記錄
-
規則2:任意兩個查詢的相交數據項不能超過M個
-
規則3:任一用戶的查詢次數不能超過1+(N-2)/M
數據庫安全機制的設計目標:
試圖破壞安全的人所花費的代價 >> 得到的利益