Oracle中開啟某張表的審計(audit)
Oracle資料庫通過audit_trail參數來開啟標準審計
它的參數有下面幾種
NONE:不開啟審計
OS:說明審計資訊放在系統匯總,如果是Linux那麼由audit_file_dest 決定,如果是Windows 那麼由事件檢視器決定
DB 或 TRUE :表示審計資訊存放在資料庫裡,也就是sys 使用者的aud$ 表。
審計範圍分為session 和 access兩種
session:表示使用者登入之後執行的相同SQL只記錄一次,其他相同SQL不再記錄;
access:表示每次執行的SQL都進行審計記錄。
1、開啟審計參數
SQL> alter system set audit_trail=db_extended scope=spfile sid='*';
2、重啟資料庫
為了使參數生效
su - oracle
$ srvctl stop database -d orcl
$ srvctl start database -d orcl
SQL> show parameter audit;
3、設定對錶進行審計
這樣每次有使用者對錶進行操作,那麼都會有相應的記錄被添加到aud$中,而Oracle為了方便讀取資料,建立了視圖。
雖然會記錄每個使用者對錶的操作,但是不會記錄sys使用者的操作,其他所有使用者都會做記錄。
SQL> audit all on scott.emp by access;
設定之後如果想要看到效果,可以用Scott使用者登入進來對錶進行操作。
--------------------------------------分割線 --------------------------------------
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
--------------------------------------分割線 --------------------------------------
4、查詢審計記錄
$ su - oracle
$ sqlplus / as sysdba
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col OS_USERNAME for a10
col USERNAME for a11
col USERHOST for a10
col TERMINAL for a10
col TIMESTAMP for a20
col obj_name for a10
col OWNER for a10
col ACTION_NAME for a11
col TRANSACTIONID for a16
col sql_text for a30
select username,userhost,timestamp,owner,obj_name,action_name,sql_text from dba_audit_trail;
username 登入的使用者
userhost 登入的主機
timestamp 時間戳記
owner 動作表的所有者
obj_name 操作的表
action_name 做了什麼動作
sql_text 具體的SQL
其他:
1、清空aud$
這張系統資料表是可以使用TRUNCATE命令截斷的。把它刪掉之後那麼視圖中的記錄也就相應消失了。
SQL> truncate table aud$;
2、取消某張表的審計
SQL> noaudit all on scott.emp;
3、關閉審計
SQL> alter system set audit_trail=none;