共计 2372 个字符,预计需要花费 6 分钟才能阅读完成。
在 Oracle 中的 v$session 视图中可以保存有会话的想关信息,包括了客户端的大部分连接信息。其中我们可以将会话的发起 ip 地址写入到 client_identifier 和 client_info
上文中我们提到了使用 userenv 函数或者 sys_context 函数可以获得当前会话的相关信息,其中就包含的有 ip_address 这一项
当我们使用 client_identifier 字段来保存登录会话的 ip 地址的时候,我们需要用到 dbms_session.set_identifier 过程 / 函数
当我们使用 client_info 字段来保存登陆会话的 ip 地址的时候,我们需要用到 dbms_application_info.set_client_info 过程 / 函数
例:查看当前用户的 ip 地址:
linuxidc@linux > selectsys_context(‘userenv’,’ip_address’) from dual;
SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’)
————————————-
192.168.77.1
linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context(‘userenv’,’sid’) fromdual);
USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER
————— ——- ———- —————————————-
linuxidc 138 38266
使用 client_identifier 字段
linuxidc@linux > execdbms_session.set_identifier(sys_context(‘userenv’,’ip_address’));
linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context(‘userenv’,’sid’) from dual);
USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER
————— ——- ———- —————————————-
linuxidc 138 38270 192.168.77.1
使用 client_info 字段
linuxidc@linux > execdbms_application_info.set_client_info(sys_context(‘userenv’,’ip_address’));
linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context(‘userenv’,’sid’) from dual);
USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER
————— ——- ———- —————————————-
linuxidc 138 38270 192.168.77.1 192.168.77.1
当然,这个过程过程可以通过一个触发器来调用,当每一个新的用户连接开启的时候自动触发该触发器,将相应的 ip 信息写入 v$session 的相应字段。
触发器的例子:
create or replace trigger on_login_trigger
after logon on database
begin
dbms_application_info.set_client_info(sys_context(‘USERENV’,’IP_ADDRESS’));
end;
/
建立这个 trigger 需要有 dba 权限,这样的话,当每个用户新登录的时候,这个触发器就会起作用,然后就能够将客户端的 ip 地址填充到 v$session 视图中的 client_info 字段中:
linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context(‘userenv’,’sid’) from dual);
USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER
————— ——- ———- —————————————-
linuxidc 149 425192.168.77.1
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138059.htm