追溯oracle資料庫內業務使用者密碼被修改異常操作
問題情況描述:
客戶提出業務不能響應,使用者名稱原密碼登入報錯,懷疑密碼被人為修改
環境接受:
作業系統:AIX 5.3
資料庫版本:9.2
資料庫配置:RAC
資料檔案格式:裸裝置
處理過程:
因為資料庫開啟了歸檔,所有資料庫的歷史操作都可以通過挖掘歸檔日誌進行追溯,挖掘工具為oracle自帶的logminer。如果修改了使用者名稱密碼,會將其命令轉化為對資料字典的dml操作。
1.使用sys使用者檢視資料庫是否存在logminer的程式包
SQL>desc dbms_logmnr
⚠️如果不存在,則需要執行指令碼安裝:SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2.根據客戶提供的上次被修改的時間點,檢視產生的歸檔日誌檔案有哪些:
>select inst_id,name,to_char(first_time,'yyyy-mm-dd hh24:mi:ss'),to_char(next_time,'yyyy-mm-dd hh24:mi:ss'),sequence# from gv$arhcived_log where first_time>=to_data('2018-2-2 00:00:00 yyyy-mm-dd hh24:mi:ss') and first_time<=to_data('2018-2-3 00:00:00 yyyy_mm_dd hh24:mi:ss') order by 3 desc;
省略查詢結果。。。。。。
由於是雙節點RAC,不確定在其中哪個節點進行,需要把兩個節點的歸檔從帶庫restore出來檢視:
run{
allocate channel t1 device type 'set_tape';
restore archivelog sequence# 對應時間發生時最近的一次歸檔 thread 1;
restore archivelog sequence# 對應時間發生時最近的一次歸檔 thread 2;
release channel t1;
}
3.利用logminer進行日誌挖掘:
3.1首次加入歸檔日誌:
execute dbms_logmnr.add_logfile(logfilename=>'步驟2 restore回來的歸檔日誌路徑',option=>dbms_logmnr.new);
3.2開始利用當前資料字典進行日誌挖掘
dbms_logmnr.start_logmnr(option=>dbms_logmnr.dict_from_online_catalog);
4.挖掘語句執行結束後,日誌資訊被儲存在v$logmnr_contents檢視中,並對其他使用者不可見。檢查對user$ 進行修改的所有條目:
select * from v$logmnr_contents where seg_name='USER$';
在例項1中的歸檔日誌中未發現此類操作,使用如下命令停止日誌挖掘:
execute dbms_logmnr.end_logmnr();
按上述步驟繼續挖掘例項2的歸檔,發現異常操作
5.使用如下sql檢視詳細時間
SQL>select to_char(timestamp,'yyyy-mm-dd hh24:mi:ss') from v$logmnr_contents where seg_name='USER$';
查詢結果與客戶回憶的時間相吻合,
⚠️col session_info for 99 "加長顯示操作"
且根據上步驟中的監聽日誌,按主機名過濾條件,在例項二的監聽日誌裡查詢對應的登入記錄,進一步查詢問題原因