在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中的话,可以利用以上脚本快速找到因密码不正确登录失败的数据库用户名,从而减少排查时间。