暂无图片
如何查找用户被锁的源头
我来答
分享
夏鹏
2019-06-04
如何查找用户被锁的源头
  1. 某一用户如test修改密码后,经常有应用开发人员没有及时修改dblink中或某些配置文件中的密码,导致尝试5此错误后用户被锁

  2. oracle没有开启自身审计功能,而外部的深信服数据库审计服务器监控不到这些登陆失败,还没与创建连接的行为

  3. 请问现在要如何定位是哪个IP的哪个程序的密码不对导致锁用户的,又没有相似的脚本可供参考?

  4. 监听日志listener.log中怎么区分哪些是连接正常,哪些是连接密码不对的

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
南区-康达

建全局的触发器,然后看alert日志,里面有相关的错误信息。


CREATE OR REPLACE TRIGGER sys.logon_denied_to_alert

  AFTER servererror ON DATABASE

DECLARE

  message   VARCHAR2(168);

  ip        VARCHAR2(15);

  v_os_user VARCHAR2(80);

  v_module  VARCHAR2(50);

  v_action  VARCHAR2(50);

  v_pid     VARCHAR2(10);

  v_sid     NUMBER;

  v_program VARCHAR2(48);

  v_username VARCHAR2(32);

BEGIN

  IF (ora_is_servererror(1017)) THEN

    -- get ip FOR remote connections :

    IF upper(sys_context('userenv', 'network_protocol')) = 'TCP' THEN

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

    END IF;

    SELECT sid INTO v_sid FROM sys.v_$mystat WHERE rownum < 2;

    SELECT p.spid, v.program

      INTO v_pid, v_program

      FROM v$process p, v$session v

     WHERE p.addr = v.paddr

       AND v.sid = v_sid;

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

    v_username := sys_context('userenv','authenticated_identity');

    dbms_application_info.read_module(v_module, v_action);

    message := to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') ||' dbuser:' || v_username ||

               ' Password Erro: logon denied from ' || nvl(ip, 'localhost') || ' ' ||

               v_pid || ' User:' || v_os_user || ' with ' || v_program || ' – ' ||

               v_module || ' ' || v_action;

    sys.dbms_system.ksdwrt(2, message);

  END IF;

END;

/


暂无图片 评论
暂无图片 有用 0
打赏 0
夏鹏

谢谢回复,脚本很好用!

但现在还有个问题,

刚测试了一下从12c的多个pdb的创建dblink(故意使用错误的密码),

再次查询alert日志

image.png

发现其中没有与PDB名称相关的信息,

问题:如果生产库有多个PDB,我该如何进一步判断是哪个PDB的哪个dblink导致了目标端用户被锁

暂无图片 评论
暂无图片 有用 0
打赏 0
南区-康达

这个需要重新改写触发器,加入新的变量v_pdb     VARCHAR2(20); 

使用v_pdb:=SYS_CONTEXT ('USERENV','CON_NAME')  进行赋值,改写message,将该部分拼接进去。

然后再试一下是否有相关数据。


备注:不一定成功,可以试一下。 

暂无图片 评论
暂无图片 有用 0
打赏 0
卢立广

logon_denied_to_alert对于非高频系统还是挺不错的,但对于连接频繁的系统,要注意触发器所带来的性能问题。这俩天刚处理了一起因为错误密码频繁连接,产生大量library cache load lock等待(注意是load lock,并非library cache lock,密码延迟验证已设置了28401来避免),导致实例HANG住无法工作,等待对象是is_servererror。

如果用户被锁不是太频繁的话,logminer也是一种选择,前提是需要开启最小补充日志,通过machine和program,结合listener.log也能定位到源头,缺点是执行挖掘步骤稍复杂些,不如触发器直观,各有利弊。你目前的情况是已经发生了被锁的情况,如果数据库已经开启了最小补充日志,可以先用logminer尝试下。


暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle的互斥锁?
回答 1
已采纳
互斥锁(mutex)是一种与闩非常类似的串行化设备,它的名字源于“相互排斥”(mutualexclusion)。互斥锁是数据库中使用的另一种串行化设备,在OracleDatabase10gReleas
Oracle 12c 启动卡住
回答 5
已采纳
处理过程:1.停止所有应用2.使用startup启动数据库,卡住后观察alert日志,发现应用redo0203日志后卡住3.重启服务器后问题依旧4.最后使用RMAN连接数据库,因为没有开启归档,无法使
Oracle不完全恢复Open Resetlogs的时候,几种scn号是怎么变化的
回答 1
这些scn,理解起作用的点,也就没有困惑了。例如,所谓的start/stopscn,是针对数据文件打开后在控制文件中的记录,数据库open之后stopscn是没有赋值的。dbfcheckpointsc
铁子们,这个命令怎么用?
回答 2
已采纳
这个没法直接使用。我记得是之前oracle远程分享时整理过一套脚本。需要将ora文件放在$ORACLEhOME/bin下并授予x权限。常见的版本可以百度下ora脚本
寻求ORA-04031问题的优化方案
回答 5
有人建议手工共享内存管理:memorytarget0andsgatarget0指定sharepoolsize、dbcachesize等sga参数。请问是否可以解决此ORA04031问题?其次,8核16
oracle生产环境都是什么系统?
回答 1
已采纳
一般是Linux,centos,UNIX
没有RMAN备份,ORA-01578该如何修复?
回答 3
备份当前的数据库文件:在进行任何修复操作之前,务必先备份当前的数据库文件和控制文件。这是为了确保数据的安全性,以便在修复尝试失败时可以恢复到原始状态。检查控制文件的状态:使用SQLPlus或其他Ora
在oracle巡检过程中,有好用的脚本么?一个一个查,时间过长
回答 1
已采纳
oracle官方有一个oracheck,如果你的库太多最好是弄个运维平台,现在的运维平台都带自动巡检。
Oracle怎么弄模拟数据?
回答 1
可以使用DBeaver的企业版(网上有破解版),自己创建表结构,然后选中刚创建的表单机右键——工具——GenerateMockData,可以自动生成地址、邮件、姓名等数据。
如何处理 Oracle SQL 中的单引号?
回答 4
insertintot(name)values(q’[tom’clack]’);
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~