小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

現(xiàn)實(shí)中的細(xì)粒度審計(jì)

 wxwwsnd 2010-09-27

了解如何使用 Oracle 數(shù)據(jù)庫(kù)的細(xì)粒度審計(jì)特性來(lái)跟蹤對(duì)表中特定行的只讀訪問(wèn) — 以及更多信息

傳統(tǒng)的 Oracle 數(shù)據(jù)庫(kù)審計(jì)選件允許您在宏觀級(jí)別上跟蹤用戶在對(duì)象上所執(zhí)行的操作 — 例如,如果您審計(jì)對(duì)某個(gè)表的 SELECT 語(yǔ)句,則可以跟蹤是誰(shuí)從表中選擇了數(shù)據(jù)。但是,您不知道他們選擇了什么。利用數(shù)據(jù)操縱語(yǔ)句 — 如 INSERT、UPDATEDELETE — 您可以通過(guò)使用觸發(fā)器或使用 Oracle LogMiner 實(shí)用程序來(lái)分析歸檔日志,從而捕獲任何的更改。因?yàn)楹?jiǎn)單的 SELECT 語(yǔ)句是不操縱數(shù)據(jù)的,它們既不啟動(dòng)觸發(fā)器,也不記入到那些以后可以進(jìn)行挖掘的歸檔日志中,所以這兩種技術(shù)在涉及到 SELECT 語(yǔ)句的地方無(wú)法滿足要求。

Oracle9i Database 推出了一種稱為細(xì)粒度審計(jì) (FGA) 的新特性,它改變了這種局面。該特性允許您將單個(gè)的 SELECT 語(yǔ)句聯(lián)同用戶提交的確切語(yǔ)句一起進(jìn)行審計(jì)。除了簡(jiǎn)單地跟蹤語(yǔ)句之外,F(xiàn)GA 還通過(guò)在每次用戶選擇特定的數(shù)據(jù)集時(shí)執(zhí)行一段代碼,提供了一種方法來(lái)模擬用于 SELECT 語(yǔ)句的觸發(fā)器。在分為三部分的這一系列文章中,我將說(shuō)明如何使用 FGA 解決實(shí)際問(wèn)題。這第一部分的主要內(nèi)容是構(gòu)建基本的 FGA 系統(tǒng)。

示例安裝

我們的示例基于一個(gè)銀行系統(tǒng),已經(jīng)通過(guò)應(yīng)用程序級(jí)的審計(jì)按照傳統(tǒng)提供了用戶訪問(wèn)特定數(shù)據(jù)的審計(jì)線索。但是,只要用戶使用諸如 SQL*Plus 等工具從應(yīng)用程序以外的地方訪問(wèn)數(shù)據(jù),該系統(tǒng)就不能滿足要求。在本文中,我將說(shuō)明作為 DBA 的您能夠如何使用 FGA 來(lái)完成捕獲用戶對(duì)特定行的 SELECT 訪問(wèn)的任務(wù),無(wú)論訪問(wèn)的工具或機(jī)制是什么。

在我們的示例中,數(shù)據(jù)庫(kù)有一個(gè)名為 ACCOUNTS 的表,由模式 BANK 擁有,其結(jié)構(gòu)如下:

Name              Null?    Type
---------------- -------- ------------
ACCT_NO           NOT NULL NUMBER
CUST_ID           NOT NULL NUMBER
BALANCE                    NUMBER(15,2)

 

為了構(gòu)造一個(gè)能夠?qū)θ魏卧诖吮碇羞x擇的用戶進(jìn)行審計(jì)的系統(tǒng),您需要定義對(duì)該表的 FGA 策略如下:

begin
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS'
);
end;

 

這段代碼必須由具有執(zhí)行程序包 dbms_fga 權(quán)限的用戶來(lái)執(zhí)行。但是,為了提高安全性,建議不要對(duì)用戶 BANK(將要被審計(jì)的表的所有者)授予執(zhí)行權(quán)限;而應(yīng)該將權(quán)限授予一個(gè)安全的用戶(比如 SECMAN),此用戶應(yīng)該執(zhí)行添加策略的過(guò)程。

