亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2576 | 回復: 3
打印 上一主題 下一主題

[特性]9I新特性之細粒度訪問原則 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2004-02-26 09:52 |只看該作者 |倒序瀏覽
分區(qū)細粒度訪問控制
   例如:在一個控制環(huán)境中,這個特性被用來控制兩個公司對sales表的訪問.每一個公司擁有的獨立的應(yīng)用程序sell_it和prod_opt,需要擁有不同的安全策略.第一個公司的sell_it應(yīng)用程序認證的用戶需要只能訪問表中來自他們相同地區(qū)的記錄;那就是sales.cust_id+customer.country的聯(lián)合校驗必須符合這個用戶的地區(qū)相吻合.第二個公司的prod_opt應(yīng)用程序的訪問權(quán)限被設(shè)置為只能訪問最近事務(wù)提交的記錄上.也就是與sales.time_id相關(guān)聯(lián).在8i中,在一個細粒度訪問控制中擁有這兩個策略將需要開發(fā)公司共同協(xié)作部署.如果兩個產(chǎn)品來自競爭的兩個公司,這實際上是不可行的.依靠定義"應(yīng)用程序設(shè)置"來強行控制對基本objects的一些特殊規(guī)定,每一個應(yīng)用程序現(xiàn)在能夠?qū)崿F(xiàn)一系列私有的安全策略.
二:細粒度審計.
     ...一個提供擴展的入侵檢測,捕獲sql執(zhí)行語句,而不是返回數(shù)據(jù)的工具.
     ...可以將審計策略捆綁在帶有where條件的select語句的表或視圖上.
     ...oracle用自治事務(wù)來處理用戶自定義的審計事件.
     ...一個基于列的審計特性減少了錯誤審計的發(fā)生.
   數(shù)據(jù)庫管理系統(tǒng)中的審計經(jīng)常被用來監(jiān)控數(shù)據(jù)的訪問.審計紀錄是驗證違反數(shù)據(jù)訪問權(quán)限的基礎(chǔ).新的細粒度審計機制從事于執(zhí)行更細小級別的審計.
   新的審計原則是基于簡單的用戶定義關(guān)于表的查詢條件的sql謂詞. 謂詞可以在當查詢結(jié)果中返回了指定的值得時候進行審計.
   在基于查詢值的審計中,也有一些情形下管理員只關(guān)心某一個特定的被引用和訪問列情況.因為無論一個列的查詢審計發(fā)生在dml的任何部分都可以進行審計,所以oracle對這個查詢的審計將不存在任何問題.
   在8i中,審計項只能被設(shè)置用來監(jiān)控對對象的訪問權(quán),只有一些固定的情況,比如用戶id,時間戳,對象名稱會被記錄在審計跟蹤里.
   細粒度審計可以調(diào)用一個存儲過程來作為審計過程的一部分.
-----------------------------------------------------------------------------------
                   如何進行細粒度審計
    ...安全管理員用dbms_fga包來為有問題的表建立審計原則.
dbms_fga.add_policy(),dbms_fga.enable_policy(),dbms_fga.disable_policy(),dbms_fga.drop_policy().
-------------------------------------------------------------------------------------
PROCEDURE ADD_POLICY
參數(shù)名稱                       類型                    輸入/輸出默認值?
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
參數(shù)名稱                       類型                    輸入/輸出默認值?
OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
OBJECT_NAME                    VARCHAR2                IN
POLICY_NAME                    VARCHAR2                IN
------------------------------------------------------------------------------
PROCEDURE DROP_POLICY
參數(shù)名稱                       類型                    輸入/輸出默認值?
OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
OBJECT_NAME                    VARCHAR2                IN
POLICY_NAME                    VARCHAR2                IN
------------------------------------------------------------------------------
PROCEDURE ENABLE_POLICY
參數(shù)名稱                       類型                    輸入/輸出默認值?
OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
OBJECT_NAME                    VARCHAR2                IN
POLICY_NAME                    VARCHAR2                IN
ENABLE                         BOOLEAN                 IN     DEFAULT
-------------------------------------------------------------------------------
    ...用表dba_audit_policies來列出已定義的原則.
    ...用表dba_fga_audit_trail來放置審計紀錄.這個表包括觸發(fā)審計的用戶名,SQL語句,
       審計名稱,會話ID號,時間戳,和其他一些屬性.
    ...管理員可以定義審計事件處理器來處理發(fā)生的時間,比如像管理員傳送警告頁.
