數據庫中數據的共享是在DBMS統一的嚴格的控制之下的共享,即只允許有合法使用權限的用戶訪問允許他存取的數據
數據庫系統的安全保護措施是否有效是數據庫系統主要的性能指標之一
(一)計算機系統安全性概述
爲計算機系統建立和採取的各種安全保護措施,以保護計算機系統中的硬件、軟件及數據,防止其因偶然或惡意的原因使系統遭到破壞,數據遭到更改或泄露等
三類計算機系統安全性問題:
- 技術安全類
- 管理安全類
- 政策法律類
(二)數據庫安全性控制概述
數據庫的安全性是指保護數據庫,防止因用戶非法使用數據庫造成數據泄露、更改或破壞。
數據庫安全性控制的常用方法:
- 用戶標識和鑑定
- 存取控制
- 視圖
- 審計
- 密碼存儲
用戶標識與鑑別(Identification & Authentication):
系統提供的最外層安全保護措施
存取控制:
存取控制機制的組成:
- 定義用戶(存取)權限
- 合法(存取)權限檢查
定義用戶權限和合法權檢查機制一起組成了DBMS的安全(存取控制)子系統
常用存取控制方法:
- 自主存取控制(Discretionary Access Control ,簡稱DAC)
同一用戶對於不同的數據對象有不同的存取權限
不同的用戶對同一對象也有不同的權限
用戶還可將其擁有的存取權限轉授給其他用戶
通過 SQL 的 GRANT 語句和 REVOKE 語句實現
用戶權限組成:
– 數據對象
– 操作類型
定義用戶存取權限:定義用戶可以在哪些數據庫對象上進行哪些類型的操作
定義存取權限稱爲授權
檢查存取權限
授權粒度: 指可以定義的數據對象的範圍
– 衡量授權機制是否靈活的一個重要指標。
– 授權定義中數據對象的粒度越細,即可以定義的數據對象的範圍越小,授權子系統就越靈活。
關係數據庫中授權的數據對象粒度:數據庫、表屬性、列、行
能否提供與數據值有關的授權反映了授權子系統精巧程度
優點: 能夠通過授權機制有效地控制其他用戶對敏感數據的存取
缺點: 可能存在數據的“無意泄露”
原因:這種機制僅僅通過對數據的存取權限來進行安全控制,而數據本身並無安全性標記。
解決:對系統控制下的所有主客體實施強制存取控制策略
- 強制存取控制(Mandatory Access Control,簡稱 MAC)
每一個數據對象被標以一定的密級
每一個用戶也被授予某一個級別的許可證
對於任意一個對象,只有具有合法許可證的用戶纔可以存取
指系統爲保證更高程度的安全性,按照TDI/TCSEC標準中安全策略的要求,所採取的強制存取檢查手段。MAC不是用戶能直接感知或進行控制的
MAC適用於對數據有嚴格而固定密級分類的部門:軍事部門, 政府部門
在MAC中,DBMS所管理的全部實體被分爲主體和客體兩大類
主體是系統中的活動實體
- DBMS所管理的實際用戶
- 應用程序、進程以及線程等
客體是系統中的被動實體,是受主體操縱的文件、基表、索引、視圖
對於主體和客體,DBMS爲它們每個實例(值)指派一個敏感度標記
敏感度標記(Label):絕密、機密、可信、公開
主體的敏感度標記稱爲許可證級別,客體的敏感度標記稱爲密級。
MAC機制就是通過對比主體的Label和客體的Label,最終確定主體是否能夠存取客體
當某一用戶(或某一主體)以標記label註冊入系統時,系統要求他對任何客體的存取必須遵循下面兩條規則:
- (1)僅當主體的許可證級別大於或等於客體的密級時,該主體才能讀取相應的客體。
- (2)僅當主體的許可證級別等於客體的密級時,該主體才能寫相應的客體。
授權與回收
GRANT語句的一般格式:
GRANT <權限>[,<權限>]...
[ON <對象類型> <對象名>]
TO <用戶>[,<用戶>]...
[WITH GRANT OPTION];
語義:將對指定操作對象的指定操作權限授予指定的用戶
附註:創建視圖時,[WITH CHECK OPTION]:通過視圖進行增刪改操作時,不得破壞視圖定義中的謂詞條件(即子查詢中的條件表達式)
發出GRANT:
- DBA
- 數據庫對象創建者(即屬主Owner)
- 擁有該權限的用戶
按受權限的用戶 :
- 一個或多個具體用戶
- PUBLIC(全體用戶)
WITH GRANT OPTION子句:
指定:可以再授予
沒有指定:不能傳播
不允許循環授權
對屬性列的授權時必須明確指出相應屬性列名
REVOKE
授予的權限可以由DBA或其他授權者用REVOKE語句收回
REVOKE語句的一般格式爲:
REVOKE <權限>[,<權限>]...
[ON <對象類型> <對象名>]
FROM <用戶>[,<用戶>]...;
創建數據庫模式的權限 :
- DBA在創建用戶時實現
- CREATE USER語句格式
CREATE USER <username>
[WITH][DBA | RESOURCE | CONNECT]
數據的操作授權與數據庫模式授權的區別
Grant和revoke語句用於向用戶授予或收回對數據的操作權限,而對數據庫模式的授權則由DBA在創建用戶時實現
創建用戶語句一般格式:
Create user <username>
[with][DBA|resource|connect]
說明:
只有系統的超級用戶纔有權創建新的用戶
新建用戶有三種權限:connect、resource和DBA
權限與可執行操作
connect權限(創建用戶命令中若沒指定建新用戶的權限,默認該用戶擁有connect權限)
- 不能創建新用戶、不能創建模式、不能創建基本表
- 只能登錄數據庫
Resource權限
- 能創建基本表和視圖
- 不能創建模式,也不能創建新的用戶
DBA權限的用戶是系統中的超級用戶
- 擁有一切權限,還可以把這些權限授予一般用戶。
數據庫角色
被命名的一組與數據庫操作相關的權限
- 角色是權限的集合
- 可以爲一組具有相同權限的用戶創建一個角色
- 簡化授權的過程
角色的創建:
CREATE ROLE <角色名>
給角色授權 :
GRANT <權限>[,<權限>]…
ON <對象類型>對象名
TO <角色>[,<角色>]…
將一個角色授予其他的角色或用戶:
GRANT <角色1>[,<角色2>]…
TO <角色3>[,<用戶1>]…
[WITH ADMIN OPTION]
角色權限的收回 :
REVOKE <權限>[,<權限>]…
ON <對象類型> <對象名>
FROM <角色>[,<角色>]…
(三)視圖機制
視圖機制把要保密的數據對無權存取這些數據的用戶隱藏起來。
視圖機制更主要的功能在於提供數據獨立性,其安全保護功能太不精細,往往遠不能達到應用系統的要求。
視圖機制與授權機制配合使用方法:
- 首先用視圖機制屏蔽掉一部分保密數據
- 視圖上面再進一步定義存取權限
- 間接實現了支持存取謂詞的用戶權限定義
(四)審計
對指定用戶在數據庫中的操作情況進行監控和記錄,用以審查用戶的相關活動
- 數據被非授權用戶刪除,用戶越權管理,權限管理不正確,用戶獲得不應有的系統權限等
監視和收集關於指定數據庫獲得的數據
- 哪些表經常被修改,用戶共執行了多少次I/O操作等,爲優化提供依據
審計級別:
-
語句級
只審定某種類型的SQL語句 -
權限級
只審計某個系統權限的使用情況 -
實體級
只對一個指定模式上的實體的指定語句進行審計
審計類別:
按語句執行成功與否
- 只審計成功語句(whenever successful)
- 只審計不成功語句(whenever not successful)
- 不論成功與否都進行審計
按語句執行次數
- 會話審計(by session)
語句每執行一次就審計一次 - 存取方式審計(by assess)
多次執行的同一語句只審計一次
審計分爲:
- 用戶級審計
針對自己創建的數據庫表或視圖進行審計
記錄所有用戶對這些表或視圖的一切成功和(或)不成功的訪問要求以及各種類型的SQL操作 - 系統級審計
DBA設置
監測成功或失敗的登錄要求
監測GRANT和REVOKE操作以及其他數據庫級權限下的操作
AUDIT語句:設置審計功能
NOAUDIT語句:取消審計功能
(五)數據加密
防止數據庫中數據在存儲和傳輸中失密的有效手段
加密的基本思想:
根據一定的算法將原始數據(術語爲明文,Plain text)變換爲不可直接識別的格式(術語爲密文,Cipher text)
不知道解密算法的人無法獲知數據的內容
加密方法
- 替換方法:使用密鑰(Encryption Key)將明文中的每一個字符轉換爲密文中的一個字符
- 置換方法:將明文的字符按不同的順序重新排列
- 混合方法:美國1977年制定的官方加密標準:數據加密標準(Data Encryption Standard,簡稱DES)
DBMS中的數據加密:
- 有些數據庫產品提供了數據加密例行程序
- 有些數據庫產品本身未提供加密程序,但提供了接口
數據加密功能通常也作爲可選特徵,允許用戶自由選擇:
- 數據加密與解密是比較費時的操作
- 數據加密與解密程序會佔用大量系統資源
- 應該只對高度機密的數據加密
(六)統計數據庫安全性
統計數據庫的特點:
-
允許用戶查詢聚集類型的信息(例如合計、平均值等)
-
不允許查詢單個記錄信息
例:允許查詢“程序員的平均工資是多少?”,不允許查詢“程序員張勇的工資?”
統計數據庫中特殊的安全性問題:
- 隱蔽的信息通道
- 從合法的查詢中推導出不合法的信息