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

Oracle如何记录登录用户IP

在运维场景中,在定位到某个SQL引起系统故障之后,想知道是哪台机器发过来的,方便定位源头,该如何解决?

在 Oracle 数据库中记录登录用户的 IP 地址可以通过多种方法实现。以下是几种常见的方法,包括使用触发器、审计功能和自定义日志记录。

方法一:使用触发器记录登录用户的 IP 地址

  1. 创建一个日志表

    • 创建一个表来存储登录用户的 IP 地址和其他相关信息。
    CREATE TABLE login_log (log_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,sid NUMBER,username VARCHAR2(30),program VARCHAR2(48),machine VARCHAR2(64),ip_address VARCHAR2(15),login_time TIMESTAMP
    );
    
  2. 创建一个触发器

    • 创建一个触发器,在用户登录时自动记录 IP 地址和其他信息。
    CREATE OR REPLACE TRIGGER logon_trigger
    AFTER LOGON ON DATABASE
    BEGINBEGININSERT INTO login_log (sid, username, program, machine, ip_address, login_time)SELECT s.sid,s.username,s.program,s.machine,SYS_CONTEXT('USERENV', 'IP_ADDRESS'),SYSTIMESTAMPFROM v$session sWHERE s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');EXCEPTIONWHEN OTHERS THEN-- 记录错误信息DBMS_OUTPUT.PUT_LINE('Error in logon_trigger: ' || SQLERRM);END;
    END;
    /
    

方法二:使用审计功能记录登录用户的 IP 地址

  1. 启用审计功能

    • 启用 Oracle 的审计功能,记录用户的登录活动。
    AUDIT SESSION;
    
  2. 查询审计日志

    • 使用 DBA_AUDIT_TRAIL 视图查询审计日志,获取登录用户的 IP 地址。
    SELECT username, userhost, terminal, action_name, timestamp#
    FROM dba_audit_trail
    WHERE action_name = 'LOGON';
    

方法三:使用自定义日志记录

  1. 创建一个日志表

    • 创建一个表来存储登录用户的 IP 地址和其他相关信息。
    CREATE TABLE login_log (log_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,sid NUMBER,username VARCHAR2(30),program VARCHAR2(48),machine VARCHAR2(64),ip_address VARCHAR2(15),login_time TIMESTAMP
    );
    
  2. 创建一个存储过程

    • 创建一个存储过程,用于记录登录用户的 IP 地址。
    CREATE OR REPLACE PROCEDURE log_login_info (p_sid NUMBER,p_username VARCHAR2,p_program VARCHAR2,p_machine VARCHAR2,p_ip_address VARCHAR2
    ) IS
    BEGININSERT INTO login_log (sid, username, program, machine, ip_address, login_time)VALUES (p_sid, p_username, p_program, p_machine, p_ip_address, SYSTIMESTAMP);
    END log_login_info;
    /-- 如果想记录错误信息,参考如下:
    CREATE OR REPLACE PROCEDURE log_login_info (p_sid NUMBER,p_username VARCHAR2,p_program VARCHAR2,p_machine VARCHAR2,p_ip_address VARCHAR2
    ) IS
    BEGININSERT INTO login_log (sid, username, program, machine, ip_address, login_time)VALUES (p_sid, p_username, p_program, p_machine, p_ip_address, SYSTIMESTAMP);
    EXCEPTIONWHEN OTHERS THEN-- 记录错误信息DBMS_OUTPUT.PUT_LINE('Error in log_login_info: ' || SQLERRM);
    END log_login_info;
    /
    
  3. 创建一个触发器

    • 创建一个触发器,在用户登录时调用存储过程记录 IP 地址。
    CREATE OR REPLACE TRIGGER logon_trigger
    AFTER LOGON ON DATABASE
    BEGINlog_login_info(SYS_CONTEXT('USERENV', 'SID'),SYS_CONTEXT('USERENV', 'SESSION_USER'),SYS_CONTEXT('USERENV', 'MODULE'),SYS_CONTEXT('USERENV', 'HOST'),SYS_CONTEXT('USERENV', 'IP_ADDRESS'));
    END;
    /-- 如果想记录错误信息,参考如下:
    CREATE OR REPLACE TRIGGER logon_trigger
    AFTER LOGON ON DATABASE
    BEGINBEGINlog_login_info(SYS_CONTEXT('USERENV', 'SID'),SYS_CONTEXT('USERENV', 'SESSION_USER'),SYS_CONTEXT('USERENV', 'MODULE'),SYS_CONTEXT('USERENV', 'HOST'),SYS_CONTEXT('USERENV', 'IP_ADDRESS'));EXCEPTIONWHEN OTHERS THEN-- 记录错误信息DBMS_OUTPUT.PUT_LINE('Error in logon_trigger: ' || SQLERRM);END;
    END;
    /
    

