昨天一个微信上的朋友找我帮忙看一个登录问题,如下是他的问题描述

在他们沟通排除了网络问题后,开始看做进一步的问题排查
1.排查问题时段listener log和alert log
发现问题时段连接频率确实有变低,alert log中无明显报错;
2.拉取问题时段AWR报表

从AWR报表一眼即可看到问题的所在:Failed Logon Delay这个异常一般都是因为有自动或者定时任务的程序使用的用户名和密码错误引起的;另外还有个一个原因就是从oracle 12C开始将密码错误尝试的参数SEC_MAX_FAILED_LOGIN_ATTEMPTS 由原来的10次调整为3次,结合用户的版本就是12.2版本,那这基本就是问题的所在了;
3. 检查和解决步骤
(a) 检查
Failed Logon Delay 的等待事件
登录到数据库并检查等待事件:
SELECT event, total_waits, time_waited, average_waitFROM v$session_eventWHERE event = 'Failed Logon Delay';
(b) 检查失败登录记录
通过动态性能视图
dba_audit_session 查看登录失败的详细信息:
SELECT username, os_username, userhost, timestamp, returncodeFROM dba_audit_sessionWHERE returncode != 0ORDER BY timestamp DESC;
常见 returncode的含义:
ORA-01017 无效的用户名或密码。
ORA-28000 账户被锁定。
(c) 检查账户状态
检查是否有被锁定的账户:
SELECT username, account_statusFROM dba_usersWHERE account_status LIKE '%LOCKED%';
如果发现有账户被锁定,可以手动解锁:
ALTER USER username ACCOUNT UNLOCK;
(d) 检查登录失败的次数
查看登录失败的次数限制:
SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;
修改登录失败限制(例如将其设置为 10 次)
这个是静态参数 需要重启生效
ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS = 10 scope=spfile;
(e)创建fail logon trigger追踪密码错误用户
-- Create table
create table SYS.A_DB_UNSUCCESSFUL_LOGINS
(
username VARCHAR2(30),
osuser VARCHAR2(30),
machine VARCHAR2(64),
terminal VARCHAR2(30),
ipaddr VARCHAR2(30),
program VARCHAR2(48),
module VARCHAR2(48),
isdba VARCHAR2(10),
errormsg VARCHAR2(60),
logon_time DATE default SYSDATE
);
---create trigger
CREATE OR REPLACE TRIGGER SYS.a_db_unsuccessful_login_trg
AFTER servererror ON DATABASE
DECLARE
v_ipaddr a_db_unsuccessful_logins.ipaddr%TYPE;
v_logon_user a_db_unsuccessful_logins.username%TYPE;
v_machine a_db_unsuccessful_logins.machine%TYPE;
v_terminal a_db_unsuccessful_logins.terminal%TYPE;
v_osuser a_db_unsuccessful_logins.osuser%TYPE;
v_program a_db_unsuccessful_logins.program%TYPE;
v_module a_db_unsuccessful_logins.module%TYPE;
v_errormsg a_db_unsuccessful_logins.errormsg%TYPE;
v_isdba a_db_unsuccessful_logins.isdba%TYPE;
v_log_error BOOLEAN DEFAULT FALSE;
/************************************************************************
name: a_db_unsuccessful_login_trg
purpose: log unsuccessful LOGON action.
revisions:
ver DATE author description
--------- ---------- --------------- ---------------------------------
1.0 2023/11/01 norton.fan create this TRIGGER.
************************************************************************/
BEGIN
-- read the context
v_osuser := sys_context('USERENV','OS_USER');
v_machine := sys_context('USERENV','HOST');
v_terminal := sys_context('USERENV','TERMINAL');
v_ipaddr := sys_context('USERENV','IP_ADDRESS');
v_logon_user := sys_context('USERENV','SESSION_USER');
v_isdba := sys_context('USERENV','ISDBA');
--cut strange char for windows server.
v_machine := REPLACE(v_machine,chr(0),'');
--fetch additional session info.
SELECT program ,module
INTO v_program ,v_module
FROM v$session
WHERE sid = (SELECT sid FROM v$mystat WHERE rownum = 1);
IF is_servererror(1017)
THEN
v_log_error := TRUE;
v_errormsg := 'ORA-01017: invalid username/password; logon denied';
END IF;
IF is_servererror(20017)
THEN
v_log_error := TRUE;
v_errormsg := 'ORA-20017: invalid access privilege; logon denied';
END IF;
IF v_log_error
THEN
--record the unsuccessful logon
INSERT INTO sys.a_db_unsuccessful_logins
(username
,osuser
,machine
,terminal
,ipaddr
,program
,module
,isdba
,errormsg
,logon_time)
VALUES
(v_logon_user
,v_osuser
,v_machine
,v_terminal
,v_ipaddr
,v_program
,v_module
,v_isdba
,v_errormsg
,SYSDATE);
END IF;
END a_db_unsuccessful_login_trg;
/
trigger建立后里面就追踪到使用错误密码的设备用户和机台IP,找到错误密码的源头即可解决此登录卡顿问题。更多一些监控脚本 如登陆成功,登陆失败,控制IP访问,DDL 日志等相关脚本看下文
https://www.modb.pro/db/1770699616693096448

编辑推荐:
下一篇:
相关推荐
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle12C登录卡顿问题
Oracle12C登录卡顿问题
26-03-03
- 数据库管理-第274期 Oracle Enterprise Manager 24ai新特性一览(20241223)
- 湖南软装家具选购指南:探寻家居梦想之地
湖南软装家具选购指南:探寻家居梦想之地
26-03-03
- 个人文件保存到云电脑,个人文件怎样保存到云电脑
个人文件保存到云电脑,个人文件怎样保存到云电脑
26-03-03
- 云存储释放电脑空间,云存储释放电脑空间应该怎么进行
云存储释放电脑空间,云存储释放电脑空间应该怎么进行
26-03-03
- oracle数据泵跳过损坏的lob方法
oracle数据泵跳过损坏的lob方法
26-03-03
- putty 空格,putty 空格常见的问题及解决方案
putty 空格,putty 空格常见的问题及解决方案
26-03-03
- RushQL勒索病毒
RushQL勒索病毒
26-03-03
- 数据库管理-第271期 Oracle 23ai:用MongoDB的方式来操作JSON二元性(20241214)
- 属实有点“爱”了!EMCC 24ai重磅发布了
属实有点“爱”了!EMCC 24ai重磅发布了
26-03-03
