[轉]Oracle DB審計

• 說明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
sys@TEST0924> 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 和200五、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 安全負責人和內部審計人員可以更輕鬆地執行其工做。

 

來源:http://blog.csdn.net/rlhua/article/details/12292365數據庫

相關文章
相關標籤/搜索