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