Oracle審計--AUD$佔用空間較大處理方案
SQL> select action_name,count(*) from dba_audit_trail group by action_name;一般是LOGON和LOGOFF型別的審計最多。取消此類審計:
SQL> noaudit session whenever successful;一般來說,如果空間不是佔的特別多,此類審計還是保留為好。可以取消對一些登入特別頻繁的使用者的審計,比如DBSNMP使用者:
SQL> noaudit session by dbsnmp;
關閉審計後,對錶sys.aud$進行清理
truncate table sys.aud$;
1、什麼是審計
審計(Audit)用於監視使用者所執行的操作,並且會將審計跟蹤結果存放到OS檔案(預設位置為$ORACLE_BASE/admin/$ORACLE_SID/adump/)或資料庫(儲存在system表空間中的SYS.AUD$表中,可透過檢視dba_audit_trail檢視)中。預設情況下11g之前審計是沒有開啟的。
不管你是否開啟資料庫的審計功能,以下這些會強制記錄:用管理員許可權連線Instance;啟動資料庫;關閉資料庫。
2、和審計相關的兩個主要引數
Audit_sys_tions:
預設為false,當設定為true時,所有sys使用者(包括以sysdba,sysoper身份登入的使用者)的操作都會被記錄,audit
trail不會寫在aud$表中,這個很好理解,如果資料庫還未啟動aud$不可用,那麼像conn /as
sysdba這樣的連線資訊,只能記錄在其它地方。如果是windows平臺,audti trail會記錄在windows的事件管理中,如果是/unix平臺則會記錄在audit_file_dest引數指定的檔案中。
Audit_trail:
None:11G之前是預設值,不做審計;
DB:將audit trail
記錄在資料庫的審計相關表中,如aud$,審計的結果只有連線資訊;
DB,Extended:這樣審計結果裡面除了連線資訊還包含了當時執行的具體語句;
OS:將audit
trail 記錄在作業系統檔案中,檔名由audit_file_dest引數指定;
:10g裡新增的。
注:這兩個引數是static引數,需要重新啟動資料庫才能生效。
3、審計級別
當開啟審計功能後,可在三個級別對資料庫進行審計:Statement(語句)、ivilege(許可權)、object(物件)。
Statement:
按語句來審計,比如audit table 會審計資料庫中所有的create table,drop table,truncate
table語句,alter by
cmy會審計cmy使用者所有的資料庫連線。
Privilege:
按許可權來審計,當使用者使用了該許可權則被審計,如執行grant select any table to a,當執行了audit
select any table語句後,當使用者a 訪問了使用者b的表時(如select * from b.t)會用到select any
table許可權,故會被審計。注意使用者是自己表的所有者,所以使用者訪問自己的表不會被審計。
Object:
按物件審計,只審計on關鍵字指定物件的相關操作,如aduit alter,delete,drop,insert on cmy.t
by scott;
這裡會對cmy使用者的t表進行審計,但同時使用了by子句,所以只會對scott使用者發起的操作進行審計。注意Oracle沒有提供對schema中所有物件的審計功能,只能一個一個物件審計,對於後面建立的物件,Oracle則提供on
default子句來實現自動審計,比如執行audit drop on default by ;後,
對於隨後建立的物件的drop操作都會審計。但這個default會對之後建立的所有資料庫物件有效,似乎沒辦法指定只對某個使用者建立的物件有效,想比trigger可以對schema的DDL進行“審計”,這個功能稍顯不足。
4、審計的一些其他選項
by access / by session:
by access 每一個被審計的操作都會生成一條audit trail。
by
session 一個會話裡面同型別的操作只會生成一條audit trail,預設為by session。
whenever [not] successful:
whenever successful
操作成功(dba_audit_trail中returncode欄位為0) 才審計,
whenever not successful
反之。省略該子句的話,不管操作成功與否都會審計。
5、和審計相關的檢視
dba_audit_trail:儲存所有的audit
trail,實際上它只是一個基於aud$的檢視。其它的檢視dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一個子集。
dba_stmt_audit_opts:可以用來檢視statement審計級別的audit
options,即資料庫設定過哪些statement級別的審計。dba_obj_audit_opts,dba_priv_audit_opts檢視功能與之類似
all_def_audit_opts:用來檢視資料庫用on
default子句設定了哪些預設物件審計。
6、取消審計
將對應審計語句的audit改為noaudit即可,如audit session whenever successful對應的取消審計語句為noaudit session whenever successful;
7、10g中的審計告知一切
Oracle 資料庫 10g 審計以一種非常詳細的級別捕獲使用者行為,它可以消除手動的、基於觸發器的審計。
假定使用者 Joe
具有更新那張表的許可權,並按如下所示的方式更新了表中的一行資料:
update SCOTT.EMP set salary = 12000 where
empno = 123456;
您如何在資料庫中跟蹤這種行為呢?在 Oracle 9i
資料庫及其較低版本中,審計只能捕獲“誰”執行此操作,而不能捕獲執行了“什麼”內容。例如,它讓您知道 Joe 更新了 SCOTT
所有的表EMP,但它不會顯示他更新了該表中員工號為 123456 的薪水列。它不會顯示更改前的薪水列的值 —
要捕獲如此詳細的更改,您將不得不編寫您自己的觸發器來捕獲更改前的值,或使用 LogMiner 將它們從存檔日誌中檢索出來。
細粒度審計(FGA) ,是在
Oracle 9i 中引入的,能夠記錄 SCN 號和行級的更改以重建舊的資料,但是它們只能用於 select 語句,而不能用於 DML ,如 update
、insert 和delete 語句。因此,對於 Oracle 資料庫 10g
之前的版本,使用觸發器雖然對於以行級跟蹤使用者初始的更改是沒有吸引力的選擇,但它也是唯一可靠的方法。
8、例項講解
8.1、啟用審計
sqlplus / as sysdba
SQL> show parameter audit
NAME
TYPE VALUE
------------------------------------ -----------
------------------------------
audit_file_dest
string
/u01/app/oracle/admin/ORCL/adump
audit_sys_operations
boolean FALSE
audit_syslog_level
string
audit_trail string NONE
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
--審計管理使用者(以sysdba/sysoper角色登陸)
SQL> alter system set
audit_trail=db,extended scope=spfile;
SQL> startup force;
SQL> show
parameter audit
NAME TYPE
VALUE
------------------------------------ -----------
------------------------------
audit_file_dest
string
/u01/app/oracle/admin/ORCL/adump
audit_sys_operations
boolean TRUE
audit_syslog_level
string
audit_trail string DB, EXTENDED
8.2、開始審計
sqlplus / as sysdba
SQL> audit all on t_test;
SQL> conn
u_test
SQL> select * from t_test;
SQL> insert into u_test.t_test
(c2,c5) values ('test1','2');
SQL> commit;
SQL> delete from
u_test.t_test;
SQL> commit;
SQL> conn /as sysdba
SQL> col
DEST_NAME format a30
col OS_USERNAME format a15
col USERNAME format
a15
col USERHOST format a15
col TERMINAL format a15
col OBJ_NAME format
a30
col SQL_TEXT format a60
SQL> select
OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,sessionid,os_process,sql_text
from dba_audit_trail;
sql> audit select table by u_test by access;
如果在命令後面新增by
user則只對user的操作進行審計,如果省去by使用者,則對系統中所有的使用者進行審計(不包含sys使用者).
例:
AUDIT DELETE ANY TABLE; --審計刪除表的操作
AUDIT DELETE ANY TABLE
WHENEVER NOT SUCCESSFUL; --只審計刪除失敗的情況
AUDIT DELETE ANY TABLE WHENEVER
SUCCESSFUL; --只審計刪除成功的情況
AUDIT DELETE,UPDATE,INSERT ON user.table by
test; --審計test使用者對錶user.table的delete,update,insert操作
8.3、撤銷審計
SQL> noaudit all on t_test;
9、審計語句
多層環境下的審計:appserve-應用伺服器,jackson-client
AUDIT SELECT TABLE BY appserve ON
BEHALF OF jackson;
審計連線或斷開連線:
AUDIT SESSION;
AUDIT SESSION BY jeff, lori; -- 指定使用者
審計許可權(使用該許可權才能執行的操作):
AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT
SUCCESSFUL;
AUDIT DELETE ANY TABLE;
AUDIT SELECT TABLE, INSERT TABLE,
DELETE TABLE, EXECUTE PROCEDURE BY ACCESS WHENEVER NOT SUCCESSFUL;
物件審計:
AUDIT DELETE ON jeff.emp;
AUDIT SELECT, INSERT, DELETE ON
jward.dept BY ACCESS WHENEVER SUCCESSFUL;
取消審計:
NOAUDIT session;
NOAUDIT session BY jeff, lori;
NOAUDIT DELETE
ANY TABLE;
NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,EXECUTE
PROCEDURE;
NOAUDIT ALL; -- 取消所有statement審計
NOAUDIT ALL PRIVILEGES;
-- 取消所有許可權審計
NOAUDIT ALL ON DEFAULT; -- 取消所有物件審計
10、清除審計資訊
DELETE FROM SYS.AUD$;
DELETE FROM SYS.AUD$ WHERE obj$name='EMP';
11、審計檢視
STMT_AUDIT_OPTION_MAP -- 審計選項型別程式碼
AUDIT_ACTIONS --
action程式碼
ALL_DEF_AUDIT_OPTS -- 物件建立時預設的物件審計選項
DBA_STMT_AUDIT_OPTS --
當前資料庫系統審計選項
DBA_PRIV_AUDIT_OPTS -- 許可權審計選項
DBA_OBJ_AUDIT_OPTS
USER_OBJ_AUDIT_OPTS -- 物件審計選項
DBA_AUDIT_TRAIL
USER_AUDIT_TRAIL -- 審計記錄
DBA_AUDIT_OBJECT
USER_AUDIT_OBJECT
-- 審計物件列表
DBA_AUDIT_SESSION
USER_AUDIT_SESSION --
session審計
DBA_AUDIT_STATEMENT
USER_AUDIT_STATEMENT --
語句審計
DBA_AUDIT_EXISTS -- 使用BY AUDIT NOT
EXISTS選項的審計
DBA_AUDIT_POLICIES -- 審計POLICIES
DBA_COMMON_AUDIT_TRAIL
-- 標準審計+精細審計
12、將審計結果表從system表空間裡移動到別的表空間上
實際上sys.aud$表上包含了兩個lob欄位,並不是簡單的move table就可以。
下面是具體的過程:
alter table
sys.aud$ move tablespace users;
alter table sys.aud$ move lob(sqlbind) store
as( tablespace USERS);
alter table sys.aud$ move lob(SQLTEXT) store as(
tablespace USERS);
alter index sys.I_AUD1 rebuild tablespace u
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156849/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- undo表空間佔用磁碟空間滿案例處理
- Oracle的home目錄空間佔用異常處理Oracle
- linux查詢佔用空間較大的檔案Linux
- OEM模組審計查詢語句佔用較大資源
- SYSAUX表空間佔用過大情況下的處理(AWR資訊過多)UX
- Oracle檢視物件佔用空間Oracle物件
- oracle系統表空間過大問題處理Oracle
- oracle臨時表空間過大的原因&&處理Oracle
- 搬運工:temp表空間被過多佔用處理方法
- 一次臨時表空間大量佔用問題的處理
- Oracle Temp臨時表空間處理Oracle
- oracle 表空間 不足時如何處理Oracle
- 【SQLServer】Tempdb空間異常增長,空間佔用非常大SQLServer
- oracle 檢視錶所佔用的空間大小Oracle
- ORACLE SYSTEM表空間異常與審計的功能Oracle
- oracle中用sql計算一個表佔用的空間的大小OracleSQL
- oracle查詢表空間的空間佔用情況Oracle
- win7系統空間佔用大是怎麼回事?win7系統空間佔用大的清理步驟Win7
- oracle中undo表空間丟失處理方法Oracle
- oracle sysaux表空間滿了處理辦法OracleUX
- Oracle undo表空間爆滿的處理方法Oracle
- Oracle 安裝目錄空間不夠處理Oracle
- 關於aud$物件相關處理物件
- 關於sqlserver2005 資料庫日誌佔用空間過大問題的處理思路SQLServer資料庫
- exp,imp 不同表空間大欄位處理方法
- oracle 日誌檔案佔空間Oracle
- Oracle 查詢佔用臨時表空間大的歷史會話和SQLOracle會話SQL
- Check_oracle_health之表空間使用及處理Oracle
- undo表空間故障處理
- 如何使Xcode佔用更少的空間 Xcode佔用空間太大解決方法XCode
- 計算一個表佔用的空間的大小
- MacPro系統佔用空間太大Mac
- AWR佔用sysaux表空間太大UX
- Oracle表空間收縮方案Oracle
- JAXB名稱空間及名稱空間字首處理
- Oracle的temp表空間被佔滿Oracle
- 隨身碟資料看不見了,卻還佔用著記憶體空間如何處理記憶體
- Docker篇之Overlay2磁碟空間佔用過大清理Docker