在定義了策略以后,當(dāng)用戶以通常的方式對(duì)表進(jìn)行查詢時(shí),如下所示:

select * from bank.accounts;

 

審計(jì)線索記錄此操作。您可以使用以下語(yǔ)句查看線索:

select timestamp,
db_user,
os_user,
object_schema,
object_name,
sql_text
from dba_fga_audit_trail;
TIMESTAMP DB_USER OS_USER OBJECT_ OBJECT_N SQL_TEXT
--------- ------- ------- ------- -------- ----------------------
22-SEP-03 BANK    ananda  BANK    ACCOUNTS select * from accounts

 

注意名為 DBA_FGA_AUDIT_TRAIL 的新視圖,它記錄細(xì)粒度的訪問(wèn)信息。其中顯示了審計(jì)事件的時(shí)間標(biāo)記、查詢者的數(shù)據(jù)庫(kù)用戶 ID、操作系統(tǒng)用戶 ID、查詢中所使用表的名稱和所有者,最后還有確切的查詢語(yǔ)句。在 Oracle9i Database 之前不可能得到這種信息,但隨著 FGA 的推出,獲得此信息變得輕而易舉。

在 Oracle9i Database 中,F(xiàn)GA 只能捕獲 SELECT 語(yǔ)句。利用 Oracle Database 10g,F(xiàn)GA 還可以處理 DML 語(yǔ)句 — INSERT、UPDATEDELETE — 使其成為完整的審計(jì)特性。在本系列的第 3 部分,我將詳細(xì)說(shuō)明這些新的功能。

審計(jì)列和審計(jì)條件

讓我們更詳細(xì)地檢查前面的示例。我們要求審計(jì)對(duì)該表所使用的任何 SELECT 語(yǔ)句。但是在現(xiàn)實(shí)中,可能不必要這樣做,并且這樣可能會(huì)使存儲(chǔ)線索的審計(jì)表承受不起。當(dāng)用戶選擇含有敏感信息的余額列時(shí),銀行可能需要進(jìn)行審計(jì),但當(dāng)用戶選擇特定客戶的賬號(hào)時(shí),可能不需要進(jìn)行審計(jì)。列 BALANCE(選擇它可觸發(fā)審計(jì))稱為審計(jì)列,在此情況下,dbms_fga.add_policy 過(guò)程的參數(shù)指定該列如下:

audit_column => 'BALANCE'

 

如果每次用戶從表中選擇時(shí)都記錄審計(jì)線索,則線索的大小將增長(zhǎng),導(dǎo)致空間和管理問(wèn)題,因此您可能希望只有在滿足特定條件時(shí)進(jìn)行審計(jì),而不是每次都進(jìn)行審計(jì)。也許只有當(dāng)用戶訪問(wèn)極為富有的戶主賬號(hào)時(shí),銀行需要審計(jì) — 例如,只有當(dāng)用戶選擇了余額為 11,000 美元或更多的賬號(hào)時(shí)需要審計(jì)。這種類(lèi)型的條件稱為審計(jì)條件,并作為一項(xiàng)參數(shù)傳遞到 dbms_fga.add_policy 過(guò)程,如下所示:

audit_condition => 'BALANCE >= 11000'

 

讓我們來(lái)看這兩個(gè)參數(shù)如何起作用。現(xiàn)在策略定義的形式類(lèi)似于:

begin
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000'
);
end;

 

在此情況下,只有當(dāng)用戶選擇列 BALANCE 并且檢索的行包含大于或等于 $11,000 的余額時(shí),才會(huì)審計(jì)該操作。如果這兩個(gè)條件中有一個(gè)不為真,則該操作不會(huì)被寫(xiě)入到審計(jì)線索中。表 1 中的示例演示了何時(shí)審計(jì)操作和何時(shí)不審計(jì)操作的各種情況。

