今早巡检,发现alert日志,持续不断发出如下告警:

Oracle-logon denied from xxx.xxx.xxx.xxx xxxx root with JDBC Thin Client DBC Thin Client_ORA-1017

拒绝登录。

这里,使用root登录,访问被拒绝了。

其一,有可能权限不足,拒绝登录。

其二,有可能密码不正确,拒绝登录。这里的密码,指的不是数据库中用户的密码。

其三,有可能其他策略影响,导致拒绝登录。dba_profile 中的用户策略,都是无限制。

通过以下查询发现,是有触发器,导致了以下持续不断的告警信息。

select * from dba_source where text like '%sys_context%userenv%network_protocol%';

触发器是这样的:如果用户登录失败(ORA-1017:用户名或口令无效),则记录如下信息 

2024-03-11 07:32:40 logon denied from 192.168.0.123 12587 root with JDBC Thin Client DBC Thin Client
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;
/

当然,可能有 library cache lock。