方法四:使用 DBMS_NETWORK_ACL_ADMIN 包

  1. 创建一个日志表

    • 创建一个表来存储登录用户的 IP 地址和其他相关信息。
    CREATE TABLE login_log (log_id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,sid NUMBER,username VARCHAR2(30),program VARCHAR2(48),machine VARCHAR2(64),ip_address VARCHAR2(15),login_time TIMESTAMP
    );
    
  2. 创建一个触发器

    • 创建一个触发器,在用户登录时记录 IP 地址。
    CREATE OR REPLACE TRIGGER logon_trigger
    AFTER LOGON ON DATABASE
    BEGININSERT INTO login_log (sid, username, program, machine, ip_address, login_time)SELECT s.sid,s.username,s.program,s.machine,SYS_CONTEXT('USERENV', 'IP_ADDRESS'),SYSTIMESTAMPFROM v$session sWHERE s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');
    END;
    /
    

使用 DBMS_NETWORK_ACL_ADMIN 包

虽然 DBMS_NETWORK_ACL_ADMIN 包主要用于管理网络访问控制列表(ACL),但它与记录登录用户的 IP 地址没有直接关系。如果你有其他特定的需求,比如限制某些 IP 地址的访问,可以使用 DBMS_NETWORK_ACL_ADMIN 包来实现。但在这个场景中,我们主要关注的是记录登录用户的 IP 地址,所以不需要使用 DBMS_NETWORK_ACL_ADMIN 包。

注意事项

  1. 权限
    • 确保你有足够的权限创建表、触发器和存储过程。通常需要 SYSDBADBA 角色。
  2. 性能
    • 记录登录信息可能会对性能产生一定影响,特别是在高并发环境下。可以根据实际情况调整记录频率或使用异步记录方法。
  3. 安全性
    • 确保日志表的安全性,防止未授权访问和篡改。

通过以上方法,你可以有效地记录 Oracle 数据库中登录用户的 IP 地址。希望这些方法对你有所帮助!

相关文章:

Oracle如何记录登录用户IP

在运维场景中,在定位到某个SQL引起系统故障之后,想知道是哪台机器发过来的,方便定位源头,该如何解决? 在 Oracle 数据库中记录登录用户的 IP 地址可以通过多种方法实现。以下是几种常见的方法,包括使用触发…...

Python图像处理:打造平滑液化效果动画

液化动画中的强度变化是通过在每一帧中逐渐调整液化效果的强度参数来实现的。在提供的代码示例中,强度变化是通过一个简单的线性插值方法来控制的,即随着动画帧数的增加,液化效果的强度也逐渐增加。 def liquify_image(image, center, radius…...

构建Ceph分布式文件共享系统:手动部署指南

#作者:西门吹雪 文章目录 micro-Services-TutorialCeph分布式文件共享方案部署Ceph集群使用CephCeph在kubernetes集群中的使用 micro-Services-Tutorial 微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应…...

数据结构——用数组实现栈和队列

目录 用数组实现栈和队列 一、数组实现栈 1.stack类 2.测试 二、数组实现队列 1.Queue类 2.测试 查询——数组:数组在内存中是连续空间 增删改——链表:链表的增删改处理更方便一些 满足数据先进后出的特点的就是栈,先进先出就是队列…...

vue3typescript,shims-vue.d.ts中declare module的vue声明

webpack已经有了vue-loader这些loader了,为什么还需要declare module *.vue’呢? declare module 是为了告诉 tsc 这是一个“模块”。 如果不声明, IDE 里因为 tsc 类型检查, lint 会标红。 但vue-loader 是在 Webpack 构建阶段使…...

C/C++基础知识复习(30)

1) 什么是 C 中的 Lambda 表达式?它的作用是什么? Lambda 表达式: 在 C 中,Lambda 表达式是一种可以定义匿名函数的机制,可以在代码中快速创建一个内联的函数对象,而不需要显式地定义一个函数。Lambda 表…...

