physical standby(DATAGUARD)环境的ORA-28000 account unlock问题

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

某客户的一个Data Guard环境, 某个接口的数据库用户,登录时提示ORA-28000 account locked首先尝试了alter system flush shared_pool, 无果 查询dba_users, 无论主备都显示account_status为OPEN查了一堆文档,最终放出大招,将profiled的failed_login_attempts改成UNLIMITED,然后生产环境重新alter user account unlock。之后,用户可以重新登录 但是这个是不符合安全设置规定,在主库创建了一个触发器CREATE OR REPLACE TRIGGER sys.logon_denied_to_alert  AFTER servererror ON DATABASEDECLARE  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;/ 然后备库的告警日志中果然出现了一大堆用户登录错误Sat ar 22 14:55:09 2252025-03-22 14:55:69 Password Erro: logon denied from 100.100.100.100 54861 U5er-LOCAL SERVICE with JDBC Thin client "c JDBc Thin client dbUSer: testuser最终定位到了应用端。 这个例子可能应该这么解释:profile的failed_login_attempts在备库依然是生效的,客户端的错误密码登录,导致备库的用户被锁,但是因为备库只读,无法更新数据库更新用户状态, 导致在主库那边看到的account依然是OPEN

相关推荐