失败登录行为输出至alert日志

来源:这里教程网 时间:2026-03-03 16:28:22 作者:

日常运维工作需要关注各个数据库是否有频繁的数据库用户登录失败行为,一方面频繁错误密码登录会导致已增加用户锁定策略的数据库用户被锁,影响业务进行,另一方面供分析排查是否为攻击或试探行为。通过编写如下触发器可将错误密码登库行为明细信息输出至alert日志中,结合自动化运维工具或人工巡检,可及时发现失败登录行为,第一时间关注处理。

CREATE OR REPLACE TRIGGER 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 );

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

dbms_application_info.read_module ( v_module , v_action );

message := to_char(SYSDATE, 'YYYYMMDD HH24MISS' )|| 'logon denied from' ||nvl( ip , 'localhost' )|| ' ' || v_pid || ' ' || v_os_user || 'with' || v_program || '-' || v_module || ' ' || v_action ;

sys . dbms_system.ksdwrt ( 2 , message );

END IF;

END;

/

相关推荐