--------------------------------------------------------------------------------------
下面列舉一個新的細粒度原則的例子,從這個例子我們可以看出9I細粒度審計原則與8I的區(qū)別.
如果我們的原則設(shè)為:AUDIT_CONDITION='SALARY>;10000'
這個時候我們看一下我們執(zhí)行
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>;,........
如果我們執(zhí)行
SELECT LAST_NAME,SALARY FROM EMPLOYEES WHERE SALARY<9000
那么盡管這條語句訪問,查詢了SALARY列,但是由于他訪問的值未達到審計閥值,那么將不被審計.
-------------------------------------------------------------------------------------
細粒度審計只對一個有WHERE條件的SELECT語句有效,并且只能設(shè)定一個被審計的列.

上面的查詢語句觸發(fā)的事件不是造成用戶無法查詢到這些語句,這些SALARY>;10000實際上被返回
給查詢用戶,但是同時一個審計事件被寫到審計跟蹤里,包括完整的SQL語句,時間戳等信息.

細粒度審計并不自動的捕獲返回給查詢用戶的查詢結(jié)果,但是你可以用細粒度審計原則結(jié)合閃回
查詢重建返回給用戶的紀錄.

細粒度審計能夠?qū)崿F(xiàn)數(shù)據(jù)庫系統(tǒng)的入侵監(jiān)測功能.例如,開發(fā)人員可以為一個審計增加一個事件處理器來通知管理員,是否有被審計的事件發(fā)生.非SQL的訪問是不被審計的,例如:如果你使用DIRECT PATH EXPORT,這種方式繞過了數(shù)據(jù)庫的SQL層,審計條件將不被觸發(fā).
------------------------------------------------------------------------------------
                 細粒度審計事件處理器
                 
如何創(chuàng)建.
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_name||SYSDATE);
  END;
  /
  如何添加
  DBMS_FGA.ADD_POLICY ( ...HANDLER_SCHEMA=>;’HRMGR’, HANDLER_MODULE=>;’CATCHLOG’);
細粒度審計事件處理器總結(jié):
  在上面的例子中,用戶HRMGR創(chuàng)建了一個存儲過程CATCHLOG,參數(shù)的類型和我們的例子必須
一致,但是名字可以改變.

審計事件處理器的添加需要一個擁有權(quán)限的用戶

當?shù)谝粋我們關(guān)心的行被取得時,審計事件紀錄將被記錄并存放下來,審計函數(shù)HRMGR.CATCHLOG
被調(diào)用.

論壇徽章:
0
2 [報告]
發(fā)表于 2004-02-26 09:53 |只看該作者

[特性]9I新特性之細粒度訪問原則

關(guān)于細粒度審計原則的實驗,我還在進行中,歡迎大家發(fā)表自己的意見和建議,一塊進行探討。如果有多個DBA時,或者開發(fā)者能夠直接訪問你的數(shù)據(jù)庫時,建個細粒度審計,也許對分清責任等有一定作用,呵呵!

論壇徽章:
0
3 [報告]
發(fā)表于 2004-02-26 13:52 |只看該作者

[特性]9I新特性之細粒度訪問原則

piner老大的實驗和介紹,另外經(jīng)過我的驗證,以sysdba身份查詢時,不會被審計!
表的查詢語句用普通觸發(fā)器是檢測不到的,除非開啟數(shù)據(jù)庫審計,但是從ORACLE9i開始,提供了一個DBMS_FGA包,可以在線對單個的表進行審計并查詢審計資料。但是這個包的審計過程要求數(shù)據(jù)庫運行在CBO優(yōu)化模式下,如果不是,可能會有意想不到的結(jié)果,這就要求對審計的表進行分析。
下面將就這個包的使用做簡單的介紹,這個包共有四個過程,先介紹一下該包中的第一個過程:
  PROCEDURE add_policy(object_schema IN VARCHAR2 := NULL,
                       object_name IN VARCHAR2,
                       policy_name IN VARCHAR2,
                       audit_condition IN VARCHAR2 := '1=1',
                       audit_column IN VARCHAR2 := NULL,
                       handler_schema IN VARCHAR2 := NULL,
                       handler_module IN VARCHAR2 := NULL,
     enable IN BOOLEAN := TRUE);