優(yōu)化器模式

FGA 需要基于開(kāi)銷(xiāo)的優(yōu)化 (CBO),以便正確地工作。在基于規(guī)則的優(yōu)化時(shí),只要用戶從表中進(jìn)行選擇,無(wú)論是否選擇了相關(guān)的列,都始終生成審計(jì)線索,增加了誤導(dǎo)項(xiàng)目出現(xiàn)的可能性。為使 FGA 正確地工作,除了在實(shí)例級(jí)啟用 CBO 之外,在 SQL 語(yǔ)句中應(yīng)該沒(méi)有規(guī)則暗示,并且必須至少使用評(píng)估選項(xiàng)對(duì)查詢中的所有表進(jìn)行分析。

管理 FGA 策略

在前文中您看到了如何添加 FGA 策略。要?jiǎng)h除策略,您可以使用以下語(yǔ)句:

begin
dbms_fga.drop_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS'
);
end;

 

對(duì)于更改策略而言,沒(méi)有隨取隨用的解決方案。要更改策略中的任何參數(shù),必須刪除策略,再使用更改后的參數(shù)添加策略。

有時(shí)您可能需要臨時(shí)禁用審計(jì)收集 — 例如,如果您希望將線索表移動(dòng)到不同的表空間或者要?jiǎng)h除線索表。您可以按如下方法禁用 FGA 策略:

begin
dbms_fga.enable_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS',
enable => FALSE
);
end;

 

要重新啟用它,可使用同一函數(shù),但是將參數(shù) enable 設(shè)置為 TRUE。

處理器模塊

FGA 的功能不只是記錄審計(jì)線索中的事件;FGA 還可以任意執(zhí)行過(guò)程。過(guò)程可以執(zhí)行一項(xiàng)操作,比如當(dāng)用戶從表中選擇特定行時(shí)向?qū)徲?jì)者發(fā)送電子郵件警告,或者可以寫(xiě)到不同的審計(jì)線索中。這種存儲(chǔ)代碼段可以是獨(dú)立的過(guò)程或者是程序包中的過(guò)程,稱為策略的處理器模塊。實(shí)際上由于安全性原因,它不必與基表本身處于同一模式中,您可能希望特意將它放置在不同的模式中。由于只要 SELECT 出現(xiàn)時(shí)過(guò)程就會(huì)執(zhí)行,非常類(lèi)似于 DML 語(yǔ)句啟動(dòng)的觸發(fā)器,您還可以將其看作 SELECT 語(yǔ)句觸發(fā)器。以下參數(shù)指定將一個(gè)處理器模塊指定給策略:

handler_schema 擁有數(shù)據(jù)過(guò)程的模式
handler_module 過(guò)程名稱

處理器模塊還可以采用程序包的名稱來(lái)代替過(guò)程名稱。在這種情況下,參數(shù) handler_module package.procedure 的格式中指定。

FGA 數(shù)據(jù)字典視圖

FGA 策略的定義位于數(shù)據(jù)字典視圖 DBA_AUDIT_POLICIES 中。表 2 包含該視圖中一些重要列的簡(jiǎn)短描述。

審計(jì)線索收集在 SYS 擁有的表 FGA_LOG$ 中。對(duì)于 SYS 擁有的任何原始表,此表上的某些視圖以對(duì)用戶友好的方式顯示信息。DBA_FGA_AUDIT_TRAIL 是該表上的一個(gè)視圖。表 3 包含該視圖中重要列的簡(jiǎn)短描述。

一個(gè)重要的列是 SQL_BIND,它指定查詢中使用的綁定變量的值 — 這是顯著增強(qiáng)該工具功能的一項(xiàng)信息。

