數據庫的安全性是指保護數據庫以防止不合法的使用所造成的數據泄露、更改或破壞。
數據庫的安全級別劃分
安全級別 | 定義 |
---|---|
A1 | 驗證設計 |
B3 | 安全域 |
B2 | 結構化保護 |
B1 | 標記安全保護 |
C2 | 受控的存取保護 |
C1 | 自主安全保護 |
D | 最小保護 |
數據庫安全性控制
用戶的表示與鑑別
用戶標識與鑑別是系統提供的最外層安全保護措施。其方法是由系統提供一定的方式讓用戶標識自己的身份或名字。每次用戶要求進入系統時,由系統進行覈對,通過鑑定後才能提供機器使用權。
- 用戶標識(User Identification)
用一個用戶名或者用戶標識號(UID)來表明用戶身份。系統內部記錄着所有合法用戶的標識,系統鑑別此用戶是否是合法用戶。
- 口令(Password)
爲了進一步覈實用戶,系統常常要求用戶輸入口令。系統覈對口令以鑑別用戶身份。
存取控制
數據庫安全最重要的一點就是確保只授權給有資格的用戶訪問數據庫的權限,同時令所有未被授權的用戶無法接近數據,這主要通過數據庫的存取控制機制實現。
存取控制機制主要包含兩部分:
1.定義用戶權限,並將用戶權限登記到數據字典中。
2.合法權限檢查
包括自主存取控制(DAC)和強制存取控制(MAC),這兩類方法的簡單定義是:
- 在自主存取控制方法中,用戶對不同的數據庫對象有着不同的存取權限,不同的用戶對同一對象也有不同的權限,而且用戶還可以將其擁有的存取控制權限轉給其他用戶。因此自主存取控制非常靈活。
- 在強制存取控制方法中,每一個數據庫對象都被標以一定的密級,每一個用戶也被授予某一個級別的許可證。對於任一個用戶,只有具有合法許可證的用戶才能可以存取,因此強制存取方法比較嚴格。
自主存取控制(DAC)方法
用戶權限主要有兩個要素組成:數據庫對象和操作類型。在數據庫系統中,定義存取權限稱爲授權。
1.授權與回收
- GRANT語句
GRANT語句的一般格式爲:
grant<權限>[,<權限>]
on <對象類型><對象名>
to user <用戶>
[with grant option];// 表示可以將權限授予給其他人
例:把查詢Student表的權限授予給用戶U1,且U1可將此權限授予給其他用戶。
grant select
on table Student
to U1;
with grant option;
- REVOKE語句
REVOKE語句的一般格式爲:
revoke<權限>[,<權限>]
on <對象類型><對象名>
from <用戶>
[cascade|restrict];
例:把用戶U1修改學生學號的權限收回。
revoke update(Sno)
on table Student
from U1;
強制存取控制(MAC)方法
在MAC中,DBMS所管理的全部實體都被分爲主體和客體兩大類。
主體是系統中的活動實體,既包括DBMS所管理的實際用戶,也包括代表用戶的各進程。客體是系統中的被動實體,是受主體操縱的,包括文件、基本表、索引、視圖等。對於主體和客體,DBMS爲他們每個實體指派一個敏感度標記(Label)。
當某一用戶以標記Label註冊入系統時,系統要求他對任何客體的存取必須遵循以下規則:
- 僅當主體的許可證級別大於或等於客體的密級時,該主體才能讀取相應的客體;
- 僅當主體的許可證級別等於客體的密級時,該主體才能寫相應的客體。
視圖機制
通過爲不同的用戶定義不同的視圖,把數據對象限制在一定範圍內,可以把要保密的數據對無權尋去的用戶隱藏起來,從而自動地對數據提供一定程度的安全保護。
審計(Audit)
審計功能是DBMS達到C2安全級別以上必不可少的重要指標。
審計一般分爲用戶級審計和系統級審計。
用戶級審計是對任何用戶設置的審計,主要是用戶針對自己創建的數據庫表或視圖進行審計,記錄所有用戶對這些表或視圖的一切成功或不成功的訪問要求以及各種類型的SQL操作。
系統級審計只能由DBA設置,用於監測成功或失敗的登錄要求、監測grant和revoke操作以下其他數據庫級權限下的操作。
audit語句用來設置審計功能,noaudit語句取消審計功能。
例:對修改SC表結構或修改SC表數據的操作進行審計。
audit alter,update
on SC;
例:取消對SC表的一切審計。
noaudit alter,update
on SC;
審計設置以及審計內容一般都存放在數據字典中。