记Oracle 11g 用户频繁被锁事件
**环境:**---RAC环境
操作系统版本:
CentOS release 6.5 (Final)
**数据库版本:**
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
近期客户进行了等保改革,主要利用profile,sql*net进行对客户端及用户、会话的软硬限制,其中例如密码登录失败次数、锁定时间、僵尸连接清理等进行了完善。大致如下:
改后的几天,频繁接到客户说某应用连接出现问题,归纳总结大致都为 28000,1017等错误,一个简单的修改会造成这么多琐事?这里分享一下大概思路,首先查看客户机报错大致内容。
- 查看用户信息状态,发现为LOCKED(TIMED),28000即为用户输入密码次数过多导致用户被锁,由参数“FAILED_LOGIN_ATTEMPTS”控制。PS:oracle用户大致分为以下几种状态
0 OPEN 1 EXPIRED 2 EXPIRED(GRACE) 3 LOCKED(TIMED) 4 EXPIRED &
LOCKED(TIMED) 5 EXPIRED(GRACE) & LOCKED(TIMED) 6 LOCKED 7 EXPIRED &
LOCKED 8 EXPIRED(GRACE) & LOCKED
1、OPEN状态表示用户处于正常状态。
2、LOCKED和LOCKED(TIMED)表示用户被锁定状态。
用户被锁定有两种:
一种是DBA显式的通过SQL语句对用户进行锁定;
另一种是被动的锁定,默认情况下如果密码输入错误超过10次。
该限制由PROFILE中的FAILED_LOGIN_ATTEMPTS控制,可查看视图DBA_PROFILES。
1)显式锁定用户LOCKED:alter user [username] account lock;
2)输入10次错误密码后被动锁定LOCKED(TIMED)
3)EXPIRED和EXPIRED(GRACE)表示用户密码过期状态。
select username,account_status,to_char(lock_date,'yyyy-mm-dd hh24:mi:ss') from dba_users where username = 'USERNAM'
- 直接执行解锁,可能是某个应用或者认为登录出现错误,在正常范围内
alter user USERNAME account unlock;
-
继续观察,此后每天下午13点20左右就会发生用户被锁事件,而且越发的频繁,心中想过各种情况、人为恶搞、被攻击等等,最后决定挖出这个用户详细信息。
-
找到对应的数据库用户锁定时间
select username,account_status,to_char(lock_date,'yyyy-mm-dd hh24:mi:ss') from dba_users where username = 'USERNAM'
- 查找相应的审计日志,即AUD$日志,进行对应returncode编号进行查询
select TERMINAL,comment$text, to_char(ntimestamp#,'yyyy-mm-dd hh24:mi:ss') from aud$ where returncode = 1017 and userid = 'TRSWCMV7' order by ntimestamp#;
- 按照1017查找登录用户信息,返回相当多,对照用户锁定时间并没有找到有用的信息。直接查看listener.log,按照时间进行grep找到如下信息。
将IP地址返回给客户,进行查找,发现此用户在更改密码之后,还有一个应用5分钟定时进行数据抽取,密码输入错误次数过多导致用户锁定。
总结:
如无特殊需求,可以将“FAILED_LOGIN_ATTEMPTS”改为“UNLIMITED”。