分區細粒度訪問控制
例如:在一個控制環境中,這個特性被用來控制兩個公司對sales表的訪問.每一個公司擁有的獨立的應用程序sell_it和PRod_opt,需要擁有不同的安全策略.第一個公司的sell_it應用程序認證的用戶需要只能訪問表中來自他們相同地區的記錄;那就是sales.cust_id+customer.country的聯合校驗必須符合這個用戶的地區相吻合.第二個公司的prod_opt應用程序的訪問權限被設置為只能訪問最近事務提交的記錄上.也就是與sales.time_id相關聯.在8i中,在一個細粒度訪問控制中擁有這兩個策略將需要開發公司共同協作部署.假如兩個產品來自競爭的兩個公司,這實際上是不可行的.依靠定義"應用程序設置"來強行控制對基本objects的一些非凡規定,每一個應用程序現在能夠實現一系列私有的安全策略.
二:細粒度審計.
...一個提供擴展的入侵檢測,捕捉sql執行語句,而不是返回數據的工具.
...可以將審計策略捆綁在帶有where條件的select語句的表或視圖上.
...Oracle用自治事務來處理用戶自定義的審計事件.
...一個基于列的審計特性減少了錯誤審計的發生.
數據庫治理系統中的審計經常被用來監控數據的訪問.審計紀錄是驗證違反數據訪問權限的基礎.新的細粒度審計機制從事于執行更細小級別的審計.
新的審計原則是基于簡單的用戶定義關于表的查詢條件的sql謂詞. 謂詞可以在當查詢結果中返回了指定的值得時候進行審計.
在基于查詢值的審計中,也有一些情形下治理員只關心某一個特定的被引用和訪問列情況.因為無論一個列的查詢審計發生在dml的任何部分都可以進行審計,所以oracle對這個查詢的審計將不存在任何問題.
在8i中,審計項只能被設置用來監控對對象的訪問權,只有一些固定的情況,比如用戶id,時間戳,對象名稱會被記錄在審計跟蹤里.
細粒度審計可以調用一個存儲過程來作為審計過程的一部分.
-----------------------------------------------------------------------------------
如何進行細粒度審計
...安全治理員用dbms_fga包來為有問題的表建立審計原則.
dbms_fga.add_policy(),dbms_fga.enable_policy(),dbms_fga.disable_policy(),dbms_fga.drop_policy().
-------------------------------------------------------------------------------------
PROCEDURE ADD_POLICY
參數名稱 類型 輸入/輸出默認值?
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
AUDIT_CONDITION VARCHAR2 IN DEFAULT
AUDIT_COLUMN VARCHAR2 IN DEFAULT
HANDLER_SCHEMA VARCHAR2 IN DEFAULT
HANDLER_MODULE VARCHAR2 IN DEFAULT
ENABLE BOOLEAN IN DEFAULT
--------------------------------------------------------------------------
PROCEDURE DISABLE_POLICY
參數名稱 類型 輸入/輸出默認值?
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
------------------------------------------------------------------------------
PROCEDURE DROP_POLICY
參數名稱 類型 輸入/輸出默認值?
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
------------------------------------------------------------------------------
PROCEDURE ENABLE_POLICY
參數名稱 類型 輸入/輸出默認值?
OBJECT_SCHEMA VARCHAR2 IN DEFAULT
OBJECT_NAME VARCHAR2 IN
POLICY_NAME VARCHAR2 IN
ENABLE BOOLEAN IN DEFAULT
-------------------------------------------------------------------------------
...用表dba_audit_policies來列出已定義的原則.
...用表dba_fga_audit_trail來放置審計紀錄.這個表包括觸發審計的用戶名,SQL語句,
審計名稱,會話ID號,時間戳,和其他一些屬性.
...治理員可以定義審計事件處理器來處理發生的時間,比如像治理員傳送警告頁.
--------------------------------------------------------------------------------------
下面列舉一個新的細粒度原則的例子,從這個例子我們可以看出9I細粒度審計原則與8I的區別.
假如我們的原則設為:AUDIT_CONDITION='SALARY>10000'
這個時候我們看一下我們執行
SELECT last_name,salary FROM employees WHERE last_name = ’Russell’
盡管我們選擇的查詢條件中沒有包含SALARY列,但是由于我們的對SALARY列進行查詢,假如RUSELL的SALARY值大于10000,那么這條記錄將被審計.
審計紀錄如下
'SELECT LAST_NAME,SALARY FROM EMPLOYEES WHERE LAST_NAME='RUSSELL',<TIMESTAMP>,<SCN>,
<USERNAME>,........
假如我們執行
SELECT LAST_NAME,SALARY FROM EMPLOYEES WHERE SALARY<9000
那么盡管這條語句訪問,查詢了SALARY列,但是由于他訪問的值未達到審計閥值,那么將不被審計.
-------------------------------------------------------------------------------------
細粒度審計只對一個有WHERE條件的SELECT語句有效,并且只能設定一個被審計的列.
上面的查詢語句觸發的事件不是造成用戶無法查詢到這些語句,這些SALARY>10000實際上被返回
給查詢用戶,但是同時一個審計事件被寫到審計跟蹤里,包括完整的SQL語句,時間戳等信息.
細粒度審計并不自動的捕捉返回給查詢用戶的查詢結果,但是你可以用細粒度審計原則結合閃回
查詢重建返回給用戶的紀錄.
細粒度審計能夠實現數據庫系統的入侵監測功能.例如,開發人員可以為一個審計增加一個事件處理器來通知治理員,是否有被審計的事件發生.非SQL的訪問是不被審計的,例如:假如你使用DIRECT PATH EXPORT,這種方式繞過了數據庫的SQL層,審計條件將不被觸發.
------------------------------------------------------------------------------------
細粒度審計事件處理器
如何創建.
CREATE PROCEDURE catchlog (schema_name VARCHAR2,table_name VARCHAR2,policy VARCHAR2)
AS BEGIN
-- send an alert note to my pager
UTIL_ALERT_PAGER(’CatchLog:’Table_nameSYSDATE);
END;
/
如何添加
DBMS_FGA.ADD_POLICY ( ...HANDLER_SCHEMA=>’HRMGR’, HANDLER_MODULE=>’CATCHLOG’);
細粒度審計事件處理器總結:
在上面的例子中,用戶HRMGR創建了一個存儲過程CATCHLOG,參數的類型和我們的例子必須
一致,但是名字可以改變.
審計事件處理器的添加需要一個擁有權限的用戶
當第一個我們關心的行被取得時,審計事件紀錄將被記錄并存放下來,審計函數HRMGR.CATCHLOG
被調用.