標籤:oracle 使用者解鎖
近期有一個生產資料庫使用者總是被鎖,導致生產環境有些應用的訪問資料庫連接失敗,造成生產事故,針對使用者被鎖的問題進行如下記錄說明。
首先將被鎖使用者解鎖,然後排查具體原因。
解鎖方式:
1.使用dba角色使用者登入,查看使用者是否被鎖。
select username,lock_date from dba_users;
2.查看使用者如果lock_date有值則說明該使用者被鎖,需要進行解鎖。
alter user username account unlock;
排查問題的流程如下:
使用者被鎖原因:
1.頻繁登陸oracle該使用者密碼錯誤,並超過一定的數目。
1)一般預設的使用者密碼錯誤數量為10。可以通過dba角色進行查看。
其中FAILED_LOGIN_ATTEMPTS的值為錯誤數量。預設為10。
select * from dba_profiles;
2)進行修改為30次
alter profile default limit FAILED_LOGIN_ATTEMPTS 30;
3)修改為無限次(不推薦,會造成資料庫資源安全問題)
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
註:通過修改密碼錯誤的允許次數這種方式只能治標不治本。真正還是需要查看是什麼應用將該賬戶鎖定。
故障排查:
如我此次出的問題為維護方將TongWeb中介軟體的服務停掉,但是未正確停掉該服務的java線程,由於維護方認為線程已經停止,因此在修改oracle使用者的密碼後,沒有按照規定將該服務原有資料來源密碼修改,認為沒有影響,但是恰恰該服務的一個線程還是啟動並在嘗試連結該使用者,因此導致頻繁密碼錯誤將使用者鎖定。
可以通過查看資料庫所在安裝目錄的監聽日誌進行時間點定位到應用(由於我們無法遠程到生產方的資料庫,無法查看他們的監聽日誌,因此如下是範例,不是真正的生產情況)
查看$ORACLE_HOME/network/admin/log/listener.log日誌
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49434)) * establish * lhoms * 0
10-MAR-2009 08:51:03 * (CONNECT_DATA=(SID=lhoms)(SERVER=DEDICATED)(CID=(PROGRAM=oracle)(HOST=omstestdb)(USER=oraoms))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.69.1.11)(PORT=49435)) * establish * lhoms * 0
這樣可知是上面10.69.1.11的ip嘗試多次失敗登陸造成的被鎖
由於我這邊沒有如此便利條件,因此我是將所有可能連結該資料庫的伺服器上的進程逐條查看並查看每個應用的資料庫配置才找到原因。
2.第二個原因是該使用者到期,預設的使用者到期時間為180天,如果使用者時間超過180天,則也會鎖定使用者。
使用dba角色使用者登入,處理該問題。
1)查看該使用者的profile,一般為default
select username,profile from dba_users;
2)查看指定概要檔案找到使用者的許可權所代表的時間,如default
select * from dba_profiles where profile = ‘DEFAULT‘ and resource_name = ‘PASSWORD_LIFE_TIME‘;
3)修改該欄位為unlimited,將預設180天修改成‘無限制’
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
修改結束後不需要重啟資料庫直接生效。
4)之後需要將密碼啟用,使用dba角色登陸
alter user username identified by <原來的密碼>。
本文出自 “yinyueml之家” 部落格,請務必保留此出處http://yinyueml.blog.51cto.com/4841237/1755550
oracle學習-使用者被鎖