我需要获取有关连接到我的 DB2 的用户的信息。如何获取(如果可以)该用户的计算机名称/登录名或 IP?我可以获取并登录到 DB2 host_name
,current user
但我想要更具体的信息,例如 IP 或计算机名称。我怎么能做到这一点?
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
您可以使用元数据获取一些有用的数据。例如下面的代码:
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
您可以选择这些列:
我在 DB 10 上测试了它并且它正在工作,但是我没有在 DB 9 上测试它
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 条记录。