oracle審計功能
轉載自:http://www.oraclefans.cn/forum/showblog.jsp?rootid=4675 作者:白鱔
審計是對選定的使用者動作的監控和記錄,通常用於:
u 審查可疑的活動。例如:資料被非授權使用者所刪除,此時安全管理員可決定對該 資料庫的所有連線進行審計,以及對資料庫的所有表的成功地或不成功地刪除進行審計。
u 監視和收集關於指定資料庫活動的資料。例如:DBA可收集哪些被修改、執行了多少次邏輯的I/O等統計資料。
ORACLE支援三種審計型別:
u 語句審計,對某種型別的SQL語句審計,不指定結構或物件。
u 特權審計,對執行相應動作的系統特權的使用審計。
u 物件審計,對一特殊模式物件上的指定語句的審計。
ORACLE所允許的審計選擇限於下列方面:
u 審計語句的成功執行、不成功執行,或者其兩者。
u 對每一使用者會話審計語句執行一次或者對語句每次執行審計一次。
u 對全部使用者或指定使用者的活動的審計。
當資料庫的審計是使能的,在語句執行階段產生審計記錄。審計記錄包含有審計的操作、使用者執行的操作、操作的日期和時間等資訊。審計記錄可存在資料字典表(稱為審計記錄)或作業系統審計記錄中。資料庫審計記錄是在SYS模式的AUD$表中。
[@more@]
Oracle 審計功能 簡單介紹
Oracle的審計機制是用來監視使用者對ORACLE資料庫所做的各種操作。
在預設情況下,系統的審計功能是關閉的。可以在INIT.ORA引數檔案中將引數AUDIT_TRAIL設定為正整數來啟用。審計功能啟用後,任何擁有表或檢視的使用者就可以進行如下審計操作:
·使用SQL語句來挑選審計選擇項;
·審計對該使用者所擁有的表或檢視的成功或不成功的存取企圖;
·有選擇的審計各種型別的SQL操作(SELECT、UPDATE、INSERT、DELETE);
·控制審計的程度(是以SESSION還是ACCESS為單位)。對於DBA使用者還可以以下審計功能:
·對成功的LOGON、LOGOFF、GRANT、REVOKE進行審計;例如:
審計不成功的登陸、建立表、刪除表、修改表、drop表,及其授權操作。
audit session whenever not successful;
audit create any table, delete any table, drop any table, alter any table by access ;
audit table by access ;
audit create user, alter user, drop user by access ;
audit grant table, grant procedure by access;
撤銷所有審計:
noaudit all;
noaudit all privileges;那麼,如何對DBA的所有操作進行審計?
執行結果為select 'AUDIT ALL PRIVILEGES by '||a.granted_role||';' from dba_role_privs a where a.granted_role = 'DBA';的查詢
或者直接用更簡單的方式:
audit DBA;查詢審計結果:
DBA_AUDIT_TRAIL 審計追蹤記錄
DBA_AUDIT_SESSION SESSION審計記錄
DBA_AUDIT_STATEMENT STATEMENT審計記錄
DBA_AUDIT_OBJECT 物件審計記錄
ALL_DEF_AUDIT_OPTS 所有預設審計
DBA_STMT_AUDIT_OPTS 所有語句審計
DBA_PRIV_AUDIT_OPTS 所有許可權審計
DBA_OBJ_AUDIT_OPTS 所有物件審計相關表和檢視:
SYS.AUD$ 是唯一保留審計結果的表。其它的都是檢視。 STMT_AUDIT_OPTION_MAP 包含有關審計選項型別程式碼的資訊由SQL.BSQ 指令碼在CREATEDATABASE 的時候建立
AUDIT_ACTIONS 包含對審計跟蹤動作型別程式碼的說明
ALL_DEF_AUDIT_OPTS 包含預設物件審計選項。當建立物件時將應用這些選項DBA_STMT_AUDIT_OPTS 描述由使用者設定的跨系統的當前系統審計選項 (這張表記錄了開啟哪些審記功能)
DBA_PRIV_AUDIT_OPTS 描述由使用者正在審計的跨系統的當前系統許可權
DBA_OBJ_AUDIT_OPTS 描述在所有物件上的審計選項
USER_OBJ_AUDIT_OPTS USER 檢視描述當前使用者擁有的所有物件上的審計選項
在預設情況下,系統的審計功能是關閉的。可以在INIT.ORA引數檔案中將引數AUDIT_TRAIL設定為正整數來啟用。
·使用SQL語句來挑選審計選擇項;
·審計對該使用者所擁有的表或檢視的成功或不成功的存取企圖;
·有選擇的審計各種型別的SQL操作(SELECT、UPDATE、INSERT、DELETE);
·控制審計的程度(是以SESSION還是ACCESS為單位)。
·對成功的LOGON、LOGOFF、GRANT、REVOKE進行審計;
審計不成功的登陸、建立表、刪除表、修改表、drop表,及其授權操作。
audit session whenever not successful;
audit create any table, delete any table, drop any table, alter any table by access ;
audit table by access ;
audit create user, alter user, drop user by access ;
audit grant table, grant procedure by access;
撤銷所有審計:
noaudit all;
noaudit all privileges;
執行結果為select 'AUDIT ALL PRIVILEGES by '||a.granted_role||';' from dba_role_privs a where a.granted_role = 'DBA';的查詢
或者直接用更簡單的方式:
audit DBA;
DBA_AUDIT_TRAIL 審計追蹤記錄
DBA_AUDIT_SESSION SESSION審計記錄
DBA_AUDIT_STATEMENT STATEMENT審計記錄
DBA_AUDIT_OBJECT 物件審計記錄
ALL_DEF_AUDIT_OPTS 所有預設審計
DBA_STMT_AUDIT_OPTS 所有語句審計
DBA_PRIV_AUDIT_OPTS 所有許可權審計
DBA_OBJ_AUDIT_OPTS 所有物件審計
SYS.AUD$ 是唯一保留審計結果的表。其它的都是檢視。
AUDIT_ACTIONS 包含對審計跟蹤動作型別程式碼的說明
ALL_DEF_AUDIT_OPTS 包含預設物件審計選項。當建立物件時將應用這些選項
DBA_PRIV_AUDIT_OPTS 描述由使用者正在審計的跨系統的當前系統許可權
DBA_OBJ_AUDIT_OPTS 描述在所有物件上的審計選項
USER_OBJ_AUDIT_OPTS USER 檢視描述當前使用者擁有的所有物件上的審計選項
設定ORACLE審計
下列步驟可以設定ORACLE的審計功能:
1. 修改引數檔案(init
l DB/TRUE:啟動審計功能,並且把審計結果存放在資料庫的 SYS.AUD$ 表中
l OS:啟動審計功能,並把審計結果存放在作業系統的審計資訊中
l DB_EXTENDED:具有DB/TRUE的功能,另外填寫AUD$的SQLBIND和SQLTEXT欄位
l NONE/FALSE:關閉審計功能
2.如果設定 AUDIT_TRAIL = OS, 還需要修改引數AUDIT_FILE_DEST。
如果作業系統支援設定AUDIT_TRAIL=OS,檔案會自動存放在AUDIT_FILE
_DEST所指定的目錄下,並且檔名包含程式的PID。
比如:
AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit
$ ls -l $ORACLE_HOME/rdbms/audit
-rw-rw---- 1 ora92 dba 881 Mar 17 09:57 ora_13264.aud
$ ps -ef|grep 13264
ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)
SQL> select spid, program, username from v$process;
SPID PROGRAM USERNAME
------ -------------------------------------------- -------------
...
13264 oracle@frhp11 (TNS V1-V3) ora92
注意:WINDOWS NT不使用AUDIT_FILE_DEST引數,如果使用OS設定,那麼審計資訊會存放在WINDOWS NT的事件日誌裡。下面的章節會有專門的介紹。
3. 確認審計相關的表是否已經安裝
SQLPLUS> connect / AS SYSDBA
SQLPLUS> select * from sys.aud$; -- 沒有記錄返回
SQLPLUS> select * from dba_audit_trail; -- 沒有記錄返回
如果做上述查詢的時候發現表不存在,說明審計相關的表還沒有安裝,需要安裝。
SQLPLUS> connect / as sysdba
SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql
審計表安裝在SYSTEM表空間。所以要確保SYSTEM表空間又足夠的空間存放審計資訊。
4. 關閉並重啟資料庫
5. 設定所需要的審計資訊
下面是一個例子
SQL> connect system/manager
SQL> grant audit system to scott;
SQL> connect scott/tiger
SQL> audit session;
停止審計:
SQL> noaudit session;
設定審計的例項:對試圖嘗試口令的訪問的審計
本節討論的是一個審計的例項,用於記錄嘗試透過野蠻嘗試法破譯ORACLE帳號口令的例子:
1. 修改審計相關引數(參照上一節介紹的方法)
2. 重啟資料庫
3. 設定審計資訊
SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
4. 查詢AUD$
SQL> select returncode, action#, userid, userhost, terminal,timestamp
from aud$
RETURNCODE ACTION# USERID USERHOST TERMINAL
---------- ---------- -------- -------------------- --------------------
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
ORA-1017的含義為錯誤的使用者名稱口令。透過檢視AUD$表可以清楚地看到WPRATA-BR嘗試破譯SCOTT的口令。可以透過下面一個儲存過程來分析AUD$表,找出可疑的資訊:
create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)
is
USER_ID VARCHAR2(20);
cursor c1 is select userid,count(*) from sys.aud$ where returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd')
group by userid;
cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')
from sys.aud$ WHERE returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID;
ct PLS_INTEGER;
V_USERHOST VARCHAR2(40);
V_TERMINAL VARCHAR(40);
V_DATE VARCHAR2(40);
BEGIN
OPEN C1;
dbms_output.enable(1024000);
LOOP
FETCH C1 INTO USER_ID,CT;
EXIT WHEN C1%NOTFOUND;
IF(CT>=TIMES) THEN
DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'||USER_ID);
OPEN C2;
LOOP
FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;
DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',TIME:'||V_DATE);
EXIT WHEN C2%NOTFOUND;
END LOOP;
close c2;
END IF;
END LOOP;
close c1;
END;
/
一下是執行結果:
SQL>set serveroutput on;
SQL> execute auditlogin('2004-01-01',2);
USER BROKEN ALARM:SYS
HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00
HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01
HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
PL/SQL 過程已成功完成。
將審計相關的表移動到其他表空間
由於AUD$表等審計相關的表存放在SYSTEM表空間,因此為了不影響系統的效能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace
sql>alter index I_aud1 rebuild online tablespace
SQL> alter table audit$ move tablespace
SQL> alter index i_audit rebuild online tablespace
SQL> alter table audit_actions move tablespace
SQL> alter index i_audit_actions rebuild online tablespace
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/786540/viewspace-1004200/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 審計功能Oracle
- ORACLE的 審計功能Oracle
- Oracle FGA審計功能Oracle
- 關於oracle審計功能Oracle
- Oracle Database標準審計和細粒度審計功能OracleDatabase
- Oracle audit 審計功能說明Oracle
- 初識ORACLE的審計功能Oracle
- 開啟Oracle的審計功能Oracle
- oracle10g 審計功能Oracle
- 轉載:Oracle審計功能(Oracle10g)Oracle
- oracle 11g 系統審計功能Oracle
- Oracle資料庫審計功能介紹Oracle資料庫
- oracle 11g 關閉審計功能Oracle
- MySQL審計功能MySql
- Oracle Audit 審計功能的認識與使用Oracle
- 關於oracle11g的審計功能Oracle
- oracle9i審計功能的開啟和審計策略的設定方法Oracle
- Oracle審計Oracle
- oracle 審計Oracle
- 快速實現oracle10g的審計功能Oracle
- ORACLE SYSTEM表空間異常與審計的功能Oracle
- mysql啟用審計功能MySql
- LINUX AS 5 審計功能Linux
- 【實驗】【審計】【FGA】使用Oracle的審計功能監控資料庫中的可疑操作Oracle資料庫
- Oracle審計(轉)Oracle
- Oracle:審計清理Oracle
- Oracle審計列表Oracle
- Oracle 審計 auditOracle
- Oracle審計例子Oracle
- oracle 審計(Audit)Oracle
- 【Mysql】mysql開啟審計功能MySql
- ORACLE AUDIT審計(1)Oracle
- oracle細粒度審計Oracle
- oracle標準審計Oracle
- CQ Tech | 解析 CloudQuery 審計分析功能Cloud
- Elasticsearch Auditing(es的審計功能)Elasticsearch
- oracle審計-細粒度(轉)Oracle
- oracle 細粒度審計(fga)Oracle