如何获得所有远程Session 的客户端IP 地址
在Oracle 数据库中没有直接获取远程session 客户端IP 地址的方法。但是存在直接获取当前session 客户端IP 地址的方法。通过在数据库中创建after logon 触发器,再结合使用DBMS_APPLICATION_INFO.SET_CLIENT_INFO 存储过程,我们可以通过查询v$session 来获取所有
远程session 的客户端IP 地址。
首先,创建如下触发器:
CREATE OR REPLACE TRIGGER login_on AFTER LOGON ON DATABASE
DECLARE
ipinfo VARCHAR2(30);
BEGIN
SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') INTO ipinfo FROM DUAL;
DBMS_APPLICATION_INFO.SET_CLIENT_INFO(ipinfo);
END;
/
然后使用任意的用户远程(TNS)连接到数据库中,然后通过查询以下语句便可查看该session 的客户端IP 地址:
21:03:35 system@PROD> conn scott/tiger@prod
Connected.
21:04:05 scott@PROD> col sys_context('userenv','sid') for a40
21:04:18 scott@PROD> select sys_context('userenv','sid') from dual;
SYS_CONTEXT('USERENV','SID')
----------------------------------------
125