客户反馈关键业务用户被锁定,需要处理和排查,干了这么多年的DBA处理这类问题简直都不是事(过于自信)
1、登录服务器对用户进行解锁(解锁之前查看了用的状态为lock(timed)-->表示尝试使用错误密码登录次数超过限制,数据库限制是10次,10次后就会锁定。
官方解释如下
用户状态为LOCK(TIMED)是由客户端发起登录尝试失败导致,登录尝试失败次数由FAILED_LOGIN_ATTEMPTS参数决定,用户锁定时间未设置(长期),FAILED_LOGIN_ATTEMPT允许失败登录最大次数为默认即10次,锁定时间为长期:
2、检查记录登录错误的触发器,居然为空 0行,--->正常情况下,输入错误密码会提示ora-1017错误,这次咋没有呢,但是可以确认是密码输入错误导致的问题;
3、(由于数据库则未找到根源,联系应用厂商未果)为了尽快找到原因,打开数据库审计并增加了数据库审计防火墙,期间又发生了2次用户锁定(相隔20天左右),和客户沟通是否能调整密码次数上线,得到了否决(防止暴力破解),必须找到根源。。。
4、第四次用户锁定,通过审计防火墙发现端倪(某一个服务器出现连续登录失败的报错)--终于抓到你了
5、反复和客户以及开发商掰扯(终于在服务器中一个小应用中发现了关键问题,完全想不到的情况,应用日志中出现如下错误;
真操蛋呀,居然是空密码,难怪触发器没有记录下来。
找到原因后及时更新了触发器
CREATE OR REPLACE TRIGGER sys.logon_trigger
AFTER SERVERERROR ON DATABASE
BEGIN
IF (IS_SERVERERROR(1017)or S_SERVERERROR(1005)) THEN
INSERT INTO logon_trigger VALUES(SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY'), SYS_CONTEXT('USERENV', 'HOST'), SYSDATE,SYS_CONTEXT('USERENV','IP_ADDRESS'));
COMMIT;
END IF;
END;
/
防范与建议:
开启用户错误登录尝试审计代码如下:
AUDIT CREATE SESSION BY ACCESS WHENEVER NOT SUCCESSFUL;
AUDIT CONNECT BY ACCESS WHENEVER NOT SUCCESSFUL;
select name,lcount from user$ where name='xXX';
select username,
os_username,
userhost,
client_id,
trunc(timestamp),
count(*) failed_logins
from dba_audit_trail
where returncode in( 1017 ,01005)--1017 is invalid username/password
timestamp > sysdate -7
group by username,os_username,userhost, client_id,trunc(timestamp);