另一個(gè)重要的列是 SCN,當(dāng)發(fā)生特定的查詢時(shí),它記錄系統(tǒng)更改號(hào)。此信息用于識(shí)別用戶在特定時(shí)間看到了什么,而不是現(xiàn)在的值,它使用了閃回查詢,這種查詢能夠顯示在指定的 SCN 值時(shí)的數(shù)據(jù)。我將在本系列的第 2 部分中詳細(xì)說(shuō)明這種功能強(qiáng)大的特性。

視圖和 FGA

到目前為止我已經(jīng)討論了在表上應(yīng)用 FGA;現(xiàn)在讓我們來(lái)看如何在視圖上使用 FGA。假定在 ACCOUNTS 表上定義視圖 VW_ACCOUNTS 如下:

create view vw_accounts as select * from accounts;

 

現(xiàn)在,如果用戶從視圖中而不是從表中進(jìn)行選擇:

select * from vw_accounts;

 

您將看到以下審計(jì)線索:

select object_name, sql_text from dba_fga_audit_trail;
OBJECT_NAME SQL_TEXT
----------- -------------------------------------------------
ACCOUNTS    select * from vw_accounts

 

注意,是基表名稱而不是視圖名稱出現(xiàn)在 OBJECT_NAME 列中,因?yàn)橐晥D中的選擇是從基表中進(jìn)行選擇。但是,SQL_TEXT 列記錄了用戶提交的實(shí)際語(yǔ)句,而這正是您希望了解的。

接下來(lái)的步驟

 

閱讀有關(guān) DBMS_FGA 程序包的更多信息

訪問(wèn) Oracle 數(shù)據(jù)庫(kù)主頁(yè)

訪問(wèn) Oracle 平臺(tái)安全性主頁(yè)

 

如果您只希望審計(jì)對(duì)視圖的查詢而不是對(duì)表的查詢,可以對(duì)視圖本身建立策略。通過(guò)將視圖名稱而不是表的名稱傳遞給打包的過(guò)程 dbms_fga.add_policy 中的參數(shù) object_name,可以完成這項(xiàng)工作。隨后 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列將顯示視圖的名稱,并且不會(huì)出現(xiàn)有關(guān)表訪問(wèn)的附加記錄。

其它用途

除了記錄對(duì)表的選擇訪問(wèn),F(xiàn)GA 還可用于某些其它情況:

  • 您可以對(duì)數(shù)據(jù)倉(cāng)庫(kù)使用 FGA,以捕獲特定的表、視圖或物化視圖上發(fā)生的所有語(yǔ)句,這有助于計(jì)劃索引。您不需要到 V$SQL 視圖去獲取這些信息。即使 SQL 語(yǔ)句已經(jīng)超出了 V$SQL 的期限,在 FGA 審計(jì)線索中將會(huì)始終提供它。

     

     

  • 由于 FGA 捕獲綁定變量,它可以幫助您了解綁定變量值的模式,這有助于設(shè)計(jì)直方圖集合等。

     

     

  • 前文已經(jīng)提到,處理器模塊可以向?qū)徲?jì)者或 DBA 發(fā)送警告,這有助于跟蹤惡意應(yīng)用程序。

     

     

  • 由于 FGA 可以作為 SELECT 語(yǔ)句的觸發(fā)器,您可以在需要這種功能的任何時(shí)候使用它。

 

結(jié)論

FGA 使您在 Oracle 數(shù)據(jù)庫(kù)中支持隱私和職能策略。因?yàn)閷徲?jì)發(fā)生在數(shù)據(jù)庫(kù)內(nèi)部而不是應(yīng)用程序中,所以無(wú)論用戶使用的訪問(wèn)方法是什么(通過(guò)諸如 SQL*Plus 等工具或者應(yīng)用程序),都對(duì)操作進(jìn)行審計(jì),允許進(jìn)行非常簡(jiǎn)單的設(shè)置。

下一次我將討論高級(jí) FGA 技術(shù)以及 Oracle Database 10g 中的新特性,這些特性使 FGA 的功能極為強(qiáng)大,適用于所有類(lèi)型的審計(jì)情況。

