Oracle审计用户登录信息

发布于:2025-05-22 ⋅ 阅读:(21) ⋅ 点赞:(0)

#数据库 #审计 #登录信息

一、引言​

在数据库安全体系中,登录失败审计是抵御暴力破解、非法访问的关键防线。Oracle 数据库提供了多层审计机制,但在传统审计功能受限(如AUDIT_TRAIL=NONE)的特殊场景下,需通过定制化方案实现精准审计。本文结合 Oracle特性,提供一套覆盖环境检测、方案实施、故障处理的完整技术方案,满足等保 2.0 及企业安全合规要求。

二、审计参数基线检查​

参数名称​

生产环境推荐值​

当前检测值​

风险等级​

修复建议​

audit_trail​

DB/XML​

NONE​

高​

启用传统审计或采用触发器方案​

audit_sys_operations​

TRUE​

FALSE​

中​

建议启用系统操作审计​

unified_auditing​

ENABLED​

DISABLED​

中​

参考官方文档启用统一审计​

文本结合当前环境禁用传统审计,需通过数据库触发器实现登录失败审计核心功能。

三、触发器审计方案设计

捕捉登录失败的几种方法:Audit (SQL> audit session whenever not successful; )、database trigger、 event errorstack、 sqlnet trace ,如果audit 在数据库已禁,可以使用创建一个Trigger,把登录失败信息写入DB alert log.

3.1 查看审计参数

SQL> show parameter audit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /opt/oracle/product/23ai/dbhom
                                                 eFree/rdbms/audit
audit_sys_operations                 boolean     FALSE
audit_syslog_level                   string
audit_trail                          string      NONE
unified_audit_common_systemlog       string
unified_audit_systemlog              string

3.2 触发器实现逻辑

3.3 核心实现逻辑

1)错误码捕获:

通过ora_is_servererror(1017)精准识别无效凭证登录​

2)元数据采集:​

  • 网络层:SYS_CONTEXT('userenv', 'ip_address')获取客户端 IP​
  • 进程层:关联V$PROCESS与V$SESSION获取操作系统 PID​
  • 应用层:通过DBMS_APPLICATION_INFO获取客户端模块 / 动作​

3)日志格式化:采用KEY=VALUE结构化格式,便于后续日志解析​

3.4 触发器脚本​

CREATE OR REPLACE TRIGGER logon_denied_to_alert
   AFTER SERVERERROR
   ON DATABASE
DECLARE
   MESSAGE         VARCHAR2 (256);
   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_client_id     VARCHAR2 (64);
   v_dbuser        VARCHAR2 (100);
   v_client_host   VARCHAR2 (80);
BEGIN
   IF (ora_is_servererror (1017))
   THEN
      -- get IP for remote connections:
      IF SYS_CONTEXT ('userenv', 'network_protocol') = 'TCP'
      THEN
         IP := SYS_CONTEXT ('userenv', 'ip_address');
      END IF;

      SELECT DISTINCT sid INTO v_sid FROM sys.v_$mystat;

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

      v_client_host := SYS_CONTEXT ('USERENV', 'HOST');

      v_client_id := sys_context ('userenv', 'client_identifier');
      v_dbuser := sys_context ('USERENV', 'AUTHENTICATED_IDENTITY');

      MESSAGE :=
            TO_CHAR (SYSDATE, 'Dy Mon dd HH24:MI:SS YYYY')
         || ' logon denied '
         || 'IP ='
         || NVL (IP, 'unknown')
         || ' client_host='
         || v_client_host
         || ' pid = '
         || v_pid
         || ' os user = '
         || v_os_user
         || ' client id = '
         || v_client_id
         || ' with program= '
         || v_program
         || ' module ='
         || v_module
         || ' action='
         || v_action
         || ' dbuser='
         || v_dbuser;

      sys.DBMS_SYSTEM.ksdwrt (2, MESSAGE);
   -- remove comments from next line to let it hang for 5 minutes
   -- to be able to do more diagnostics on the operating system:
   -- sys.dbms_lock.sleep(300);
   END IF;
END;
/

四、实施效果

测试普通用户登录到数据库

4.1 alert日志

FREEPDB1(3):Tue Nov 12 08:25:52 2025 logon denied IP =unknown client_host=oracle19c03 pid = 11217 os user = oracle client id =  with program= sqlplus@oracle19c03 (TNS V1-V3) module =sqlplus@oracle19c03 (TNS V1-V3) action= dbuser=APPS
2024-11-12T08:26:47.063315-08:00

4.2 获取主机IP

SQL> select utl_inaddr.get_host_address('oracle19c03') from dual;

UTL_INADDR.GET_HOST_ADDRESS('ORACLE19C03')
--------------------------------------------------------------------------------
192.168.2.116

五、总结

通过多层审计方案的组合实施,可有效记录 Oracle 用户登录失败事件,为数据库安全审计与非法访问溯源提供完整技术支撑。


🚀 更多数据库干货,欢迎关注【安呀智数据坊】

如果你觉得这篇文章对你有帮助,欢迎点赞 👍、收藏 ⭐ 和留言 💬 交流,让我知道你还想了解哪些数据库知识!

📬 想系统学习更多数据库实战案例与技术指南?

📊 实战项目分享

📚 技术原理讲解

🧠 数据库架构思维

🛠 工具推荐与实用技巧

立即关注,持续更新中 👇