oracle数据库频繁被锁,oracle数据库用户频繁被锁

自己有一台oracle数据库,发现几天不登录,数据库用户就无法登录,提示用户被锁,今天下定决心终于解决它,现在将解决过程写出与大家一起分享。

如果用户被锁,首先应该要知道他是什么时候被锁了。用oracle用户登录机器,执行

1.sqlplus / as sysdba ,以DBA用户登录,这时千万不要先解锁,而是要先查一下上次被锁的时间。

2.

--修改当前会话的日期显示格式

alter session set nls_date_format = 'yyyy-MM-dd hh24:mi:ss';

--查询被锁定账号的锁定时间

select username,lock_date  from dba_users where username like 'SJCKBILL';

查出来时间为:2012-05-17 15:44:21

3.找到 listener.log文件,如果不知道这个文件放到哪里,就只能用

find / -name listener.log

查到在/oracle/app/oracle/product/10.2.0/network/log/listener.log

4.进入这个目录

发现文件很大,如果用cat 显示太慢,执行 tail -20 listener.log

17-MAY-2012 15:44:21 * (CONNECT_DATA=(SID=storage)(CID=(PROGRAM=E:\Program Files\plsql developer\plsqldev.exe)(HOST=COGNOS-SERVER)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=134.134.XX.XX)(PORT=3761)) * establish * storage * 0

17-MAY-2012 15:44:32 * (CONNECT_DATA=(SID=storage)(CID=(PROGRAM=E:\Program Files\plsql developer\plsqldev.exe)(HOST=COGNOS-SERVER)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=134.134.XX.XX)(PORT=3762)) * establish * storage * 0

17-MAY-2012 15:44:38 * (CONNECT_DATA=(SID=storage)(CID=(PROGRAM=E:\Program Files\plsql developer\plsqldev.exe)(HOST=COGNOS-SERVER)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=134.134.XX.XX)(PORT=3768)) * establish * storage * 0

17-MAY-2012 15:45:54 * (CONNECT_DATA=(SID=storage)(CID=(PROGRAM=E:\Program Files\plsql developer\plsqldev.exe)(HOST=COGNOS-SERVER)(USER=Administrator))) * (ADDRESS=(PROTOCOL=tcp)(HOST=134.134.XX.XX)(PORT=3794)) * establish * storage * 0

发现那个时间段,是=134.134.XX.XX用 plsql 连续连接4次,问了这个人,才知道是不知道密码,于是连接了4次,导致用户被锁。

6.  总结

从上边可以看到,造成Oracle的账号被锁定的原因是由于误输入用户名和密码导致,所以造成了该账号登录Oracle经常失败,由于我们配置了Oracle的最大允许登录错误次数为10,所以超过10次错误后账号将被锁定。

select * from dba_profiles where resource_name like 'FAILED_LOGIN_ATTEMPTS%';

查到 DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10

为10 次。

方法二:

捕捉尝试登陆失败的用户信息

最近一个应用的用户被锁,查了一下发现在profile里设置了100次尝试登陆的限制,为了定位具体尝试登陆的时间及ip等相关信息,需要写一个trigger进行捕捉,以下来自网上:

create or replace trigger logon_denied_to_alert

after servererror on database

declare

message   varchar2(120);

IP        varchar2(15);

v_os_user varchar2(80);

v_module  varchar2(50);

v_action  varchar2(50);

v_pid     varchar2(10);

v_sid     number;

begin

IF (ora_is_servererror(1017)) THEN

if sys_context('userenv', 'network_protocol') = 'tcp' then

IP := sys_context('userenv', 'ip_address');

else

select distinct sid into v_sid from sys.v_$mystat;

SELECT p.SPID

into v_pid

FROM V$PROCESS p, V$SESSION v

WHERE p.ADDR = v.PADDR

AND v.sid = v_sid;

end if;

v_os_user := sys_context('userenv', 'os_user');

dbms_application_info.READ_MODULE(v_module, v_action);

message := to_char(sysdate, 'Dy Mon dd HH24:MI:SS YYYY') ||

' logon denied from ' || nvl(IP, v_pid) || ' ' || v_os_user ||

' with ' || v_module || ' ' || v_action;

sys.dbms_system.ksdwrt(2, message);

end if;

end;

/

当有用户尝试登陆失败后,alert日志里记录了如下信息:

Mon Feb 22 03:50:13 2010 logon denied from 192.168.80.19 oracle with (TNS V1-V3)

该trigger只是记录登陆失败的信息,正常成功登陆不会记录。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值