在11g中默认启用了对登录注销操作LOGON/LOGOFF的审计,详见
<11g默认审计选项>。利用这一点我们可以很方便地从审计日志中找出数据库中的密码暴力破解者。如以下演示:
C:\Users\Maclean Liu>sqlplus system/try_password@G11R2
SQL*Plus: Release 11.2.0.1.0 Production on Mon Jul 4 21:37:44 2011
Copyright (c) 1982, 2010, Oracle. All rights reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
select username,userhost,terminal,timestamp,action_name,os_process
from dba_audit_trail
where returncode = 1017
order by timestamp desc;
USERNAME USERHOST TERMINAL TIMESTAMP ACTION_NAME OS_PROCESS
-------------------- ---------------------------------------- -------------------- ------------------ ---------------- ------------
SYSTEM WORKGROUP\MACLEANLIU-PC MACLEANLIU-PC 04-JUL-11 LOGON 4240:2700
Script:
set linesize 140 pagesize 1400
col os_username for a30
col userhost for a30
col terminal for a30
select os_username,userhost,terminal,username,count(*)
from dba_audit_trail
where returncode = 1017
group by os_username,userhost,username,terminal
having count(*)>10
/
注意对于LOGON PER SECOND很高的数据库,如果应用程序配置文件中的数据库用户密码不正确,同时应用在短期内发起大量会话登录数据库的话可能引发频繁的dc_users字典缓存锁,用户登录无法成功,乃至整个实例hang住,该问题具体可见
<Row Cache lock Problem>。针对该问题如果是在11g中的话,可以利用以上脚本快速找到因密码不正确登录失败的数据库用户名,从而减少排查时间。