object_schema:要審計的用戶的名稱,默認是本用戶
object_name:要審計的對象的名稱
policy_name:這次審計的策略名稱,每次審計都有一個名稱,區(qū)別于別的審計策略
audit_condition:審計條件(謂語動詞),默認全部,如規(guī)定a=1,那么當返回的結(jié)果集中顯式包含(指定該字段)或隱式包含(不指定該字段)a=1的行的時候,該查詢語句將被審計。
audit_column:表示審計那些列,默認全部,如果指定列,那么只有select或者是where指定該列的時候才被審計,如果是select * 也算是隱式的指定了該列,因為*本身是包含任意列。
注:如果同時指定了audit_column與audit_condition,那么必須都滿足的情況下,才能被審計,也就是說,這兩個條件是一個并的關(guān)系而不是或的關(guān)系。
handler_schema:我們還可以規(guī)定在策略執(zhí)行的時候,執(zhí)行一個指定用戶的存儲過程,這里是存儲過程的所有者
handler_module:指定這個策略執(zhí)行的時候,執(zhí)行的存儲過程的名稱
enable:確定審計策略是否馬上生效。
很明顯,該包的作用就是增加一個審計策略,object_schema、object_name與policy_name唯一確定一個審計策略,光看policy_name不能唯一確定一個策略名,不同的對象,策略名可以一樣。
我們再來看第二個過程
PROCEDURE drop_policy(object_schema IN VARCHAR2 := NULL,
                        object_name IN VARCHAR2,
                        policy_name IN VARCHAR2);
object_schema、object_name與policy_name的含義和第一個包一樣,只要指定這三個參數(shù),就可以唯一的刪除一個指定的審計策略。
第三、四個過程enable_policy、disable_policy第二個過程相似,就是根據(jù)object_schema、object_name與policy_name來禁止或者開啟審計策略,這樣對于需要多次使用同樣的審計策略是很有用的,沒有必要刪除后重新創(chuàng)建,不用的時候,只需要disable就可以了,用的時候,只要enable就可以了
如果開啟了handler_schema與handler_module,則需要一個handler_schema用戶下的存儲過程,假定名稱是sp_chk_mytable,這個過程可以類似為:
CREATE PROCEDURE sp_chk_mytable (
  p_object_schema VARCHAR2,
  p_object_name VARCHAR2,
  p_policy_name VARCHAR2) AS
BEGIN
  INSERT INTO audit$proc (login_user,audit_time,ip_address,audsid,
      object_schema, object_name, policy_name )
  VALUES (ora_login_user,sysdate,sys_context('USERENV','IP_ADDRESS'),
         userenv('SESSIONID'),p_object_schema,
         p_object_name, p_policy_name );
EXCEPTION
     WHEN OTHERS THEN
       sp_write_log('Audit Exception:'||SQLERRM);
END sp_chk_mytable;
當然,在創(chuàng)建該過程之前還需要建立一個audit$proc的表,因為并不是我們討論的重點,這個就不多說了,存儲過程可以根據(jù)自己的要求來改寫,以便獲取信息。
以下我們將用一個例子來說明DBMS_FGA包的使用,在這個例子里面,并不包含執(zhí)行指定的存儲過程,也就是說,僅僅對表的審計做一個示例。
     首先,我們假定我們存在表Test,包含記錄為
SQL>; select * from manager.test;
A B
-- --
1 2
2 3
3 4
4 5
5 6
6 7
6 rows selected
分析該表,讓其使用CBO優(yōu)化模式
SQL>; analyze table test compute statistics;
Table analyzed
檢查以前的審計策略與審計日志
SQL>; select t.object_schema,t.object_name,t.policy_name from dba_audit_policies t;
OBJECT_SCHEMA OBJECT_NAME POLICY_NAME
------------------------------ ------------------------------ ------------------------------

