在SQLServer上得到客户端信息(操作的数据库名,计算机名,用户名,网卡物理地址,IP地址,程序名)...

ExpandedBlockStart.gif
create   proc  p_getlinkinfo
@dbname  sysname = null , -- 要查询的数据库名,默认查询所有数据库的连接信息
@includeip   bit = 0      -- 是否显示IP地址,因为查询IP地址比较费时,所以增加此控制
as
declare   @dbid   int
set   @dbid = db_id ( @dbname )

create   table  #tb(id  int   identity ( 1 , 1 ),dbname sysname,hostname  nchar ( 128 ),loginname  nchar ( 128 ),net_address  nchar ( 12 ),net_ip  nvarchar ( 15 ),prog_name  nchar ( 128 ))
insert   into  #tb(hostname,dbname,net_address,loginname,prog_name)
select   distinct  hostname, db_name (dbid),net_address,loginame,program_name  from  master..sysprocesses
where  hostname <> ''   and  ( @dbid   is   null   or  dbid = @dbid )

if   @includeip = 0   goto  lb_show   -- 如果不显示IP地址,就直接显示

declare   @sql   varchar ( 500 ), @hostname   nchar ( 128 ), @id   int
create   table  #ip(hostname  nchar ( 128 ),a  varchar ( 200 ))
declare  tb  cursor  local  for   select   distinct  hostname  from  #tb
open  tb
fetch   next   from  tb  into   @hostname
while   @@fetch_status = 0
begin
set   @sql = ' ping  ' + @hostname + '  -a -n 1 -l 1 '
insert  #ip(a)  exec  master..xp_cmdshell  @sql
update  #ip  set  hostname = @hostname   where  hostname  is   null
fetch   next   from  tb  into   @hostname
end

update  #tb  set  net_ip =left (a, patindex ( ' %:% ' ,a) - 1 )
from  #tb a  inner   join  (
select  hostname,a = substring (a, patindex ( ' Ping statistics for %:% ' ,a) + 20 , 20 from  #ip
where  a  like   ' Ping statistics for %:% ' ) b  on  a.hostname = b.hostname

lb_show:
select  id,数据库名 = dbname,客户机名 = hostname,用户名 = loginname
,网卡物理地址
= net_address,IP地址 = net_ip,应用程序名称 = prog_name  from  #tb
GO

-- 显示所有本机的连接信息:
exec  p_getlinkinfo
-- 显示所有本机的连接信息,包含ip地址:
exec  p_getlinkinfo  @includeip = 1
-- 显示连接指定数据库的信息:
exec  p_getlinkinfo  @dbname =数据库名 , @includeip = 1

 

转载于:https://www.cnblogs.com/love_study/archive/2010/03/02/1676601.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值