返回顶部
分享到

Oracle记录登录用户IP的方法

oracle 来源:互联网 作者:佚名 发布时间:2024-12-26 22:43:51 人浏览
摘要

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

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

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

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

创建一个日志表:

  • 创建一个表来存储登录用户的 IP 地址和其他相关信息。

1

2

3

4

5

6

7

8

9

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

);

创建一个触发器:

  • 创建一个触发器,在用户登录时自动记录 IP 地址和其他信息。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

CREATE OR REPLACE TRIGGER logon_trigger

AFTER LOGON ON DATABASE

BEGIN

  BEGIN

    INSERT 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'),

      SYSTIMESTAMP

    FROM

      v$session s

    WHERE

      s.audsid = SYS_CONTEXT('USERENV', 'SESSIONID');

  EXCEPTION

    WHEN OTHERS THEN

      -- 记录错误信息

      DBMS_OUTPUT.PUT_LINE('Error in logon_trigger: ' || SQLERRM);

  END;

END;

/

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

启用审计功能:

  • 启用 Oracle 的审计功能,记录用户的登录活动。

1

AUDIT SESSION;

查询审计日志:

  • 使用 DBA_AUDIT_TRAIL 视图查询审计日志,获取登录用户的 IP 地址

1

2

3

4

5

6

7

8

9

10

SELECT

  username,

  userhost,

  terminal,

  action_name,

  timestamp#

FROM

  dba_audit_trail

WHERE

  action_name = 'LOGON';

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

创建一个日志表:

  • 创建一个表来存储登录用户的 IP 地址和其他相关信息。

1

2

3

4

5

6

7

8

9

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

);

创建一个存储过程:

  • 创建一个存储过程,用于记录登录用户的 IP 地址。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

CREATE OR REPLACE PROCEDURE log_login_info (

  p_sid NUMBER,

  p_username VARCHAR2,

  p_program VARCHAR2,

  p_machine VARCHAR2,

  p_ip_address VARCHAR2

) IS

BEGIN

  INSERT 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

BEGIN

  INSERT INTO login_log (sid, username, program, machine, ip_address, login_time)

  VALUES (p_sid, p_username, p_program, p_machine, p_ip_address, SYSTIMESTAMP);

EXCEPTION

  WHEN OTHERS THEN

    -- 记录错误信息

    DBMS_OUTPUT.PUT_LINE('Error in log_login_info: ' || SQLERRM);

END log_login_info;

/

创建一个触发器:

  • 创建一个触发器,在用户登录时调用存储过程记录 IP 地址。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

CREATE OR REPLACE TRIGGER logon_trigger

AFTER LOGON ON DATABASE

BEGIN

  log_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

BEGIN

  BEGIN

    log_login_info(

      SYS_CONTEXT('USERENV', 'SID'),

      SYS_CONTEXT('USERENV', 'SESSION_USER'),

      SYS_CONTEXT('USERENV', 'MODULE'),

      SYS_CONTEXT('USERENV', 'HOST'),

      SYS_CONTEXT('USERENV', 'IP_ADDRESS')

    );

  EXCEPTION

    WHEN OTHERS THEN

      -- 记录错误信息

      DBMS_OUTPUT.PUT_LINE('Error in logon_trigger: ' || SQLERRM);

  END;

END;

/

方法四:使用 DBMS_NETWORK_ACL_ADMIN 包

创建一个日志表:

  • 创建一个表来存储登录用户的 IP 地址和其他相关信息。

1

2

3

4

5

6

7

8

9

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

);

创建一个触发器:

  • 创建一个触发器,在用户登录时记录 IP 地址。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

CREATE OR REPLACE TRIGGER logon_trigger

AFTER LOGON ON DATABASE

BEGIN

  INSERT 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'),

    SYSTIMESTAMP

  FROM

    v$session s

  WHERE

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

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Oracle登录时忘记用户名或密码该怎么解决
    (注意:Oracle12c规定用户名都必须以C##开头,否则无法使用。) 1.用户名:sys密码:change_on_install或者manager as sysdba 2.用户名:system密码:manager
  • Oracle记录登录用户IP的方法
    在运维场景中,在定位到某个SQL引起系统故障之后,想知道是哪台机器发过来的,方便定位源头,该如何解决? 在 Oracle 数据库中记录登录
  • 使用Oracle通过gateway连接MSSQL的流程

    使用Oracle通过gateway连接MSSQL的流程
    环境概述 某医院的his系统Oracle数据库要和体检系统进行数据通讯,需要从Oracle能查到sqlserver的数据。本次通过Oracle gateway来解决此问题。
  • oracle数据库被锁定的解除方案介绍

    oracle数据库被锁定的解除方案介绍
    oracle数据库被锁定如何解除 使用以下SQL语句查询Oracle被锁定的表 1 2 SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects b, v$ses
  • Oracle锁表处理方式介绍
    Oracle锁表处理 1.查看被锁的表 1 2 3 select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id 2.查看锁表
  • oracle临时表WITH AS用法介绍
    临时表分类 oracle临时表分为会话级临时表和事务级临时表; 会话级的临时表只与当前会话相关,只要当前会话还存在,临时表中的数据就还
  • oracle的sqlnet.ora文件配置传输加密算法介绍
    oracle的sqlnet.ora文件配置传输加密算法 sqlnet.ora文件位于ORACLE_HOME/network/admin目录中。 sqlnet.ora文件中增加如下: 1 2 3 4 SQLNET.ENCRYPTION_SERVER = R
  • Linux服务器下oracle实现rman自动备份的方式
    为确保oracle数据库数据的安全和一致性,一般我们都需要利用备份手段进行数据库的备份。在oracle数据库中,rman因其强大的功能和完善的手
  • Oracle数据库中表压缩的实现方式和特点
    Oracle数据库中表压缩的实现方式和特点 1 基本表压缩(Basic Table Compression) 基本表压缩主要用于较少更新的表,如数据仓库。它通过压缩由
  • Oracle表空间时间点恢复的方法介绍

    Oracle表空间时间点恢复的方法介绍
    已有一个数据库全备,在PDB中恢复被drop掉的表空间 1.新建表空间 1 create tablespace PITR_TBS datafile /u01/app/oracle/oradata/PRODCDB/PDBPROD2/PITR_TBS01.dbf s
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计