關於oracle審計功能

n-lauren發表於2017-11-07



 
oracle的審計功能,首先審計的資訊可以放在os中,也可以放在資料庫中。比較好管理業比較全面的是存放在資料庫中。
一下直說資料庫中的形式。
審計資訊主要就是一張表sys下的aud$
開啟審計後,我們可以根據一些試圖檢視審計資訊,但基本都是aud$的內容。

 
1,開啟審計:
show parameter audit
alter system set audit_trail = DB_EXTENDED;  --詳細審計
注意,如果audit_trail=db,不記錄SQL_BIND和SQL_TEXT
   DB:將審計結果放在資料庫表中,aud$,通常只記錄連線的資訊.
   DB_EXTENDED:將審計結果放在資料庫表中,記錄具體執行語句
   OS:將審計結果記錄在作業系統檔案中,檔案位置由audit_file_dest引數指定,(windows系統中將直接在事件檢視器的系統日誌中記錄)
   XML:將審計結果記錄在audit_file_dest指定位置下的XML檔案中。



 
2,重啟資料庫例項
startup force


 
3,指定審計內容
1. 對錶的審計:可以單獨對錶的create,alter進行審計,如果要對drop操作進行審計需要對錶加audit table(該命令包含有create table,drop table,truncate table).
2. 對檢視的審計:可以單獨對檢視的create進行審計,如果要對drop操作進行審計需要對檢視加audit view(該命令包含有create view,drop view).
3. 對程式包的審計:可以對包(函式,儲存過程等)的create進行審計,如果需要對drop操作進行審計需要加audit procedure(該命令對CREATE FUNCTION, CREATE LIBRARY , CREATE PACKAGE, CREATE PACKAGE BODY, CREATE PROCEDURE, DROP FUNCTION, DROP LIBRARY, DROP PACKAGE, DROP PROCEDURE進行審計)
4. 對使用者的審計:可以通過audit user(該命令包含 create user,alter user,drop user)進行審計,
例如要審計scott賬戶的所有操作
audit all by scott;


 
4,檢視都有哪些內容被審計
select * from dba_priv_audit_opts   --where owner_name='SCOTT';
select * from dba_stmt_audit_opts
select * from dba_obj_audit_opts

 
1. 對錶的審計:可以單獨對錶的create,alter進行審計,如果要對drop操作進行審計需要對錶加audit table(該命令包含有create table,drop table,truncate table).
2. 對檢視的審計:可以單獨對檢視的create進行審計,如果要對drop操作進行審計需要對檢視加audit view(該命令包含有create view,drop view).
3. 對程式包的審計:可以對包(函式,儲存過程等)的create進行審計,如果需要對drop操作進行審計需要加audit procedure(該命令對CREATE FUNCTION, CREATE LIBRARY , CREATE PACKAGE, CREATE PACKAGE BODY, CREATE PROCEDURE, DROP FUNCTION, DROP LIBRARY, DROP PACKAGE, DROP PROCEDURE進行審計)
4. 對使用者的審計:可以通過audit user(該命令包含 create user,alter user,drop user)進行審計,

DBA_AUDIT_TRAIL       列出所有審計跟蹤條目
USER_AUDIT_TRAIL      USER檢視顯示與當前使用者有關的審計跟蹤條目


 
5,檢視審計資訊
select * from dba_audit_trail where  owner = 'SCOTT' order by timestamp;

 

 
檢視說明:
1. SYS.AUD$
審計功能的底層檢視,如果需要對資料進行刪除,只需要對aud$檢視進行刪除既可,其他檢視裡的資料都是由aud$所得.
2. DBA_AUDIT_EXISTS
列出audit not exists和audit exists產生的審計跟蹤,我們預設的都是audit exists.
3. DBA_AUDIT_TRAIL
可以在裡面查處所有審計所跟蹤的資訊.
4. DBA_AUDIT_OBJECT
可以查詢所有物件跟蹤資訊.(例如,對grant,revoke等不記錄),資訊完全包含於dba_audit_trail
5. DBA_AUDIT_SESSION
所得到的資料都是有關logon或者logoff的資訊.
6. DBA_AUDIT_STATEMENT
列出grant ,revoke ,audit ,noaudit ,alter system語句的審計跟蹤資訊.
7. DBA_PRIV_AUDIT_OPTS
通過系統和由使用者審計的當前系統特權
8. DBA_OBJ_AUDIT_OPTS
可以查詢到所有使用者所有物件的設計選項
9. ALL_DEF_AUDIT_OPTS
10. AUDIT_ACTIONS
可以查詢出在aud$等檢視中actions列的含義
11. SYSTEM_PRIVILEGE_MAP
可以查詢出aud$等檢視中priv$used列的含義(注意前面加'-')


 
6 ,取消審計
全部取消是
noaudit all;
如果取消單獨的可以根據上面4條檢視有上面許可權直接noaudit 即可。
如:noaudit create session by user scott;

 
取消對SC表的一切審計可使用如下語句:

 
NOAUDIT ALL ON SC;

 
noaudit取消審計的操作對已經連線著的session無用,但新開的session將不再審計。

 
-- 取消所有statement審計
NOAUDIT ALL;
-- 取消所有許可權審計
NOAUDIT ALL PRIVILEGES;
-- 取消所有物件審計
NOAUDIT ALL ON DEFAULT;

 
7,關閉審計


