2

我需要获取有关连接到我的 DB2 的用户的信息。如何获取(如果可以)该用户的计算机名称/登录名或 IP?我可以获取并登录到 DB2 host_namecurrent user但我想要更具体的信息,例如 IP 或计算机名称。我怎么能做到这一点?

4

3 回答 3

3

您可以从 MON_GET_CONNECTION 表函数中获取该信息。

表函数在上一个版本中发生了很大变化,因此取决于您的 DB2 版本,您可以获得哪些值。

SELECT application_handle, 
       CLIENT_USERID,
       CLIENT_WRKSTNNAME, 
       CLIENT_HOSTNAME, 
       CLIENT_IPADDR
FROM TABLE(MON_GET_CONNECTION(cast(NULL as bigint), -2)) AS t 
ORDER BY rows_returned DESC;

例如 CLIENT_HOSTNAME 和 CLIENT_IPADDR 在 v9.7 中不起作用

http://pic.dhe.ibm.com/infocenter/db2luw/v10r5/topic/com.ibm.db2.luw.sql.rtn.doc/doc/r0053938.html

于 2013-08-22T12:28:06.143 回答
2

您可以使用元数据获取一些有用的数据。例如下面的代码:

ResultSet rS = dataSource.getConnection().getMetaData().getClientInfoProperties();
while(rS.next()){
    System.out.println("**************************************************");
    System.out.println("NAME: <" + rS.getString(1) + ">");
    System.out.println("MAX_LEN: <" + rS.getInt(2) + ">");
    System.out.println("DEFAULT_VALUE: <" + rS.getString(3) + ">");
    System.out.println("DESCRIPTION: <" + rS.getString(4) + ">");           
}
    System.out.println("**************************************************");

应该给你一些接近这个的东西:

******************************************************
名称:应用程序名称
最大长度:255
默认值:
描述:当前使用连接的应用程序的名称。这存储在 DB2 专用寄存器 CURRENT CLIENT_WRKSTNNAM 中。
******************************************************
名称:ClientAccountingInformation
最大长度:255
默认值:
描述:来自为连接指定的客户端信息的记帐字符串的值。这存储在 DB2 特殊寄存器 CURRENT CLINT_ACTNG
******************************************************
名称:客户端主机名
最大长度:255
DEFAULT_VALUE:ADMIN-9XYZK
描述:运行使用连接的应用程序的计算机的主机名。这存储在 DB2 特殊寄存器 CURRENT CLINT_WRKSTNNAM 中
******************************************************
名称:客户用户
最大长度:255
默认值:
描述:使用连接的应用程序正在为其执行工作的用户的名称。这存储在 DB2 专用寄存器 CURRENT CLINT_USRID 中。
******************************************************

编辑#2

DB_MEMBERS 表函数返回有关 DB2 实例的基本成员信息。

db2SelectStatement = "从表中选择 * (SYSPROC.DB_MEMBERS()) 作为成员";

这将输出如下内容:


MEMBER_NUMBER------------HOST_NAME--------------PARTITION_NUMBER------MEMBER_TYPE


0-------------member1.mycompany.com----0-- ------------------------------------ D
1------------ -member2.mycompany.com----------------0-------------------------C
7-------------member3.mycompany.com----0-- ------------------------------------D

您可以选择这些列:

  • MEMBER_NUMBER
  • 主机名
  • PARTITION_NUMBER
  • 成员类型
  • PORT_NUMBER
  • SWITCH_NAME
  • 地位
  • 我在 DB 10 上测试了它并且它正在工作,但是我没有在 DB 9 上测试它

    于 2013-08-23T12:18:08.517 回答
    0

    db2

    select AGENT_ID as AGENT, 
           substr(APPL_NAME, 1, 30) as APP_NAME,
           substr(APPL_ID, 1, 40)as APP_IP_ADD,
           substr(CLIENT_NNAME, 1, 40)as CLIENT 
    from sysibmadm.snapappl_info order by CLIENT_NNAME
    

    输出

    AGENT                APP_NAME                       APP_IP_ADD                               CLIENT
    -------------------- ------------------------------ -------------------------------------- ----------------------------------------
    .....................................................................................................................................
    

    选择了 341 条记录。

    于 2018-10-23T10:55:34.613 回答