【NLP 1、人工智能与NLP简介】

人人都不看好你,可偏偏你最争气 —— 24.11.26 一、AI和NLP的基本介绍 1.人工智能发展流程 弱人工智能 ——> 强人工智能 ——> 超人工智能 ① 弱人工智能 人工智能算法只能在限定领域解决特定的问题 eg:特定场景下的文本分类、垂直领域下的对…...

网络安全事件管理

一、背景 信息化技术的迅速发展已经极大地改变了人们的生活,网络安全威胁也日益多元化和复杂化。传统的网络安全防护手段难以应对当前繁杂的网络安全问题,构建主动防御的安全整体解决方案将更有利于防范未知的网络安全威胁。 国内外的安全事件在不断增…...

Swagger记录一次生成失败

最近在接入Swagger的时候遇到一个问题,就是Swagger UI可以使用的,但是/v3/docs 这个接口的json返回的base64类型的json,并不是纯json,后来检查之后是因为springboot3里面配置了json压缩。 Beanpublic HttpMessageConverters cusHt…...

Go 语言常用工具方法总结

在 Go 语言开发中,常常需要进行一些常见的类型转换、字符串处理、时间处理等操作。本文将总结一些常用的工具方法,帮助大家提高编码效率,并提供必要的代码解释和注意事项(go新人浅浅记录一下,以后来翻看🤣&…...

ThingsBoard规则链节点:GCP Pub/Sub 节点详解

目录 引言 1. GCP Pub/Sub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 事件通知 3.4 任务调度 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0…...

【Linux】select,poll和epoll

select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符fd,一旦某个描述符就绪(一般是读就绪或者写就绪),系统会通知有I/O事件发生了(不能定位是哪一个)。但sel…...

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…...

python怎样运行js语句

1. 安装 pip install PyExecJS # 需要注意, 包的名称:PyExecJS 2. 简单使用 import execjs execjs.eval("new Date") 返回值为: 2018-04-04T12:53:17.759Z execjs.eval("Date.now()") 返回值为:152284700108…...

汽车渲染领域:Blender 和 UE5 哪款更适用?两者区别?

在汽车渲染领域,选择合适的工具对于实现高质量的视觉效果至关重要。Blender和UE5(Unreal Engine 5)作为两大主流3D软件,各自在渲染动画方面有着显著的差异。本文将从核心定位与用途、工作流程、渲染技术和灵活性、后期处理与合成四…...

JAVA实现将PDF转换成word文档

POM.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…...

前端-Git

一.基本概念 Git版本控制系统时一个分布式系统&#xff0c;是用来保存工程源代码历史状态的命令行工具 简单来说Git的作用就是版本管理工具。 Git的应用场景&#xff1a;多人开发管理代码&#xff1b;异地开发&#xff0c;版本管理&#xff0c;版本回滚。 Git 的三个区域&a…...

如何分析Windows防火墙日志

Windows防火墙&#xff0c;也被称为Windows Defender Firewall&#xff0c;是一种内置的安全功能&#xff0c;可以主动监控和分析运行Windows操作系统的计算机上通过Windows防火墙的网络流量&#xff0c;主要目的是作为计算机和互联网或其他网络之间的屏障&#xff0c;使管理员…...

工作坊报名|使用 TEN 与 Azure,探索你的多模态交互新场景

GPT-4o Realtime API 发布&#xff0c;语音 AI 技术正在进入一场新的爆发。语音AI技术的实时语音和视觉互动能力将为我们带来更多全新创意和应用场景。 实时音频交互&#xff1a; 允许应用程序实时接收并响应语音和文本输入。自然语音生成&#xff1a; 减少 AI 技术生成的语音…...

学习笔记041——Elastic Search的学习与使用以及SpringBoot整合

文章目录 1、Elastic Search介绍1.1、ES 的数据结构1.2、ES 为什么查询快1.3、CRUD 2、Spring Boot 整合 ES 1、Elastic Search介绍 ‌Elasticsearch‌是一个分布式的、基于RESTful API的搜索和分析引擎&#xff0c;广泛用于大规模数据存储和快速检索。它最初由Shay Banon于20…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)

在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...