Arup Nanda (arup@proligence.com) 是 IntelliClaim 的首席數(shù)據(jù)庫(kù)設(shè)計(jì)人員,該公司位于 Connecticut 的 Norwalk,提供對(duì)衛(wèi)生保健保險(xiǎn)索賠管理高度安全和基于規(guī)則的優(yōu)化。他是 2003 年度 Oracle DBA 獎(jiǎng)的獲得者,并與他人合作編著了即將出版的 Oracle 隱私安全性審計(jì)(Rampant TechPress 出版,2003)。

表 1:演示何時(shí)審計(jì)操作以及何時(shí)不審計(jì)操作的各種情況

SQL 語(yǔ)句 審計(jì)狀態(tài)
select balance from accounts; 進(jìn)行審計(jì)。用戶選擇了在添加策略時(shí)所指定的審計(jì)列 BALANCE。
select * from accounts; 進(jìn)行審計(jì)。即使用戶沒(méi)有明確指定列 BALANCE,* 也隱含地選擇了它。
select cust_id from accounts where balance < 10000; 進(jìn)行審計(jì)。即使用戶沒(méi)有明確指定列 BALANCE,where 子句也隱含地選擇了它。
select cust_id from accounts; 不進(jìn)行審計(jì)。用戶沒(méi)有選擇列 BALANCE。
select count(*) from accounts; 不進(jìn)行審計(jì)。用戶沒(méi)有明確或隱含地選擇列 BALANCE。

 

表 2:數(shù)據(jù)字典視圖 DBA_AUDIT_POLICIES 中重要的列

OBJECT_SCHEMA 對(duì)其定義了 FGA 策略的表或視圖的所有者
OBJECT_NAME 表或視圖的名稱
POLICY_NAME 策略的名稱 — 例如,ACCOUNTS_ACCESS
POLICY_TEXT 在添加策略時(shí)指定的審計(jì)條件 — 例如,BALANCE >= 11000
POLICY_COLUMN 審計(jì)列 — 例如,BALANCE
ENABLED 如果啟用則為 YES,否則為 NO
PF_SCHEMA 擁有策略處理器模塊的模式(如果存在)
PF_PACKAGE 處理器模塊的程序包名稱(如果存在)
PF_FUNCTION 處理器模塊的過(guò)程名稱(如果存在)

 

表 3:DBA_FGA_AUDIT_TRAIL 視圖中重要的列

SESSION_ID 審計(jì)會(huì)話標(biāo)識(shí)符;與 V$SESSION 視圖中的會(huì)話標(biāo)識(shí)符不同
TIMESTAMP 審計(jì)記錄生成時(shí)的時(shí)間標(biāo)記
DB_USER 發(fā)出查詢的數(shù)據(jù)庫(kù)用戶
OS_USER 操作系統(tǒng)用戶
USERHOST 用戶連接的機(jī)器的主機(jī)名
CLIENT_ID 客戶標(biāo)識(shí)符(如果由對(duì)打包過(guò)程 dbms_session.set_identifier 的調(diào)用所設(shè)置)
EXT_NAME 外部認(rèn)證的客戶名稱,如 LDAP 用戶
OBJECT_SCHEMA 對(duì)該表的訪問(wèn)觸發(fā)了審計(jì)的表所有者
OBJECT_NAME 對(duì)該表的 SELECT 操作觸發(fā)了審計(jì)的表名稱
POLICY_NAME 觸發(fā)審計(jì)的策略名稱(如果對(duì)表定義了多個(gè)策略,則每個(gè)策略將插入一條記錄。在此情況下,該列顯示哪些行是由哪個(gè)策略插入的。)
SCN 記錄了審計(jì)的 Oracle 系統(tǒng)更改號(hào)
SQL_TEXT 由用戶提交的 SQL 語(yǔ)句
SQL_BIND 由 SQL 語(yǔ)句使用的綁定變量(如果存在)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多