当前位置: 首页 > news >正文

Oracle审计用户登录信息

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

一、引言​

在数据库安全体系中,登录失败审计是抵御暴力破解、非法访问的关键防线。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 auditNAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /opt/oracle/product/23ai/dbhomeFree/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_alertAFTER SERVERERRORON DATABASE
DECLAREMESSAGE         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);
BEGINIF (ora_is_servererror (1017))THEN-- get IP for remote connections:IF SYS_CONTEXT ('userenv', 'network_protocol') = 'TCP'THENIP := SYS_CONTEXT ('userenv', 'ip_address');END IF;SELECT DISTINCT sid INTO v_sid FROM sys.v_$mystat;SELECT p.SPID, v.PROGRAMINTO v_pid, v_programFROM V$PROCESS p, V$SESSION vWHERE 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 用户登录失败事件,为数据库安全审计与非法访问溯源提供完整技术支撑。


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

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

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

📊 实战项目分享

📚 技术原理讲解

🧠 数据库架构思维

🛠 工具推荐与实用技巧

立即关注,持续更新中 👇

相关文章:

  • 【嵌入式人工智能产品开发实战】(二十二)—— 政安晨:改造小智AI开发智能体硬件(案例:移植PowerManager后麦克风不工作)
  • Parasoft为可口可乐赋能: 强化软件开发与质量保证
  • 二进制编码、定点数与浮点数
  • 左手腾讯CodeBuddy 、华为通义灵码,右手微软Copilot,旁边还有个Cursor,程序员幸福指数越来越高了
  • 力扣-两数之和
  • uniapp-商城-64-后台 商品列表(商品修改---页面跳转,深浅copy应用,递归调用等)
  • 【Java学习笔记】main方法
  • 电脑中所有word文件图标变白怎么恢复
  • (vue)前端实现下载后端提供的URL文件
  • 鸿蒙devEco studio如何创建模拟器
  • C++线程池实现
  • JAVA项目中常见的注解总结
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.4.8)
  • 使用Jenkins部署nodejs前端项目
  • 【物联网】基于树莓派的物联网开发【6】——汉化+字体库输入法安装
  • 【Linux系统】第五章 - 第七章 -2 逻辑卷 + RAID阵列
  • 基于R语言的贝叶斯网络模型实践技术应用:开启科研新视角
  • js不同浏览器标签页、窗口或 iframe 之间可以相互通信
  • Redis语法大全
  • 解决dedecms织梦系统{dede:arclist keyword=‘动态获取关键词‘}只生效一次
  • 网站建设教程答允苏州久远网络/抖音关键词排名查询