• 說明DBA 負責的安全和審計工作 • 啟用标準資料庫審計 • 指定審計選項 • 複查審計資訊 • 維護審計線索
- 責任分離
• 具有DBA 權限的使用者必須是可信任的。 – 濫用信任 – 用審計線索保護受信任位置 • 必須共同分擔DBA 責任。 • 絕對不要共享帳戶。 • DBA 和系統管理者必須由不同的人員擔任。 • 分離操作員與DBA 的責任。 以下是滿足責任分離的主要要求。 DBA 必須是可信任的:很難限制某個DBA 去做什麼。為了完成工作,DBA 需要很高的權限。DBA 是受信任的職位,是以必須接受全面檢查。即使是受信任的DBA 也必須承擔責任。 考慮以下因素: • 濫用信任:DBA 可能會濫用DBA_USERS視圖中的加密密碼。 • 用審計線索保護受信任位置:謹慎實施審計且遵守準則之後,審計線索會指出特定人員沒有違反規程,也沒有破壞性行為。 如果有惡意使用者試圖讓人懷疑受信任的使用者,設計良好的審計線索可捕獲該行為。 Oracle Database Vault:在下面的情況下,可以使用Oracle Database Vault 選件:資料庫必須強制執行責任分離,或者不允許DBA 檢視某些或所有資料庫方案中的資料。
- 資料庫安全性
安全的系統可確定所包含資料的機密性。有以下幾方面的安全性功能: • 限制對資料和服務的通路 • 驗證使用者 • 監視可疑活動 資料庫安全性 Oracle Database 11g提供了業界最佳的安全系統架構。但是,要讓這個架構起作用,資料庫管理者必須遵循最佳實踐并持續監視資料庫活動。 限制對資料和服務的通路 不是所有使用者都應對所有資料具有通路權。根據資料庫中存儲的内容,可按業務需要、客戶期望以及日益增加的法律限制條款來強制實施有限制的通路。必須保護信用卡資訊、醫療保健資料、身份識别資訊等,使之免受未授權通路的侵害。Oracle DB 通過提供細 粒度的授權控制來限制資料庫通路。限制通路必須包括應用最少權限原則。 驗證使用者 為了強制對敏感資料實施通路控制,系統必須首先知道是誰嘗試通路資料。如果驗證機制有漏洞,就會導緻所有其它安全預防措施變得無用。 最基本的使用者驗證方式是要求使用者提供知道的驗證資訊,如密碼。如果可以保證密碼遵循簡單規則,就可極大地增強系統的安全性。 比較嚴格的驗證方法包括要求使用者提供掌握的某些驗證資訊,如令牌或公共密鑰基礎結構(PKI) 證書。 更嚴格的驗證方法是,通過諸如指紋、虹膜、骨組織模式等唯一生物學特征來識别使用者。 Oracle DB 支援通過進階安全選件來使用進階驗證技術(如基于令牌、生物學和證書的身份識别技術)。 為了防止有人鑽驗證漏洞,必須鎖定目前未使用的使用者帳戶。 監視可疑活動 即使經過授權和驗證的使用者有時也會鑽系統漏洞。為了查到資訊失竊的原因,第一步就是要找出不尋常的資料庫活動,如某個雇員突然開始查詢大量的信用卡資訊、研究結果或其它敏感資訊。為了跟蹤使用者活動和确定可疑活動的變化趨向,Oracle DB 提供了很多審計 工具。
- 監視合規性
監視或審計是安全過程不可缺少的一部分。 請複查下列各項: • 強制性審計 • 标準資料庫審計 • 基于值審計 • 細粒度審計(FGA) • SYSDBA(和SYSOPER)審計 監視合規性 審計意味着捕獲并存儲系統上所發生情況的資訊,這會增加系統必須執行的工作量。 審計必須有重點,以便隻捕獲有意義的事件。如果審計重點設定适當,則會最大程度地減少對系統性能的影響。 如果審計重點設定不當,則會對系統性能産生明顯的影響。 • 強制性審計:不管其它審計選項或參數如何設定,所有Oracle DB 都會審計特定的操作。由于資料庫需要記錄諸如授權使用者連接配接等資料庫活動,是以存在強制性審計日志。 • 标準資料庫審計:通過使用 AUDIT_TRAIL初始化參數在系統級别啟用。啟用審計之後,選擇要審計的對象和權限,并使用AUDIT指令設定審計屬性。 • 基于值審計:擴充了标準資料庫審計的功能,不僅會捕獲發生的審計事件,還會捕獲插入、更新或删除的實際值。 基于值審計是通過資料庫觸發器實施的。 • 細粒度審計(FGA):擴充了标準資料庫審計的功能,進而可捕獲發出的 實際SQL 語句,而不僅僅是發生事件的情況。 • SYSDBA(和SYSOPER)審計:将DBA 與審計者或安全管理者的審計責任分離開,審計者或安全管理者在作業系統審計線索中負責監視DBA 的活動。
- 标準資料庫審計
要使用資料庫審計,必須先将靜态 AUDIT_TRAIL參數設定為指向審計記錄的存儲位置。這樣做可啟用資料庫審計。 啟用資料庫審計并指定審計選項(登入事件、行使的系統和對象權限或使用的SQL 語句)後,資料庫開始收集審計資訊。 AUDIT_TRAIL = { none | os | db [, extended] | xml [, extended] } 如果将 AUDIT_TRAIL設定為OS,審計記錄存儲在作業系統的審計系統中。 在Windows 環境下,審計記錄存儲在事件日志中。 在UNIX 或Linux 環境下,審計記錄存儲在使用 AUDIT_FILE_DEST參數指定的檔案中。 如果将 AUDIT_TRAIL參數設定為DB或DB, EXTENDED,可以在DBA_AUDIT_TRAIL視圖(SYS方案的一部分)中檢視審計記錄。 如果 AUDIT_TRAIL設定為XML或XML,EXTENDED,審計記錄會寫入AUDIT_FILE_DEST參數指向的目錄中的XML 檔案。使用V$XML_AUDIT_TRAIL視圖可檢視此目錄中的所有XML 檔案。 維護審計線索是一項重要的管理任務。審計線索可能會迅速地增長,具體取決于審計選項的審計重點。 如果維護不當,審計線索會建立過多的記錄,以至影響系統的性能。審計開銷與生成的記錄号直接相關。
- 配置審計線索
可使用AUDIT_TRAIL啟用資料庫審計。 可以在Enterprise Manager 中使用“Initialization Parameters(初始化參數)”頁或者在 SQL*Plus 中使用ALTER SYSTEM SET指令來設定AUDIT_TRAIL參數。 ALTER SYSTEM SET AUDIT_TRAIL='XML' SCOPE=SPFILE; 因為這是一個靜态參數,是以您必須重新開機資料庫,更改才能生效。 如果資料庫是使用Database Configuration Assistant (DBCA) 建立的, 預設情況下,audit_trail參數設定為DB。 [email protected]> show parameter AUDIT_TRAIL NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ audit_trail string DB 當AUDIT_TRAIL設定為DB時,預設的行為是将審計線索記錄到資料庫的AUD$表中。 對于大多數站點而言,這類審計不會對資料庫性能造成太大影響。Oracle 建議使用作業系統審計線索檔案。 如果資料庫是手動建立的(使用CREATE DATABASE指令),預設将AUDIT_TRAIL設定為NONE。
- 統一審計線索
Oracle DB 進行标準審計和細粒度審計時跟蹤相同的字段,這可以輕松分析資料庫活動。 為實作這一點,标準審計線索和細粒度審計線索包含了彼此互補的屬性。 通過 标準審計收集的額外資訊包括: • 系統更改号(SCN),記錄對系統的每一項更改。 • 使用者執行的确切SQL 文本及與SQL 文本一起使用的綁定變量。隻有已指定AUDIT_TRAIL=DB, EXTENDED的情況下,這些列才會出現。 通過 細粒度審計收集的額外資訊包括: • 每個審計記錄的序列号。 • 将源自一條語句的多個審計條目聯系起來的語句編号。 公共屬性包括: • 用全球标準時間(UTC) 表示的全球時間戳。這個字段在監視不同地理位置和不同時區中的資料庫時特别有用。 • 每個Real Application Cluster (RAC) 執行個體的唯一執行個體編号。 • 用于将一個事務處理的審計記錄組成一組的事務處理辨別符。 DBA_COMMON_AUDIT_TRAIL視圖中組合了标準審計日志記錄和細粒度審計日志記錄。
- 指定審計選項
SQL 語句審計: AUDIT table; 上面顯示的語句可審計影響表的任何資料定義語言(DDL) 語句,包括CREATE TABLE、DROP TABLE和TRUNCATE TABLE等。 也可按使用者名或者按成功或失敗來設定SQL 語句審計的重點: SQL> AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL; 系統權限審計:可用來 審計行使的任何系統權限(如DROP ANY TABLE)。可按使用者名或者成功或失敗設定審計的重點。 預設情況下, 審計設定為BY ACCESS。 每次行使經審計的系統權限時,都會生成一條審計記錄。 可選擇使用BY SESSION子句将這些記錄組成一組,以便每個會話隻生成一條記錄。 (這樣,如果一個使用者針對另一個使用者的表發出了多條更新語句,則隻收集一條審計記錄。) 使用BY SESSION子句來限制由于審計系統權限而對性能和存儲産生的影響。 系統權限審計(非重點和重點): AUDIT select any table, create any trigger; AUDIT select any table BY hr BY SESSION; 對象權限審計:可用來審計關于表、視圖、過程、序列、目錄和使用者定義資料類型的操作。 這種審計類型可按成功或失敗設定審計的重點,而且可以按會話或通路權限分組。 與系統權限審計不同, 預設情況下,對象權限審計按會話分組。 如果要為每個操作分别生成一條審計線索記錄,必須顯式指定BY ACCESS。 對象權限審計(非重點和重點): AUDIT ALL on hr.employees; AUDIT UPDATE,DELETE on hr.employees BY ACCESS;
- 預設審計
在Oracle Database 11g中啟用審計時,将預設審計那些對安全性非常重要的特定權限和語句。 系統将針對所有使用者,按成功、失敗以及通路來審計上面列出的這些權限和語句。
- Enterprise Manager 審計頁
在Database Control 首頁中,通過單擊“Server(伺服器)”頁籤,然後單擊“Security(安全性)”區域中的“Audit Settings(審計設定)”連結,可通路“Audit(審計)”頁。
“Audit(審計)”頁上包含下列區域: • Configuration(配置):顯示目前的配置參數值,包含用于編輯參數值的連結 • Audit Trails(審計線索):可輕松通路已收集的審計資訊 可使用以下頁籤頁來設定和取消設定審計選項: • Audited Privileges(審計的權限):顯示審計的權限 • Audited Objects(審計的對象):顯示審計的對象 • Audited Statements(審計的語句):顯示審計的語句
- 使用和維護審計資訊
最佳實踐提示 審計會造成性能下降,其幅度與審計線索的寫入數量成比例。要定制滿足站點需求的審計選項,可隻啟用那些滿足安全政策所需的選項。設定審計重點,以減少審計線索條目的數量。
- 基于值的審計
進行資料庫審計時會記錄審計對象中發生的插入、更新和删除操作,但是不會捕獲更改的實際值。 要擴充資料庫審計,可使用基于值的審計,利用資料庫觸發器(事件驅動的PL/SQL 構造)來捕獲更改的值。 使用者在連接配接了相應 觸發器的表中插入、更新或删除資料時,觸發器在背景将審計資訊複制到包含審計資訊的表中。 因為審計觸發器代碼在每次插入、更新或删除操作發生時都必須執行,是以與标準資料庫審計相比,使用基于值的審計時,性能下降幅度比較大。 性能下降幅度取決于觸發器代碼的效率。隻在标準資料庫審計捕獲的資訊不足的情況下,才使用基于值的審計。 基于值的審計由使用者或第三方代碼實施。Oracle DB 提供了可用來建構基于值的審計系統的PL/SQL 構造。 基于值的審計的關鍵部分是 審計觸發器,這是一個單純為了捕獲審計資訊而構造的PL/SQL 觸發器。 以下是一個審計觸發器的典型示例: CREATE OR REPLACE TRIGGER system.hrsalary_audit AFTER UPDATE OF salary ON hr.employees REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW BEGIN IF :old.salary != :new.salary THEN INSERT INTO system.audit_employees VALUES (sys_context('userenv','os_user'), sysdate, sys_context('userenv','ip_address'), :new.employee_id || ' salary changed from '||:old.salary|| ' to '||:new.salary); END IF; END; / 這個觸發器将審計的重點設定為捕獲hr.employees表薪水列的更改。更新某行後,觸發器就會檢查薪水列。 如果新舊薪水不相等,則觸發器會在audit_employees表(通過在SYSTEM方案中單獨執行一項操作而建立)中插入一條審計記錄。 審計記錄中包括了使用者名、執行更改的IP 位址、辨別所更改記錄的主鍵及更改的實際薪水值。 如果标準資料庫審計收集的資料不足,還可使用資料庫觸發器來捕獲關于使用者連接配接的資訊。 通過使用 登入觸發器,管理者可以捕獲用來辨別連接配接到資料庫的使用者的資料。 包括下列各項: • 登入人員的IP 位址 • 用于連接配接到執行個體的程式名的前48 個字元 • 用于連接配接到執行個體的終端名 參考“SYS_CONTEXT” 在許多情況下,會使用細粒度審計(FGA) 功能,而不會使用基于值的觸發器。
- 細粒度審計
• 根據内容監視資料通路 • 審計SELECT、INSERT、UPDATE、DELETE和MERGE • 可連結到表或視圖中的一列或多列 • 可以執行某個過程 • 使用DBMS_FGA程式包進行管理 政策:AUDIT_EMPS_SALARY SELECT name,salary FROM employees WHERE department_id = 10; 細粒度審計 資料庫審計會記錄已發生某個操作這一事實,但是不會捕獲關于導緻操作的語句的資訊。 細粒度審計(FGA) 擴充了審計功能,可捕獲 查詢或處理資料的實際SQL 語句。 與标準資料庫審計或基于值的資料庫審計相比,FGA 将重點審計的範圍設定得更窄。 可将FGA 選項設定為 按表或視圖中的各個列進行審計,還可将其設定為條件選項,以便隻在符合管理者定義的特定規範時才捕獲審計。FGA 政策支援多個相關列。預設情況下,如果其中任何一列出現在SQL 語句中,就會審計該語句。 通過使用DBMS_FGA.ALL_COLUMNS和DBMS_FGA.ANY_COLUMNS,可對語句中是否使用了任何或全部相關列來進行審計。 可使用DBMS_FGA PL/SQL 程式包來建立對目标表或視圖的審計政策。 如果查詢塊中傳回的任何行與審計列和指定的審計條件相比對,則審計事件會導緻在審計線索中建立并存儲審計記錄。 此外,審計事件還可執行某個過程。FGA 自動将審計重點放在語句級别。一個SELECT語句會傳回數千行,但隻生成一條審計記錄。
- FGA 政策
上圖中的示例顯示了使用DBMS_FGA.ADD_POLICY過程建立細粒度審計政策的流程, 該過程接受以下參數。 政策名 建立每個FGA 政策時将指定其名稱。上圖中通過使用以下參數來命名AUDIT_EMPS_SALARY政策: policy_name => 'audit_emps_salary' 審計條件 審計條件是一個SQL 謂詞,用于 定義審計事件何時必須觸發。上圖中,通過使用以下條件參數來審計部門10 中的所有行: audit_condition => 'department_id = 10' 注:細粒度審計檢視查詢的結果集,是以,使用上圖顯示的FGA 政策時,傳回與政策規範相比對行的查詢将導緻 建立一個審計記錄。 例如,查詢“select * from employees”會傳回所有行,包括那些department_id 中含有“10”的行,是以将建立一個審計行。 審計列 審計列定義了要審計的資料。如果此列包括在SELECT語句中或是審計條件允許的選擇,就會發生審計事件。 上圖示例通過使用以下參數來審計兩個列: audit_column => 'SALARY,COMMISION_PCT' 此參數是可選參數。如果未指定此參數,則隻由AUDIT_CONDITION參數确定審計事件是否必須發生。 對象 對象是要審計的表或視圖。可通過以下兩個參數傳遞對象: • 包含對象的方案 • 對象的名稱 上圖通過使用以下參數來審計hr.employees表: object_schema => 'hr' object_name => 'employees' 處理程式 可選的事件處理程式是一個PL/SQL 過程,用于定義在審計期間必須執行的附加操作。 例如,事件處理程式可向管理者發送一個預警頁。 如果未定義審計事件處理程式,則在審計線索中插入審計事件條目。 如果定義了審計事件處理程式,則在審計線索中插入審計條目并執行審計事件處理程式。 審計事件條目包括 導緻事件的FGA 政策、執行SQL 語句的使用者、SQL 語句及其綁定變量。 可通過以下兩個參數傳遞事件處理程式: • 包含PL/SQL 程式單元的方案 • PL/SQL 程式單元的名稱 上圖示例通過使用以下參數來執行SECURE.LOG_EMPS_SALARY過程: handler_schema => 'secure' handler_module => 'log_emps_salary' 預設情況下,審計線索總是将SQL 文本和SQL 綁定資訊寫到LOB。可以更改此預設設定(例如,系統遇到性能下降時)。 狀态 狀态訓示 是否啟用了FGA 政策。上圖示例中,使用以下參數啟用了此政策: enable => TRUE
- 審計的DML 語句:注意事項
• 如果滿足FGA 謂詞并且引用了相關列,則會對記錄進行審計。 • 不管指定列是什麼,都會審計DELETE語句。 • 會審計MERGE語句以及生成的基礎INSERT、UPDATE和DELETE語句。 審計的DML 語句:注意事項 為DML 語句定義了FGA 政策時,如果要處理的資料行(包括新行和舊行)符合政策謂詞标準,就會審計DML 語句。 但是,如果同時在政策定義中指定了相關列,則 當資料符合FGA 政策謂詞并且語句引用了定義的相關列時,才會審計語句。 對于DELETE語句,在定義政策期間指定相關列是沒有用的,這是因為DELETE語句會通路表中的所有列。是以,不管相關列是什麼, 總是要審計DELETE語句。 FGA 支援MERGE語句。如果基礎INSERT、UPDATE和DELETE語句滿足所定義的INSERT、UPDATE或DELETEFGA 政策,則對會對這些語句進行審計。 使用前面定義的FGA 政策時, 會審計第一個語句而不審計第二個語句。部門10 中沒有雇員收到傭金,但是employee_id=200指定了部門10 中的一個雇員。 UPDATE hr.employees SET salary = 1000 WHERE commission_pct = .2; UPDATE hr.employees SET salary = 1000 WHERE employee_id = 200;
- FGA 準則
• 要審計所有行,使用null審計條件。 • 要審計所有列,使用null審計列。 • 政策名必須唯一。 • 建立政策時,審計的表或視圖必須已經存在。 • 如果審計條件文法無效,則通路審計的對象時會出現ORA-28112錯誤。 • 如果表中不存在審計的列,則不會審計任何行。 • 如果不存在事件處理程式,并不會傳回任何錯誤,仍會建立審計記錄。 對于SELECT語句, FGA 會捕獲語句本身而不是實際行。 但是,當FGA 與閃回查詢組合在一起時,會按實際行在該時間點存在的形式重新構造這些行。
- SYSDBA審計
具有SYSDBA或SYSOPER權限的使用者可在資料庫處于關閉狀态時進行連接配接。 • 審計線索必須存儲在資料庫外部。 • 始終會對以SYSDBA或SYSOPER身份執行的連接配接進行審計。 • 可使用AUDIT_SYS_OPERATIONS啟用對SYSDBA或SYSOPER操作的附加審計。 • 可使用AUDIT_FILE_DEST控制審計線索。 SYSDBA和SYSOPER使用者 有權啟動和關閉資料庫。因為這些使用者可以在資料庫處于關閉狀态時進行更改,是以這些權限的審計線索必須存儲在資料庫外部。 Oracle DB 會自動捕獲SYSDBA和SYSOPER使用者的登入事件。這為跟蹤授權或未授權的SYSDBA和SYSOPER操作提供了一種寶貴方法,但隻在檢視作業系統審計線索時才有用。 Oracle DB 始終捕獲授權使用者的登入事件。 如果專門啟用了DBA 審計,則還會捕獲其它操作。 通過設定以下初始化參數可啟用對SYSDBA和SYSOPER使用者的審計: AUDIT_SYS_OPERATIONS=TRUE(預設設定為FALSE。) 如果對SYS操作進行審計,則 AUDIT_FILE_DEST初始化參數會控制審計記錄的存儲位置。 在Windows 平台上,預設情況下,審計線索存儲在Windows 事件日志中。 在UNIX 和Linux 平台上,審計記錄存儲在AUDIT_FILE_DEST位置。
- 維護審計線索
應根據最佳實踐準則來維護審計線索: • 複查和存儲舊記錄。 • 避免出現存儲問題。 • 避免記錄丢失。 維護審計線索 必須維護每種類型的審計線索。基本維護必須包括複查審計記錄及删除資料庫或作業系統中較舊的記錄。審計線索會不斷增長,可填滿可用的存儲空間。如果檔案系統已滿,系統可能會崩潰或隻是導緻出現性能問題。如果資料庫審計線索填滿了表空間,則不能完成審計的操作。如果審計線索填滿了系統表空間,在審計操作停止之前,其它操作的性能會受到影響。 标準審計的審計線索存儲在AUD$表中。FGA 的審計線索存儲在FGA_LOG$表中。預設情況下,這兩個表都是在SYSTEM表空間中建立的。通過使用資料泵導出和導入實用程式可将這兩個表移到另一表空間中。 注:不支援将審計表移到SYSTEM表空間外部。 在從審計表中删除記錄的過程中,可能會丢失審計記錄。
- Oracle Audit Vault
• 合并和保護審計資料 – Oracle 9i 發行版2 和更高的版本 – SQL Server 2000、2005 – IBM DB2 UDB 8.5 和9.2 – Sybase ASE 12.5 - 15.0 – 安全且可伸縮 – 清理源Oracle 審計資料 • 集中式報告 – 報表界面進行了更新, 使用廣受歡迎的Oracle Application Express – 合規性标準報表 – 新增定制報表 • 安全威脅預警 – 檢測和警告安全相關事件 Oracle Audit Vault Oracle Audit Vault 的主要優點如下: • 從Oracle9iDatabase 發行版2 開始,Oracle Audit Vault 可以從Oracle DB、Microsoft SQL Server 2000 和2005、IBM DB2 Unix、Linux、Windows 8.2 和9.5 以及Sybase ASE 12.5 - 15.0 中透明地收集和合并審計資料。 • Oracle Audit Vault 提供内置報表和定制報表,幫助公司簡化了制作合規性報表的工作。此外,Oracle Audit Vault 提供了可以從Oracle BI Publisher、Oracle Application Express 或任何第三方報表工具通路的開放式審計倉庫方案。 • Oracle Audit Vault 對可疑活動發出預警,進而幫助檢測和防範内部威脅。 • Oracle Audit Vault 的核心是一個安全且可伸縮的審計倉庫,它基于Oracle 資料倉庫技術建構并由Oracle 的資料庫安全産品(包括Oracle Database Vault 和Oracle 進階安全選件)保護安全。Oracle Audit Vault 包括Oracle 分區功能,以提高易管理性和性能。 • Oracle Audit Vault 集中管理資料庫審計設定(政策),可幫助公司降低IT 成本,同時使IT 安全負責人和内部審計人員能夠更輕松地執行其工作。