的 說明DBA負責的安全和審計工作 啟用標準資料庫審計 指定審計選項 複查審計信息 維護審計線索 《Oracle Database Concepts》《Oracle資料庫管理員指南》《Oracle 資料庫安全性指南》 責任分離 責任分離的主要要求 DBA必須是可信任的,同時也必須承擔責任(考慮因素) ...
的 說明DBA負責的安全和審計工作 啟用標準資料庫審計 指定審計選項 複查審計信息 維護審計線索 《Oracle Database Concepts》《Oracle資料庫管理員指南》《Oracle 資料庫安全性指南》 責任分離 責任分離的主要要求 DBA必須是可信任的,同時也必須承擔責任(考慮因素) 濫用信任:DBA可能會濫用DBA_USERS視圖中的加密密碼 用審計線索保護受信任位置:審計線索會指定特定人員有沒有違反規程和有沒有破壞性行為。 必須共同分擔DBA責任 絕對不要共用賬戶 DBA和系統管理員必須由不同的人員擔任 分離操作員與DBA的責任 Oracle Database Valut: 資料庫必須強制執行責任分離,或者不允許DBA查看某些或所有資料庫schema中的數據,可以使用Oracle Database Vault選件。 資料庫安全性 安全性功能 -限制對數據和服務的訪問,Oracle DB通過提供細粒度的授權控制來限制資料庫訪問。 -驗證用戶 遵循簡單規則的口令 比較嚴格的驗證方法,令牌或公共密鑰基礎結構(PKI)證書 更嚴格的驗證方法,通過諸如指紋,虹膜,骨組織模式等唯一生物學特征來識別用戶。 監視可疑活動 監視合規性 監視或審計是安全過程不可缺少的一部分 強制性審計:不管其他審計選項或參數如何設置,所有Oracle DB都會審計特定的操作。由於資料庫需要記錄諸如授權用戶連接等資料庫活動,所以存在強制審計日誌。 標準資料庫審計:通過使用audit_trail初始化參數在系統級別啟用。啟用審計之後,選項要審計的對象和許可權,並使用audit命令設置審計屬性。 基於值審計:擴展了標準資料庫審計的功能,不僅會捕獲發生的審計事件,還會捕獲插入,更新或刪除的實際值。基於值審計是通過資料庫觸發器實施的。 細粒度審計(FGA):擴展了標準資料庫審計的功能,從而可捕獲發出的實際SQL語句,而不僅僅是發生事件的情況。 SYSDBA(和SYSOPER)審計:將DBA與審計者或安全管理員的審計責任分離開,審計者或安全管理員在操作系統審計線索中負責監視DBA的活動。 標準資料庫審計
使用資料庫審計,必須先將靜態AUDIT_TRAIL參數設置為指向審計記錄的存儲位置。這樣做可啟用資料庫審計。啟用資料庫審計並指定審計選項(登錄事件,執行的系統和對象許可權或使用的SQL語句)後,資料庫開始收集審計信息。 -AUDIT_TRAIL參數設置為OS,審計記錄存儲在操作系統的審計系統中。ADUIT_FILE_DEST參數指定的文件中 -ADUIT_TRAIL參數設置為DB或DB,EXTENDED,可以在DBA_ADUIT_TRAIL視圖參看審計記錄 -ADUIT_TRAIL參數設置XML或XML,EXTENDED,審計記錄會寫入ADUIT_FILE_DEST參數指定的目錄中的XML文件。使用V$XML_AUDIT_TRAIL視圖可查看目錄中的所有XML文件。 維護審計線索是一項重要的管理任務。審計線索可能會迅速地增長,具體取決於審計選項的審計重點。如果維護不當,審計線索會創建過多的記錄,以至影響系統的性能。審計開銷與生成的記錄號直接相關。 ALTER SYSTEM SET ADUIT_TRAIL=[NONE|OS|DB|DB,EXTENDED|XML|XML,EXTENDED] SCOPE=SPFILE; 修改靜態初始化參數之後重新啟動資料庫。 統一審計線索
Oracle DB進行標準審計和細粒度審計時跟蹤相同的欄位,這使您可以輕鬆分析資料庫活動。為實現這點,標準審計線索和細粒度審計線索包含了彼此互補的屬性。 通過標準審計收集的額外信息包括: -系統更改號(SCN),記錄對系統的每一項更改。 -用戶執行的確切SQL文本與SQL文本一起使用的綁定變數。只有已指定ADUIT_TRAIL=DB,EXTENDED的情況下,這些列才會出現。 通過細粒度審計收集的額外信息包括: -每個審計記錄的序列號 -將源自一條語句的多個審計條目聯繫起來的語句編號。 公共屬性包括: -用全球標準時間(UTC)表示的全球時間戳。這個欄位在監視不同地理位置和不同時區時的資料庫時特別有用。 -每個Real Application Cluster(RAC)實例的唯一實例編號。 -用於將一個事務處理的審計記錄組成一組的事務處理標識符。 DBA_COMMON_AUDIT_TRAIL視圖組合了標準審計日誌記錄和細粒度審計日誌記錄。 指定審計選項 -SQL語句審計 AUDIT <TABLE_NAME>; 可按用戶名或者按成功或失敗來設置SQL語句審計的重點: SQL>AUDIT TABLE BY HR WHENEVER NOT SUCCESSFUL; -系統許可權審計(非重點和重點) AUDIT SELECT ANY TABLE,CREATE ANY TRIGGER; AUDIT SELECT ANY TABLE BY HR BY SESSION; 審計設置可以為<BY SESSION>或<BY ACCESS> -對象許可權審計(非重點和重點) AUDIT ALL ON HR.EMPLOYEES; AUDIT UPDATE,SELECT,ON HR.EMEPLOYEES BY ACCESS; 可用來審計關於表,視圖,過程,序列,目錄和用戶定義數據類型的操作.這種審計類型可按成功或失敗設置審計的重點,而且可以按會話或訪問許可權分組.與系統許可權審計不同,預設情況下,對象許可權審計按會話分組.如果要為每個操作分別生成一條審計線索記錄,必須顯式指定<BY ACCESS>
audit all on hr.employees;--開啟審計 col username format a20 col userhost format a30 col sql_text format a30 set linesize 300 select username,userhost,sql_text,timestamp from dba_audit_trail where username='DBMONITOR' and timestamp>=trunc(sysdate) and sql_text is not null / noaudit all on hr.employees;--關閉審計
使用和維護審計信息 最佳實踐提示 審計會造成性能下降,其幅度與審計線索的寫入數據成比例.要定製滿足站點需求的審計選項,可只啟用那些滿足安全策略所需的選項.設置審計重點,以減少審計線索條目的數量.
基於值的審計 進行資料庫審計時會記錄審計對象中發生的插入,更新和刪除操作,但是不會捕獲更改的實際值.要擴展資料庫審計,可使用基於值的審計,利用資料庫觸發器(事件驅動的PL/SQL構造)來捕獲更改的值. CREATE OR REPLACE TRIGGER HR.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 HR.AUDIT_EMPLOYEES VALUES(SYS_CONTEXT('USERENV','OS_USER'),SYSDATE,SYS_CONTEXT('USERENV','IP_ADDRESS'),:NEW.EMPLOYEE_ID||' SALARY CHANGED FOR '|| :OLD.SALARY||' TO '||:NEW.SALARY); END IF; END; / 細粒度審計 -根據內容監視數據訪問 -審計SELECT,INSERT,UPDATE,DELETE和MERGE -可鏈接到表或視圖中的一列或多列 -可以執行某個過程 -使用DBMS_FGA程式包進行管理 資料庫審計會記錄已發生某個操作這一事實,但是不會捕獲關於導致操作的語句的信息。細粒度審計(FGA)擴展了審計功能,可捕獲查詢或處理數據的實際SQL語句。與標準資料庫審計或基於之的資料庫審計相比,FGA將重點審計的範圍設置得更窄。可將FGA選項設置為按表或視圖中的各個列進行審計,還可以將其設置為條件選項,以便只在符合管理員定義的特定規範時才捕獲審計。FGA策略支持多個相關列。預設情況下,如果其中任何一個出現在SQL語句中,就會審計該語句。通過使用DBMS_FGA.ALL_COLUMNS和DBMS_FGA.ANY_COLUMNS,可對語句中是否使用了任何或全部相關列來進行審計。 可以使用DBMS_FGA PL\SQL程式包來創建對目標表或視圖的審計策略。如果查詢塊中返回的任何與審計列和指定的審計條件相匹配,則審計事件會導致在審計線索中創建並存儲審計記錄。此外,審計事件還可執行某個過程。FGA自動將審計重點放在語句級別。一個SELECT語句會返回數千行,但只生成一條審計記錄。 FGA策略
COL username FORMAT a20 COL userhost FORMAT a30 COL sql_text FORMAT a30 SET LINESIZE 300 SELECT username, userhost, sql_text, timestamp FROM dba_audit_trail WHERE username = 'DBMONITOR' AND timestamp >= TRUNC (SYSDATE) AND sql_text IS NOT NULL / BEGIN DBMS_FGA.add_policy (object_schema => 'HR',--FGA審計對象schema object_name => 'EMPLOYEES',--審計table policy_name => 'audit_emps_salary',--FGA審計名稱 audit_condition => 'department_id=10',--FGA審計條件 audit_column => 'SALARY,COMMISSION_PCT',--FGA審計的列名 handler_schema => 'secure',--指定調用schema handler_module => 'log_emps_salary',--指定執行程式 enable => TRUE,--啟用審計 statement_types => 'SELECT,UPDATE');--審計dml類型 END; / BEGIN--刪除fga審計 DBMS_FGA.drop_policy (object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'audit_emps_salary'); END; / BEGIN DBMS_FGA.add_policy (object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'audit_emps_salary', audit_condition => 'department_id=10', audit_column => 'SALARY,COMMISSION_PCT', --handler_schema => 'secure',--如果不指定存儲路徑,預設會存放在dba_fga_audit_trail視圖中 -- handler_module => 'log_emps_salary', enable => TRUE, statement_types => 'SELECT,UPDATE'); END; / SELECT salary FROM employees WHERE department_id = 10; SELECT commission_pct FROM employees WHERE department_id = 10; SELECT salary, commission_pct FROM employees WHERE department_id = 10; DELETE employees WHERE department_id = 10; SELECT salary, commission_pct FROM employees; COL DB_USER FORMAT a20 COL userhost FORMAT a30 COL sql_text FORMAT a30 SET PAGESIZE 600 SET LINESIZE 300 ALTER SESSION SET nls_date_format='YYYY-MM-DD HH24:MI:SS'; SELECT DB_USER, userhost, sql_text, timestamp FROM dba_fga_audit_trail WHERE --DB_USER='DBMONITOR' timestamp >= TRUNC (SYSDATE) AND sql_text IS NOT NULL / DB_USER USERHOST SQL_TEXT TIMESTAMP -------------------- ------------------------------ ------------------------------ ------------------- DBMONITOR ***************** SELECT salary FROM hr.employee 2018-03-30 11:04:44 s WHERE department_id=10 HR ***************** SELECT salary FROM employees w 2018-03-30 11:15:59 here department_id=10 HR ***************** SELECT commission_pct FROM emp 2018-03-30 11:16:31 loyees WHERE department_id=10 HR ***************** SELECT salary,commission_pct f 2018-03-30 11:17:00 rom employees WHERE department _ID=10 HR ***************** SELECT salary,commission_pct f 2018-03-30 11:17:00 rom employees
審計的DML語句,註意事項 -如果滿足FGA謂詞並且引用了相關列,則會對記錄進行審計. -無論指定的列是什麼,都會審計DELETE語句. -會審計MEEGE語句以及生成的INSERT/UPDATE和DELETE語句。
BEGIN DBMS_FGA.add_policy (object_schema => 'HR', object_name => 'EMP', policy_name => 'audit_emp_salary', audit_condition => 'department_id=90', --audit_column => 'SALARY,COMMISSION_PCT', --handler_schema => 'secure', -- handler_module => 'log_emps_salary', enable => TRUE, statement_types => 'DELETE'); END; / BEGIN DBMS_FGA.drop_policy (object_schema => 'HR', object_name => 'EMP', policy_name => 'audit_emp_salary'); END; / DELETE emp WHERE department_id = 90; SELECT SALARY, COMMISSION_PCT FROM emp WHERE department_id = 90; DELETE emp ; SELECT DB_USER, userhost, sql_text, timestamp FROM dba_fga_audit_trail WHERE --DB_USER='DBMONITOR' timestamp >= TRUNC (SYSDATE) AND sql_text IS NOT NULL /
FGA準則 -要審計所有行,請使用NULL審計條件 -要審計所有列,請使用NULL審計列 -策略名必須唯一 -創建策略時,審計的表或視圖必須已經存在 -如果審計條件語法無效,則訪問審計的對象時會出現ORA-28112錯誤 -如果表中不存在審計的列,則不會審計任何行 -如果不存在事件處理程式,並不會返回任何錯誤,仍會創建審計記錄。查詢時觸發‘ORA-28137: 無效FGA 審計程式’ SYSDBA審計 具有SYSDBA或SYSOPER許可權的用戶可在資料庫處於關閉狀態時進行連接。 -審計線索必須存儲在資料庫外部 -始終會對以SYSDAB或SYSOPER身份執行的連接進行審計 -可使用AUDIT_SYS_OPEARATIONS啟用對SYSDBA或SYSOPER操作的附加審計 -可使用AUDIT_FILE_DEST控制審計存儲路徑 維護審計線索 應根據最佳實踐準則來維護審計線索: -複查和存儲舊記錄 -避免出現存儲問題 -避免記錄丟失,標準審計的審計線索存儲在AUD$表中,FGA審計線索存儲在FGA_LOG$表中。預設情況下,這兩個表都是SYSTEM表空間中。通過使用數據泵導出和導入可將這兩個表遷移到另一個表空間中。
ALTER TABLE SYS.AUD$ MOVE TABLESPACE <TABLESPACE_NAME>; SYS.FGA_LOG$--表上有LONG欄位無法進行直接遷移,可採用DROP再CREATE. 3:53:14 SQL> select table_name,tablespace_name from dba_tables 13:53:21 2 where table_name='AUD$'; TABLE_NAME TABLESPACE_NAME ---------------- ------------------------------------------------------------ AUD$ TP 13:53:23 SQL> ALTER TABLE SYS.AUD$ MOVE TABLESPACE SYSTEM; 13:53:59 SQL> select table_name,tablespace_name from dba_tables 13:54:02 2 where table_name='AUD$'; TABLE_NAME TABLESPACE_NAME ----------------- ------------------------------------------------------------ AUD$ 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 -合規性標準報表 -新增定製報表 安全威脅預警 -檢測和警告安全相關事件 總結 審計類型:強制審計,標準審計,基於值的審計,細粒度的審計,SYSDBA/SYSOPER審計 標準審計:audit_trail參數控制,NONE,OS,DB, DB EXTENDED,XML,XML, XML,EXTENDED,通過DBA_AUDIT_TRAIL視圖查詢,基表AUD$ 基於值的審計:觸發器實現 細粒度的審計:FGA,DBMS_FGA.ADD_POLICY,通過DBA_FGA_AUDIT_TRAIL視圖查看,基表FGA_LOG$ SYSDBA/SYSOPER審計