Netezza SQL 查找客户端 IP

Posted

技术标签:

【中文标题】Netezza SQL 查找客户端 IP【英文标题】:Netezza SQL to find Client IP 【发布时间】:2014-12-10 13:59:26 【问题描述】:

有没有办法在 Netezza 中返回客户端 IP 地址?在 Oracle 中,我们运行下面的查询。

SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') FROM dual;

谢谢

【问题讨论】:

【参考方案1】:

此查询可以为您提供有关 current_session 所需的所有信息。

select client_ip
from _v_session_detail
where session_id= CURRENT_SID

【讨论】:

【参考方案2】:

如果您不尝试将其作为表中的列访问,则可以使用“显示会话”来提供该信息。

SYSTEM.ADMIN(ADMIN)=> SYSTEM.ADMIN(ADMIN)=> show session;
 SESSION_ID |  PID  | USERNAME | DBNAME | SCHEMA | TYPE |    CONNECT_TIME     | SESSION_STATE_NAME |   SQLTEXT    | PRIORITY_NAME | CLIENT_PID | CLIENT_IP | CLIENT_OS_USERNAME
------------+-------+----------+--------+--------+------+---------------------+--------------------+--------------+---------------+------------+-----------+--------------------
      16228 | 10272 | ADMIN    | SYSTEM | ADMIN  | sql  | 2014-12-10 10:56:48 | active             | show session | normal        | 10271      | 127.0.0.1 |
(1 row)

您还可以查询 _v_session,它会报告您可以查看/授权查看的会话,但不一定告诉您哪一个是您的。对于非管理员用户,这通常只是您的会话,因此应该很容易分辨。

SYSTEM.ADMIN(ADMIN)=> select * from _v_session;
  ID   |  PID  | USERNAME | DBNAME | TYPE |      CONNTIME       | STATUS |         COMMAND          | PRIORITY |  CID  |  IPADDR   | CLIENT_OS_USERNAME
-------+-------+----------+--------+------+---------------------+--------+--------------------------+----------+-------+-----------+--------------------
 16228 | 10272 | ADMIN    | SYSTEM | sql  | 2014-12-10 10:56:48 | active | select * from _v_session |        3 | 10271 | 127.0.0.1 |
(1 row)

如果您只需要有关您正在调用查询的特定会话的信息,那么这可以解决问题。

SYSTEM.ADMIN(ADMIN)=> select * from _v_session where id = current_sid;

  ID   |  PID  | USERNAME | DBNAME | TYPE |      CONNTIME       | STATUS |                     COMMAND                     | PRIORITY |  CID  |  IPADDR   | CLIENT_OS_USERNAME
-------+-------+----------+--------+------+---------------------+--------+-------------------------------------------------+----------+-------+-----------+--------------------
 16837 | 22310 | ADMIN    | SYSTEM | sql  | 2014-12-10 19:06:21 | active | select * from _v_session where id = current_sid |        3 | 22309 | 127.0.0.1 |
(1 row)

我应该注意,您在此处查找的内容已经被查询历史数据库跟踪,该数据库很可能已经在您的系统上进行了配置。

【讨论】:

我的实际需求是记录执行程序的用户的Client机器IP。如果连接了多个用户,查询 _V_session 将返回多行。寻找以下功能的替代品。创建或替换函数 F_USER_IP return varchar2 is V_IP Varchar2(25) ;开始 SELECT SYS_CONTEXT('USERENV','IP_ADDRESS') into V_IP FROM dual;返回(V_IP);结束 F_USER_IP ;谢谢。 啊,好的。更新以反映这一点。请注意,如果您不尝试将其集成到其他应用程序中,查询历史数据库(很可能已经在您的系统上配置)中已经为您跟踪了您所要求的内容。

以上是关于Netezza SQL 查找客户端 IP的主要内容,如果未能解决你的问题,请参考以下文章

Netezza:使用 SQL / force 生成完整的统​​计信息

改进在 WHERE 子句中包含数百个字符串的 Netezza SQL 查询

在 win 7 上的 IBM netezza Aginity 工作台中查找数据库大小的错误

如何在 Rails 2.3.8 中为 https 请求(即安全连接)查找客户端 IP

我可以使用客户端 Javascript 执行 DNS 查找(主机名到 IP 地址)吗?

使用外部表逻辑在 netezza 中加载数据时出错