存取控制的層次
一般有三個存取控制與保護的層次:記憶體層、過程層和邏輯層。
記憶體存取控制
這一級存取控制不一定是具體控制用戶關於數據對象的存取許可權,而是控制對象的存儲容器,即控制記憶體單元不被未授權的用戶存取。在容器中的對象收到與容器同一級別的控制保護,使在被保護的容器中的內容都是安全的。具體的實現方法可以是物理的,如採用地址界限暫存器、存儲鑰匙等;也可以用邏輯的方法,即虛擬空間,如頁面/片段控制表。物理方法藉助於作業系統的功能即可實現;邏輯的方法則依其存取控制方案不同而異,僅靠作業系統的“保護圈”(protestion ring)已不能滿足要求。
過程存取控制
過程存取控制就是程式存取控制。程式被授權的用戶執行、並依其創建者的存取權來運算元據。具體地,過程存取控制就是按照程式的調用、返回和參數傳遞來監控其執行。
在過程存取控制中,還有過程之間相互調用問題,通過“同心圓機制” (concentric ring mechanism)控制,凡處於更 外層的過程比更內層的過程具有更少的特權。外層的過程要與內層的過程通信,必須通過一個或多個“安全門”(security gate) ,但內層對外層通信則不需要。所謂安全門就是許可權檢查。
邏輯存取控制
邏輯存取控制就是控制存取對象的邏輯結構,如檔案、記錄、欄位等,而不管對象在何處,它是是實際的還是虛擬存儲結構,它將用戶的存取許可權和保護措施與邏輯結構相聯。
實現存取控制
為了實現存取控制,安全機構必須維護一個存取控制矩陣。它包含被授權者、許可權施加對象及授予的許可權三要索。圖中,左標題欄為用戶標識符或口令,上標題行為數據(包括程式)的標識符,矩陣體指明了各用戶對相應數據的存取許可權。空白則表明該用戶對相應數據無任何存取權,授權矩陣的大小與複雜性由安全機構設計與實現而定,並依賴於DBMS、OS及DCMS提供的軟體支持。存取控制矩陣的開發是DBA的任務,但DBMS必須提供DBA以相應的實用例程來建立、維護(批處理或在線上處理)、在線上存取該矩陣,報告矩陣的內容及違例情況。
存取控制策略
自主存取控制
自主(有的也叫“隨意”或“任意”)存取控制(discretionary access control,DAC)基於存取許可權或特權概念及其實現技術與機制,哪個用戶對哪個數據對象具有什麼樣的許可權通過授權來說明。
支持授權說明首先必須提供一種語言,SQL是這種語言的典型代表。
自主存取控制可通過存取控制矩陣來實現。每當一個用戶發出對某數據對象的一種存取請求時,DBMS的安全或存取控制部件針對存取控制矩陣進行檢驗,以決定同意或拒絕其請求。
強制存取控制
一般情況下,自主存取控制是很有效的,可以滿足普通的安全性要求。但它存在一個漏洞,一些別有用心的用戶可以欺騙一個授權用戶,採用一定的手段來獲取敏感數據。
存在這種漏洞的根源在於,自主存取控制機制僅以授權來將主體(用戶)與客體(被存取數據對象)關聯,通過控制許可權來實現安全要求,對主體和客體(對象)本身未作任何安全性標註。強制存取控制(mandatory access control,MAC)就能處理自主存取控制的這種漏洞問題。