數據庫的特點之一就是由數據庫管理系統提供統一的數據保護功能來保證數據的安全可靠和正確有效。數據庫的數據保護功能主要包括數據的安全性和完整性。
數據庫的安全性是指保護數據庫以防止不合法使用所造成的數據泄露、更改或破壞。系統安全保護措施是否有效是數據庫系統的主要技術指標之一。
數據庫的不安全因素
1、非授權用戶對數據庫的惡意存取和破壞。
數據庫管理系統提供的安全措施主要包括用戶身份鑑別、存取控制和視圖等技術。
2、數據庫中重要或敏感的數據被泄露。
數據庫管理系統提供的主要技術有強制存取控制、數據加密存儲和加密傳輸等。
有些安全性要求較高的部門提供審計功能。
3、安全環境的脆弱性。
操作系統安全的脆弱,網絡協議安全保障的不足等都會造成數據庫安全性的破壞。
數據庫安全性控制
在一般計算機系統中,安全措施是一級一級層層設置的。用戶要求進入計算機系統時,系統首先根據輸入的用戶標識進行用戶身份鑑定。對已進入系統的用戶,數據庫管理系統還要進行存取控制。操作系統也有自己的保護措施;數據最後還會以密碼的形式存取到數據庫中。
存取控制
數據庫安全最重要的一點就是確保只授權給有資格的用戶訪問數據庫的權限。
存取控制機制主要包括定義用戶權限和合法權限檢查兩部分。
(1)定義用戶權限:用戶對某一對象的操作權利稱爲權限。這些定義經過編譯後存儲在數據字典中,被稱爲安全規則或授權規則。
(2)合法權限檢查:每當用戶發出存取數據庫的操作請求後,數據庫管理系統就會查找數據字典,根據安全規則進行合法權限檢查,若用戶的操作請求超過了定義的權限,系統將拒絕執行此操作。
定義用戶權限和合法權限檢查機制一起構成了數據庫管理系統的存取控制子系統。
C2級數據庫管理系統還支持自主存取機制,B1級數據庫支持強制存取控制。
自主存取控制方法
自主存取控制主要通過SQL的GRANT語句和REVOKE語句來實現。
用戶權限由兩個因素構成:數據庫對象、操作類型。
定義存取權限稱爲授權。
存取控制的對象不僅有數據本身(基本表中的數據,屬性列上的數據),還有數據庫模式(包括數據庫、基本表、視圖和索引的創建等)。
授權:授予與收回
GRANT語句用於向用戶授予權限,REVOKE語句收回已授予用戶的權限。
GRANT語句的一般格式
GRANT <權限>[,<權限>]...
ON <對象類型><對象名>[,<對象類型><對象名>]...
TO <用戶>,[,<用戶>]...
[WITH GRANT OPTION];
發出GRANT語句的可以是數據庫管理員,也可以是該數據庫對象的創建者,還可以是已擁有該權限的用戶。接受權限的用戶可以是一個或多個具體的用戶,也可以是PUBLIC,即全體用戶。
如果指定了WITH GRANT OPTION子句,則獲得某種權限的用戶還可以把這種權限再授予其他的用戶。注意,不允許循環授權,即被授權者不能把權限再授回給授權者或者祖先。
例:
將查詢Student表的權限授予用戶U1。
GRANT SELECT
ON TABLE Student
TO U1;
把對Student表和Course表的全部操作權限授予用戶U2和U3。
GRANT ALL PRIVILEGES
ON TABLE Student,Course
TO U2,U3;
把對錶SC的INSERT權限授予用戶U5,並允許將此權限再授予其它用戶。
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
REVOKE
授予用戶的權限可以由數據庫管理員或其它授權者用REVOKE語句收回。
REVOKE語句的一般格式爲
REVOKE <權限> [,<權限>]...
ON <對象類型><對象名>[,<對象類型><對象名>]...
FROM <用戶> [,<用戶>]...[CASCADE|RESTRICT];
例:
將用戶U5對SC表的INSERT權限收回。
REVOKE INSERT
ON TABLE SC
FROM U5
注:級聯CASCADE收回了U6和U7的INSERT權限,否則系統將拒絕執行該命令。
有的數據庫管理系統默認值爲RESTRICT,將自動執行級聯操作,如果U6或U7還從其它用戶處獲得對SC表的INSERT權限,則它們仍然具有此權限,系統只收回直接或間接從U5處獲得權限。
創建數據庫模式的權限
CREATE USER <username>[WITH][DBA|RESOURCE|CONNECT];
說明:
(1)只有系統的超級用戶纔有權創建一個新的數據庫用戶。
(2)新創建的數據庫用戶有三種權限:CONNECT、RESOURCE和DBA。
CREATE USER命令中如果沒有指定創建新用戶的權限,默認該用戶擁有CONNECT權限。擁有CONNECT權限的用戶不能創建新用戶,不能創建模式,也不能創建基本表,只能登錄數據庫。
擁有RESOURCE權限的用戶能創建基本表和視圖,成爲所創建對象的屬主,但不能創建模式,不能創建新的用戶。數據庫對象的屬主可以使用GRANT語句將該對象上的存取權限授予其它用戶。
擁有DBA權限的用戶是系統中的超級用戶,可以創建新的用戶、創建模式、創建基本表和視圖等:DBA擁有對所有數據庫對象的存取權限,還可以把這些權限授予一般用戶。
注意:CREATE USER語句不是SQL標準。
權限與可執行的操作對照表
擁有權限 | 可否執行的操作 | 可否執行的操作 | 可否執行的操作 | 可否執行的操作 |
---|---|---|---|---|
CREATE USER | CREATE SCHEMA | CREATE TABLE | 登錄數據庫執行數據庫的查詢與操作 | |
DBA | 可以 | 可以 | 可以 | 可以 |
RESOURCE | 不可以 | 不可以 | 可以 | 可以 |
CONNECT | 不可以 | 不可以 | 不可以 | 可以,但必須擁有相應的權限 |