SQL> alter system set audit_trail=none scope=spfile;

 

 
.audit_sys_operations:是否對sysdba使用者做審計 ,關於sysdba使用者審計的結果,linux存放在audit_file_dest引數指定位置的aud檔案中,windows存放在事件檢視器的系統日誌中 

 

 


 

 
問題1:
確認審計相關的表是否已經安裝

 
   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  

 


 
問題2:

 
將審計相關的表移動到其他表空間:

 
由於AUD$表等審計相關的表存放在SYSTEM表空間,因此為了不影響系統的效能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:

 
sql>connect / as sysdba;

 
sql>alter table aud$ move tablespace <new tablespace>;

 
sql>alter index I_aud1 rebuild online tablespace <new tablespace>;

 
SQL> alter table audit$ move tablespace <new tablespace>;

 
SQL> alter index i_audit rebuild online tablespace <new tablespace>;

 
SQL> alter table audit_actions move tablespace <new tablespace>;

 
SQL> alter index i_audit_actions rebuild online tablespace <new tablespace>;

 


 
問題3:
audit的審計資訊保留時間
(預設一直保留)

 
手動清理:
How to truncate or delete rows from audit trail table sys.aud$
1)Only appropriate privileged user can do delete operation on SYS.AUD$ table. The user must have either of the following privileges.
-SYS user.
-DELETE ANY TABLE system privilege. (If O7_DICTIONARY_ACCESSIBILITY=TRUE)
-A user to whom SYS has granted the object privilege DELETE on SYS.AUD$ table.

 
2)Before deleting any rows you may want to archive the table. You can achive this by creating a table from SYS.AUD$ and export that. Don't export SYS.AUD$ directly.
SQL>CREATE TABLE AUDIT_RECORD TABLESPACE users as select * from SYS.AUD$;
Now export the table as,
SQL> host exp tables=AUDIT_RECORD file=audit_record.dmp

 
3)To delete all records from audit trail table SYS.AUD$ issue,
SQL>DELETE FROM SYS.AUD$;

 
To delete all records of particular audited table from the audit trail issue,
SQL>DELETE FROM sys.aud$ WHERE obj$name='&table_nmae';

 
But deleting in this way will not reduce size on the system tablespace or aud$ table. In order to reduce size follow section 4.

 
4)Truncate audit table to reduce size.
SQL>CONN / as sysdba
SQL>TRUNCATE TABLE SYS.AUD$

 

 
自動清理:
1.建立清理aud$表procedure:

 
create or replace procedure clear_aud
as
begin
delete aud$ where ntimestamp# <trunc(sysdate,'HH')- 1/24;
commit;
exception when others then 
rollback;
end;

 
2.建立清理AUD$表JOB:

 
Variable job number ;
begin
dbms_job.submit(:job, 'clear_aud;' ,trunc( sysdate + 1 / 24 , 'hh24' ), 'trunc(sysdate+1/24,''hh24'')' );
commit ;
end ;
/

問題4:
查詢AUD$表大小
select OWNER,SEGMENT_NAME,SEGMENT_TYPE,TABLESPACE_NAME,BYTES/1024/1024 MB from dba_segments where SEGMENT_TYPE='TABLE' and SEGMENT_NAME='AUD$';

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22990797/viewspace-2146939/,如需轉載,請註明出處,否則將追究法律責任。

相關文章