一、計算機安全性概論
(一)核心概念
- 數據庫安全性:保護數據庫免受非法使用導致的數據泄露、更改或破壞,是衡量數據庫系統的關鍵指標之一,與計算機系統安全性相互關聯。
- 計算機系統安全性:通過各類安全保護措施,保障計算機硬件、軟件及數據安全,防止因偶然或惡意因素使系統受損、數據遭篡改或泄露。包含技術安全、管理安全和政策法律三個層面。
(二)安全標準
-
TCSEC/TDI 標準
(美國國防部)
- 目的:為評估計算機系統敏感信息安全操作的可信度提供標準,為制造商設計滿足敏感應用安全要求的產品提供指導。
- 安全級別(從低到高):D(最小保護)、C1(自主安全保護)、C2(受控存取保護)、B1(標記安全保護)、B2(結構化保護)、B3(安全域)、A1(驗證設計)。
- 評估指標:安全策略(R1)、責任(R2)、保證(R3)、文檔(R4)。
-
CC 標準
(通用準則)
- 結構:將信息產品安全要求分為安全功能要求(規范安全行為)和安全保證要求(解決功能實施問題),均采用 “類 - 子類 - 組件” 結構描述。
- 評估保證級(EAL)與 TCSEC 對應關系:EAL2 對應 C1,EAL3 對應 C2,EAL4 對應 B1,EAL5 對應 B2,EAL6 對應 B3,EAL7 對應 A1。
二、數據庫安全控制措施
(一)用戶標識與鑒別
- 作用:作為系統最外層安全保護,通過驗證用戶身份(如用戶名 / 口令)控制對系統的訪問。
(二)存取控制
- 核心機制
- 定義用戶權限:明確用戶在哪些數據對象上可進行哪些操作(如查詢、插入、更新等),并登記到數據字典。
- 合法權限檢查:DBMS 根據數據字典中的權限定義,對用戶操作請求進行合法性驗證,拒絕越權操作。
- 兩種控制方式
- 自主存取控制(DAC)
- 特點:用戶對不同數據對象有不同權限,可自主將權限授予其他用戶,靈活性高。
- 實現方式:通過 SQL 的
GRANT
(授權)和REVOKE
(收回權限)語句實現。 - 權限要素:數據對象(如表、屬性列、視圖等)和操作類型(如
SELECT
、INSERT
、UPDATE
等)。 - 示例
- 授權:
GRANT SELECT ON Student TO U1;
(授予 U1 查詢 Student 表的權限)。 - 收回權限:
REVOKE UPDATE(Sno) ON Student FROM U4;
(收回 U4 修改 Student 表中學號的權限)。
- 授權:
- 強制存取控制(MAC)
- 適用場景:對數據密級分類嚴格的場景(如軍事、金融),由系統自動控制,用戶無法直接干預。
- 核心概念
- 主體與客體:主體是活動實體(如用戶、進程),客體是被動實體(如數據對象)。
- 敏感度標記:主體的標記為許可證級別,客體的標記為密級(如絕密、機密、公開等)。
- 存取規則
- 讀取規則:主體許可證級別≥客體密級,方可讀取客體。
- 寫入規則:主體許可證級別 = 客體密級,方可寫入客體。
- 與 DAC 的關系:二者結合構成 DBMS 安全機制,先進行 DAC 檢查,再進行 MAC 檢查。
- 自主存取控制(DAC)
(三)視圖機制
-
作用:通過定義視圖限制用戶訪問范圍,DBA 為不同用戶創建特定視圖并授權,用戶只能操作視圖內的數據。
-
示例
CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS'; -- 創建計算機系學生視圖 GRANT SELECT ON CS_Student TO 王平; -- 授予王平查詢該視圖的權限
(四)審計
-
作用:記錄用戶對數據庫的所有操作(如
ALTER
、UPDATE
等),存入審計日志,用于安全追溯、合規檢查和監控潛在威脅。 -
特點:需消耗較多時間和空間,通常作為可選功能。
-
示例
AUDIT ALTER,UPDATE ON SC; -- 開啟對SC表的ALTER和UPDATE操作審計 NOAUDIT ALL ON SC; -- 關閉對SC表的所有審計
(五)數據加密
- 基本思想:通過算法將明文轉換為密文,防止未授權用戶獲取數據內容。
- 主要方法
- 替換法:用密鑰將明文字符轉換為密文字符。
- 置換法:重新排列明文字符順序。
- DES 標準:結合替換法和置換法的官方加密標準。
三、其他安全要點
(一)數據庫角色管理
-
角色定義:一組與數據庫操作相關的權限集合,可批量管理具有相同權限的用戶。
-
操作示例
CREATE ROLE R1; -- 創建角色R1 GRANT SELECT, UPDATE, INSERT ON Student TO R1; -- 為R1授權 GRANT R1 TO 王平, 張明, 趙玲; -- 將角色授予用戶
(二)統計數據庫安全性
- 問題:用戶可能通過合法統計查詢間接獲取敏感個體數據(如通過兩次工資總額查詢推斷他人工資)。
- 解決原則:確保破壞安全的代價遠高于所獲利益,如限制查詢集合大小、增加干擾數據等。
WITH ADMIN OPTION
是數據庫中用于 角色或權限管理 的關鍵字,主要作用是讓被授權者(用戶或角色)擁有再授權的能力,即可以將自己擁有的角色或權限進一步授予其他用戶或角色。以下是詳細說明:
(三)角色授權
-
角色授權場景
當向某個用戶授予角色時使用WITH ADMIN OPTION
,該用戶不僅擁有該角色的所有權限,還能將這個角色 授予其他用戶或角色,甚至可以收回其他用戶的該角色權限。
示例:-- 創建角色 R1 CREATE ROLE R1; -- 授予用戶 U1 角色 R1,并允許其再授權 GRANT R1 TO U1 WITH ADMIN OPTION;
- U1 獲得 R1 角色的所有權限。
- U1 可以執行
GRANT R1 TO U2;
將 R1 授予 U2,或執行REVOKE R1 FROM U2;
收回 U2 的 R1 角色。
-
權限授權場景
在部分數據庫(如 Oracle)中,對 系統權限 授權時使用WITH ADMIN OPTION
,允許被授權者將權限再授予他人。
示例(Oracle):-- 授予用戶 U1 創建表的權限,并允許其再授權 GRANT CREATE TABLE TO U1 WITH ADMIN OPTION;
- U1 可執行
GRANT CREATE TABLE TO U2;
將權限授予 U2。
- U1 可執行
與 WITH GRANT OPTION 的區別
關鍵字 | 適用場景 | 授權對象 | 再授權范圍 |
---|---|---|---|
WITH ADMIN OPTION | 角色授權或系統權限授權 | 角色或系統權限 | 可授予用戶或角色,可遞歸授權 |
WITH GRANT OPTION | 對象權限授權(如表、視圖) | 對象權限(如 SELECT、INSERT、UPDATA) | 只能授予其他用戶,不可授予角色 |
示例對比:
- 角色授權:
GRANT R1 TO U1 WITH ADMIN OPTION;
(U1 可將 R1 授予 U2 或 R2)。 - 對象權限授權:
GRANT SELECT ON Table1 TO U1 WITH GRANT OPTION;
(U1 可將 Table1 的查詢權限授予 U2,但不能授予角色)。
習題:
解析:
第 1 題
數據庫的安全性是指保護數據庫以防止不合法的使用所造成的數據泄露、更改或破壞。確保只有授權用戶能訪問和操作數據庫中的數據,維護數據的保密性、完整性和可用性。
第 2 題
- 人為因素:如惡意的黑客攻擊,通過 SQL 注入漏洞獲取或篡改數據庫數據;內部人員越權訪問,比如普通員工非法查看敏感財務數據。
- 自然因素:如服務器所在機房遭遇火災、洪水等自然災害,可能導致數據庫存儲設備損壞,數據丟失。
- 系統漏洞:數據庫管理系統本身存在安全漏洞,未及時打補丁,被攻擊者利用來突破安全防線。
第 3 題
- 用戶身份鑒別:通過用戶名 - 密碼、生物識別(指紋、面部識別等)等方式確認用戶身份。
- 存取控制:包括自主存取控制(DAC),用戶可根據自己意愿對數據進行授權;強制存取控制(MAC),由系統根據密級等因素統一控制用戶對數據的訪問。
- 視圖機制:為不同用戶定義不同視圖,限制用戶只能看到視圖中的數據,間接實現數據安全。
- 審計:對數據庫的操作進行記錄,便于事后追蹤分析,發現非法操作。
- 數據加密:對數據庫中的數據加密存儲,防止數據在存儲或傳輸過程中被竊取。
第 4 題
- 自主存取控制(DAC):用戶對自己擁有的對象(表、視圖等)有一定的自主控制權,可根據需要將自己的權限授予其他用戶。例如,數據庫管理員創建用戶 A 后,用戶 A 可將自己對某張表的查詢權限授予用戶 B。這種方式靈活,但安全性相對弱,可能因為用戶誤操作或被欺騙而導致權限擴散。
- 強制存取控制(MAC):系統為主體(用戶、進程等)和客體(數據對象)都定義敏感度標記(如絕密、機密、秘密等)。只有當主體的敏感度標記不低于客體的敏感度標記時,主體才能讀取客體;主體的敏感度標記不高于客體的敏感度標記時,主體才能寫入客體。這種方式更嚴格,常用于對安全性要求極高的場景,如軍事、金融等領域。
第 5 題
- ①:
GRANT ALL PRIVILEGES ON 學生, 班級
TO U1
WITH GRANT OPTION;
解釋:ALL PRIVILEGES
表示所有權限,ON
后跟要授權的表名,TO
指定被授權用戶,WITH GRANT OPTION
使 U1 可將權限再授予其他用戶。
- ②:
GRANT SELECT, UPDATE(家庭住址) ON 學生
TO U2;
解釋:授予 U2 對 “學生” 表的 SELECT
(查看)權限,以及對 “家庭住址” 字段的 UPDATE
(更新)權限 。
- ③:
GRANT SELECT ON 班級
TO PUBLIC;
解釋:PUBLIC
代表所有用戶,此語句將 “班級” 表的 SELECT
(查看)權限授予所有用戶。
- ④:
GRANT SELECT, UPDATE ON 學生
TO R1;
解釋:將 “學生” 表的 SELECT
(查詢)和 UPDATE
(更新)權限授予角色 R1。
- ⑤:
GRANT R1 TO U1
WITH ADMIN OPTION;
解釋:將角色 R1 授予 U1,WITH ADMIN OPTION
使 U1 可將角色 R1 再授予其他角色。
第 6 題
- ①:
GRANT SELECT ON 職工, 部門
TO 王明;
- ②:
GRANT INSERT, DELETE ON 職工, 部門
TO 李勇;
- ③:
-- 先創建視圖
CREATE VIEW EmpSelfView AS
SELECT * FROM 職工
WHERE 職工號 = CURRENT_USER; GRANT SELECT ON EmpSelfView
TO ALL;
解釋:先創建視圖 EmpSelfView
,視圖中只包含當前用戶(職工)自己的記錄,然后將該視圖的 SELECT
權限授予所有職工(可理解為每個職工自己 )。
- ④:
GRANT SELECT, UPDATE(工資) ON 職工
TO 劉星;
- ⑤:
GRANT ALTER ON 職工, 部門
TO 張新;
解釋:ALTER
權限用于修改表結構,將此權限授予張新。
- ⑥:
GRANT ALL PRIVILEGES ON 職工, 部門
TO 周平
WITH GRANT OPTION;
- ⑦:
-- 創建視圖
CREATE VIEW DeptSalaryStatsView AS
SELECT 部門號, MAX(工資) AS max_salary, MIN(工資) AS min_salary, AVG(工資) AS avg_salary
FROM 職工
GROUP BY 部門號; GRANT SELECT ON DeptSalaryStatsView
TO 楊蘭;
解釋:先創建視圖 DeptSalaryStatsView
計算每個部門的最高、最低和平均工資,然后將該視圖的 SELECT
權限授予楊蘭,這樣她看不到具體個人工資。
第 7 題
- ①:
REVOKE SELECT ON 職工, 部門
FROM 王明;
- ②:
REVOKE INSERT, DELETE ON 職工, 部門
FROM 李勇;
- ③:
REVOKE SELECT ON EmpSelfView
FROM ALL;
DROP VIEW EmpSelfView;
- ④:
REVOKE SELECT, UPDATE(工資) ON 職工
FROM 劉星;
- ⑤:
REVOKE ALTER ON 職工, 部門
FROM 張新;
- ⑥:
REVOKE ALL PRIVILEGES ON 職工, 部門
FROM 周平;
- ⑦:
REVOKE SELECT ON DeptSalaryStatsView
FROM 楊蘭;
DROP VIEW DeptSalaryStatsView;
第 8 題
- 主體:是指請求訪問客體的活動實體,如用戶、進程等。主體發起對數據庫中數據的訪問操作請求。
- 客體:是指被訪問的對象,即數據庫中的數據,如表、視圖、記錄等。
- 敏感度標記:對主體和客體都賦予的一種安全屬性。用于標識主體的訪問權限級別和客體的敏感程度。例如,將數據分為絕密、機密、秘密、公開等不同級別,主體只有具備相應級別或更高級別權限才能訪問對應級別的客體。
第 9 題
例如,在一個軍事數據庫中,定義主體(用戶)分為士兵(敏感度標記為 “秘密”)、軍官(敏感度標記為 “機密”)、將軍(敏感度標記為 “絕密”);客體(數據)中部隊人員名單為 “秘密”,作戰計劃為 “機密”,戰略部署為 “絕密”。
- 士兵只能訪問部隊人員名單(因為其敏感度標記 “秘密” 等于客體 “部隊人員名單” 的敏感度標記 ),不能訪問作戰計劃和戰略部署。
- 軍官可以訪問部隊人員名單和作戰計劃(軍官的 “機密” 敏感度標記不低于 “秘密” 和 “機密” 級別的客體 ),但不能訪問戰略部署。
- 將軍可以訪問所有數據(將軍的 “絕密” 敏感度標記不低于其他所有客體的敏感度標記 )。
第 10 題
- 數據庫審計功能:是指對數據庫的操作進行記錄和跟蹤,包括操作時間、操作用戶、操作類型(如
SELECT
、INSERT
、UPDATE
、DELETE
等)、操作對象(表、視圖等)等信息。這些記錄存儲在審計日志中。 - 提供審計功能的原因:
- 安全追溯:當數據庫出現安全問題(如數據被非法篡改、泄露)時,可通過審計日志追溯操作源頭,找到違規操作的用戶或進程。
- 合規要求:許多行業(如金融、醫療)有嚴格的數據安全合規規定,審計功能可幫助企業滿足監管要求,證明對數據操作的合規性。
- 安全監控:實時或定期查看審計日志,可發現潛在的安全威脅,如異常頻繁的訪問、未授權的操作嘗試等,以便及時采取措施防范。