SQL>;select t.object_schema,t.object_name,t.policy_name,t.sql_text from Dba_Fga_Audit_Trail t;
OBJECT_SCHEMA OBJECT_NAME POLICY_NAME SQL_TEXT
------------------------- --------------------- --------------------- --------------------------------------
dba_audit_policies用來存放審計策略,其基表是sys.fga$,而Dba_Fga_Audit_Trail則用來存放審計日志,即執(zhí)行了那些SQL語句,其基表是sys. fga_log$,其日志可以手工刪除。通過以上的查詢,我們也可以看到,以前沒有審計策略,也沒有審計日志
現(xiàn)在,我們在manager.Test表增加一個審計策略
SQL>; BEGIN
  2 dbms_fga.add_policy( object_schema =>; 'MANAGER',
  3 object_name =>; 'test',
  4 policy_name =>; 'chk_test',
  5 audit_condition =>; 'a = 1',
  6 audit_column =>; 'b',
  7 enable =>; TRUE );
  8 END;
  9 /
PL/SQL procedure successfully completed
    我們再查詢dba_audit_policies,就可以發(fā)現(xiàn)這條審計策略了。
SQL>; select t.object_schema,t.object_name,t.policy_name,t.enabled from dba_audit_policies t;
OBJECT_SCHEMA OBJECT_NAME POLICY_NAME ENABLED
------------------------------ ------------------------------ ------------------------------ -------
MANAGER TEST CHK_TEST YES
那么就讓我們看看該審計策略怎么生效,假定我們執(zhí)行如下的一些語句,這些語句都有很普遍的代表性:
SQL>; select count(*) from test where a=2;
COUNT(*)
------------
       1
可以看到,該查詢返回的結(jié)果集中顯然沒有a=1的行,所以,該查詢不能被審計。
SQL>; select count(*) from test where a=1;
COUNT(*)
----------
      1
有人說這個語句包含了a=1,該被審計了吧,其實不然,我們的審計條件中還有一個是審計列必須要有b,count(*)不是說是包含了b,所以該語句還是沒有被審計。
SQL>; select count(*) from test where b=2;
COUNT(*)
----------
      1
這個語句被審計了,因為已經(jīng)包含了列b在where中,而b=2正好是a=1的行,所以a=1是被隱式包含的。
SQL>; select * from test where a=1;
A B
-- --
1 2
該語句肯定被審計,所有列肯定包含審計列b,謂語條件正好是a=1。
SQL>; select a from test where a=2;
A
--
2
這個語句肯定就不被審計了,典型的什么都不滿足
SQL>; select b from test where b=2;
B
--
2
這個語句也被審計,為什么呢?這個語句包含審計列,而且隱式包含了a=1(因為a=1與b=2是同一行)
SQL>; select b from test where b=4;
B
--
4
這個語句沒有被審計,因為雖然滿足了審計列的條件,但是沒有顯式或隱式包含a=1,但是如果在您的環(huán)境中,這個語句如果被審計了,就請您確信是否分析過表,該查詢是否是使用的CBO優(yōu)化計劃。
綜合以上結(jié)果,以上被審計的語句應(yīng)當是3個,檢查一下了
SQL>;select t.object_schema,t.object_name,t.policy_name,t.sql_text from Dba_Fga_Audit_Trail t;
OBJECT_SCHEMA OBJECT_NAME POLICY_NAME SQL_TEXT
------------------------- --------------------- ------------------ -------------------------------------
MANAGER TEST CHK_TEST select * from test where a=1
MANAGER TEST CHK_TEST select b from test where b=2
MANAGER TEST CHK_TEST select count(*) from test where b=2
對于越來越多的審計記錄,我們必須手工維護,刪除沒有參考價值的記錄,我們可以運行如下查詢來刪除審計記錄(需要delete any table的權(quán)限或在sys下執(zhí)行):
delete from sys.fga_log$
or
delete from Dba_Fga_Audit_Trail
   到這里,大家總該明白了怎么樣審計表的Select語句,同普通審計與DML觸發(fā)器一樣,對過多的表進行審計,將會嚴重影響性能。但是,在特定的情況下,如果想跟蹤一個表的Select語句已便于優(yōu)化,也還是可以的。

論壇徽章:
0
4 [報告]
發(fā)表于 2004-02-27 10:25 |只看該作者

[特性]9I新特性之細粒度訪問原則

txfy 老兄,咱經(jīng)常看到你回帖,知道你是個高手,把你的QQ留在資料里面吧
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP