在ORACLE数据库中,如果没有修改过FAILED_LOGIN_ATTEMPTS的话,默认10次尝试失败后就会锁住用户。此时再登录数据库,就会遇到ORA-28000: the account is locked

SQL> SELECT *

2  FROM DBA_PROFILES

3  WHERE RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

------------------------------ -------------------------------- -------- -----

DEFAULT                        FAILED_LOGIN_ATTEMPTS            PASSWORD 10

MONITORING_PROFILE             FAILED_LOGIN_ATTEMPTS            PASSWORD UNLIMITED

SQL>

那么在数据库维护过程中,如果出现账号被锁定的情况,如何事后分析是那个IP或主机导致账号被锁定了呢?不同的情形有不同的分析方法,主要看是否开启了数据库审计功能

开启了数据库审计

如果开了审计功能的话,这个分析定位就非常简单容易。因为数据库的审计功能会记录这些信息到数据库当中。

检查是否开启审计,主要查看audit_sys_operations参数是否为TRUE。

SQL> show parameter audit

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest                      string      /u01/app/oracle/admin/gsp/adum

p

audit_sys_operations                 boolean     TRUE

audit_syslog_level                   string

audit_trail                          string      DB_EXTENDED

SQL>

如果开启了审计功能,通过下面SQL语句就能轻松找到引起账号锁定的主机(通过主机找到具体IP地址)

----RETURNCODE=1017 表示登录失败返回ORA-01017: invalid username/password; logon denied错误的会话信息。

如果 audit_trail= DB

SELECT USERNAME

,USERHOST

,TIMESTAMP

,RETURNCODE

FROM dba_audit_session

WHERE USERNAME='TEST'

AND RETURNCODE='1017'

ORDER BY TIMESTAMP DESC;

如果 audit_trail= OS

grep 1017 $ORACLE_BASE/admin/$ORACLE_SID/adump/*2019053004*

orcl_ora_20432_20190530040340560268143795.aud:SESSIONID:[8] "33072208" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[4] "scott" USERHOST:[12] "app-01" ACTION:[3] "100" RETURNCODE:[4] "1017" COMMENT$TEXT:[98] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.4.15.148)(PORT=47646))" DBID:[10] "1865135537"

orcl_ora_20434_20190530040337550602143795.aud:SESSIONID:[8] "33072205" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[4] "scott" USERHOST:[12] "app-01" ACTION:[3] "100" RETURNCODE:[4] "1017" COMMENT$TEXT:[98] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.4.15.148)(PORT=47643))" DBID:[10] "1865135537"

orcl_ora_20436_20190530040338555761143795.aud:SESSIONID:[8] "33072209" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[4] "scott" USERHOST:[12] "app-01" ACTION:[3] "100" RETURNCODE:[4] "1017" COMMENT$TEXT:[98] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.4.15.148)(PORT=47642))" DBID:[10] "1865135537"

orcl_ora_20438_20190530040343576957143795.aud:SESSIONID:[8] "33072206" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[4] "scott" USERHOST:[12] "app-01" ACTION:[3] "100" RETURNCODE:[4] "1017" COMMENT$TEXT:[98] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.4.15.148)(PORT=47641))" DBID:[10] "1865135537"

orcl_ora_20440_20190530040337545737143795.aud:SESSIONID:[8] "33072207" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[4] "scott" USERHOST:[12] "app-01" ACTION:[3] "100" RETURNCODE:[4] "1017" COMMENT$TEXT:[98] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.4.15.148)(PORT=47640))" DBID:[10] "1865135537"

orcl_ora_20442_20190530040337548685143795.aud:SESSIONID:[8] "33072210" ENTRYID:[1] "1" STATEMENT:[1] "1" USERID:[4] "scott" USERHOST:[12] "app-01" ACTION:[3] "100" RETURNCODE:[4] "1017" COMMENT$TEXT:[98] "Authenticated by: DATABASE; Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.4.15.148)(PORT=47639))" DBID:[10] "1865135537"

数据库审计关闭

如果数据库审计功能是关闭的情况下,那么能否定位、找到导致账号锁定的主机或IP地址呢? 如果出现账号被锁的情况,可以先查一下dba_users试图,看看账号是在什么时间点被锁定的。注意(有些版本有Bug,会出现LOCK_DATE不准确的情况。)

SQL> ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

Session altered.

SQL> SELECT username, account_status,lock_date, PROFILE

2  FROM dba_users WHERE username='TEST';

USERNAME          ACCOUNT_STATUS       LOCK_DATE         PROFILE

------------ ---------------------- ------------------- ----------

TEST              LOCKED(TIMED)     2018-06-16 23:49:14 DEFAULT

SQL>

网上有些文章信誓旦旦的宣称通过监听日志可以分析出哪些IP导致账号被锁定了,但是经过动手实验分析,发现通过监听日志文件根本无法定位引起账号锁定的IP地址,原因有两个:

1、 无法通过监听日志判断登录会话是否出现ORA-01017错误,因为登录成功与登录失败遭遇ORA-01017错误的会话的监听日志信息是一样。无法区别!

2、 即使账号锁定的时间能定位到秒,但是生产环境中,一秒内有大量的监听日志生成,根本无法定位是哪一个具体IP

3、 登录失败的会话可能不是连续的。而是在一段时间内生成的。通过分析监听日志根本没有这个可能性!

登陆失败或账户锁定 在Listener Log 和Alert Log 中都找不到相关信息。

不过如果事前你定义了数据库触发器,那么就可以轻松定位到具体IP, 网友提供了一个触发器,如下所示:

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') ||

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

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

v_module || ' ' || v_action||' dbuser:' || v_username;

sys.dbms_system.ksdwrt(2, message);

END IF;

END;

/

在客户端使用SQL*Plus测试,模拟输入错误的密码登录数据库

C:\Users>sqlplus test/1234@myvm

SQL*Plus: Release 11.2.0.1.0 Production on 星期日 6月 17 00:35:21 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

ERROR:

ORA-01017: invalid username/password; logon denied

此时,触发器捕获到这个错误,就会在告警日志中生成类似下面这样的错误日志信息:

Sun Jun 17 08:01:44 2018

2018-06-17 08:01:44 Password Erro: logon denied from 192.168.125.193 26639 User:KongLB with sqlplus.exe���sqlplus.exe  dbuser:test

当然,如果你也可以改写该触发器,将捕获的相关信息写入数据库相关表。

转自:https://www.cnblogs.com/kerrycode/p/9191983.html

oracle找到引起账户锁定的ip,Oracle 找到引起账户锁定的IP相关推荐

  1. oracle锁住用户有什么用,oracle 用户user锁定lock如何知道是什么原因导致的

    问题 数据库用户被锁了,如何查看什么原因导致被锁的呢 结论 1,dba_users是由底层表user$,profile$,profname$相关表构成,当然还有ts$ 2,dba_users与账户锁定 ...

  2. oracle安装 sysi,oracle10G下在isqlplus中启用sys账户的解决办法(转摘)

    oracle10G下在isqlplus中启用sys账户的解决办法 一般用户登陆isqlplus的网址http://ip:5560/isqlplus,进入该网址后会直接进入数据库用户登陆界面,使用数据库 ...

  3. 连接oracle数据库 ip,oracle 设置ip连接数据库

    使用E-MapReduce集群sqoop组件同步云外Oracle数据库数据到集群hive E-MapReduce集群sqoop组件可以同步数据库的数据到集群里,不同的数据库源网络配置有一些差异网络配置 ...

  4. 修改10g RAC public or private or virtual IP [Oracle]

    首先启动HACMP,smit clstart #su - oracle rac2-> oifcfg getif en0  192.168.192.0  global  public en1  1 ...

  5. 【RAC】oracle 11g RAC两个机器重启后节点二能找到asm磁盘,节点一没有找到

         oracle 11g RAC两个机器重启后节点二能找到asm磁盘,节点一没有找到 [root@rac1 ~]# oracleasm scandisks Reloading disk part ...

  6. 【问题解决】关于Oracle官网下载JDK需要登录Oracle账户问题

    问题描述 当我们在Oracle官网上下载JDK时,(JDK下载地址)系统会提示需要登录Oracle账户.对于没有Oracle账户的人来说,注册账户太繁琐. 问题解决 此处推荐一个神奇的网站,里面提供部 ...

  7. oracle服务器双ip,LINUX系统的双网卡双IP(双链路)实现方式

    当你的服务器为了不间断的向外提供服务,需要选择两个或两个以上的运营商的数据接入时.路由就成为一个问题,如何使电信的客户使用电信的链路,网通的客户使用网通的链路访问服务器.下面就如何实现这一功能作详细的 ...

  8. oracle安装就是home3,rhel3上安装Oracle(来自Oracle网站)

    http://www.oracle.com/technology/global/cn/pub/articles/smiley_10gdb_install.html 1.从网上下载redhat Ente ...

  9. oracle的服務監聽器,Oracle监听器和服务名的配置

    Oracle监听器和服务名的配置 一.监听器(LISTENER) 监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求.既然是基于服务器端的服务,那么它也只 ...

最新文章

  1. .net中连接SYBASE的种种问题
  2. 我是一只IT小小鸟读书笔记3
  3. Google 联合 Plaxo 对 OpenID 进行改进
  4. python 进位_Python小课堂(第一讲)
  5. New Linux2.6 I2C Driver Model Example
  6. android app 主界面,android ViewPager实现App主界面Tab菜单页面切换和点击事件
  7. git pull 报错:git - error: RPC failed curl 18 transfer closed with outstanding read data remaining 解决
  8. 从SqlServer转手Oracle的一些坑
  9. 【报告分享】2022十大科技趋势-达摩院.pdf(附下载链接)
  10. 中英文混合字符串长度的获取
  11. Snagit 12 – 功能强的老牌截图软件
  12. 面向对象-封装继承多态
  13. 什么是功率因数补偿/校正
  14. 方图来袭,且看483万亿美元的场外衍生品市场如何风云变幻
  15. unbuntu配置scrcpy
  16. 2021-05-29当微商怎么引流?微商如何利用闲鱼引流?
  17. 结对项目之需求分析与原型设计(选择和分配本科毕设导师)
  18. 1248 - Every derived table must have its own alias
  19. mysql动态变量_Mysql的变量一览
  20. (十二)命令模式详解(故事版)- 转

热门文章

  1. 微服务系列(七):将单体应用改造为微服务
  2. MacOS下打包Python应用
  3. 为什么 Django 能持续统治 Python 开发世界
  4. 瞄准VR游戏市场,这款数据手套还提供模块化定制
  5. 2017-2018-1 20155328 《信息安全系统设计基础》第十四周学习总结
  6. 12月22日 find命令
  7. sqoop 数据迁移
  8. IP地址规划和路由实验
  9. 笔记本打字不知道按了什么键,打字老出现数字?
  10. SQL Server 2012--Reporting Service报表阅览工具 - Power View【转载】