如何通过T-SQL获得当前连接的客户端的IP和机器名

客户端

/*****************************************************************************************************************

    下面的SP是返回所有的客户端的IP和HOSTNAME,目的是可以通过JOB返回某一时间点的CLIENT 的连接情况.

     我当时写这个脚本的目的是经常有一些没有授权的客户机,通过SQLSERVER的CLIENT就连接到SQLSERVER,所以我可以定义一个JOB每隔30分钟运行一次这个存储过程,并且将内容写的一个LOG文件,这样可以大概记录有哪些CLIENT在连接SQLSERVER,当然大家可以可以修改这个脚本,使之返回更多的信息,比如CPU,MEMORY,LOCK....

Author:黄山光明顶

mail:leimin@jxfw.com

version:1.0.0

date:2004-1-30

(如需转载,请注明出处!)

*********************************************************************************************************/

Create proc usp_getClient_infor
as
set nocount on

Declare @rc int
Declare @RowCount int

Select @rc=0
Select @RowCount=0

begin
--//create temp table ,save sp_who information
  create table #tspid(
 spid int null,
 ecid int null,
 status nchar(60) null,
 loginname nchar(256) null,
 hostname nchar(256) null,
 blk bit null,
 dbname nchar(256) null,
 cmd nchar(32)
  )

--//create temp table save all SQL client IP and hostname and login time
Create table #userip(
 [id]int identity(1,1),
 txt varchar(1000),
)

--//Create result table to return recordset
Create table #result(
 [id]int identity(1,1),
 ClientIP varchar(1000),
 hostname nchar(256),
 login_time datetime default(getdate())

 )
--//get host name by exec sp_who ,insert #tspid from sp_who,
insert into #tspid(spid,ecid,status,loginname,hostname,blk,dbname,cmd) exec sp_who

declare @cmdStr varchar(100),
 @hostName nchar(256),
 @userip varchar(20),
 @sendstr varchar(100)
 

--//declare a cursor from table #tspid
declare tspid cursor
for select distinct hostname from #tspid  with (nolock) where spid>50
for read only

open tspid
   fetch next from tspid into @hostname
   While @@FETCH_STATUS = 0
   begin
 select @cmdStr='ping '+rtrim(@hostName)
 
 insert into #userip(txt) exec master..xp_cmdshell @cmdStr
 
 select @rowcount=count(id) from #userIP

 if @RowCount=2 --//no IP feedback package
  begin
  insert into #Result(ClientIP,hostname) values('Can not get feedback package from Ping!',@hostname)
  end
 if @RowCount>2 
  begin
  select @userip=substring(txt,charindex('[',txt)+1,charindex(']',txt)-charindex('[',txt)-1)
  from #userIP
  where txt like 'Pinging%'
  
  insert into #Result(ClientIP,hostname) values(@userIP,@hostname)
  end
 select @rc=@@error
 if @rc=0
  truncate table #userip --//clear #userIP table

   fetch next from tspid into @hostname
 end

close tspid
deallocate tspid

select * from #result with(nolock)

drop table #tspid
drop table #userip
drop table #result
end
go
exec usp_getClient_infor

时间: 2025-01-07 12:08:38

如何通过T-SQL获得当前连接的客户端的IP和机器名的相关文章

在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)

error|server|程序 错误:"在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) ",       上述错误我遇到两种情况,一种是在打开打开SQL Server 2005时弹出的,另一种是在应用程序连接SQL Server 2005时出现的.归纳了一下,由以下几个原因: 1.数据库引擎没有启动.  

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

错误信息: 标题: 连接到服务器 ------------------------------ 无法连接到 (local). ------------------------------ 其他信息: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (Microsof

SQL Server远程连接出错的解决方法

SQL Server远程连接出错?不要紧,下面就为您分析SQL Server远程连接出错的原因,并给出解决问题的方法,希望对您学习SQL Server远程连接方面能有所帮助. 在进行sqlserver复制的时候,我的情况是这样的,我在本地的management studio里连接了一个远程的sqlserver数据库服务器,用的不是默认端口号,也没有开browser服务,而且是命名实例,非默认实例,所以连接的服务器名得用abcabcserver,port这样的模式来连,然后配置它的复制分发(包括新

SQL Server 建立连接时出现与网络相关的错误

  在连接SQL Server 2000数据库的时候,出现以下错误: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 在连接SQL Server 2005数据库的时候,提示一个错误!错误信息如下! 在建立与服务器的连接时出错.在连接到 SQL Server 2005

SQL Server 2008 连接JDBC图文

  SQL Server 2008是目前windows上使用最多的sql数据库,2008的安装机制是基于framework重写的,特点是非常耗时间(我的小本本配置还是可以的.^_^).但不需要原ISO或隐藏起来的MSI文件(如果你不小心手工删除这些安装文件的话,也不必担心.) 这也是为什么大多数时候,SQL Server 2008的安装日志文件setup.log会有1G大小的原因.因为安装工序实在是太庞大了. SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,

SQL Server 登录连接失败

  问题描述如下: -------yyc 在与SQLServer建立连接时出现与网络相关的或特定与实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且SQL SERVER已配置允许远程链接.(provide:命名管道提供程序,error:40 -无法打开到SQL Server的连接)(Microsoft SQL Server,错误:2) 我刚刚在登录连接SQL Server 时遇到了如上问题,在综合了网上的各种解决方案后,终于成功的解决了该问题,并整理经验如下,供后来者使用. 步骤一:

c#-在与SQL Server建立连接时出现与网络相关的或特定于实例的错误

问题描述 在与SQL Server建立连接时出现与网络相关的或特定于实例的错误 throw new Exception(ex.Message); 这一句高亮 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接) ONDBUtility.DLL!ON

MS SQL专用管理员连接DAC

在SQL SERVER 2005中,微软引入了一个叫做数据库专用管理员连接方式(DAC Dedicated Administrator Connection)的特性,使用这个新特性,数据库管理员可以在数据库引擎不能响应正常连接时,可以通过DAC连接到数据库,执行诊断函数或T- SQL语句,对数据库服务器进行问题诊断和故障排除(即使数据库实例以锁定或非正常状态下运行).其实DAC还有一个非常有用的用途,用来研究数据库内部 的表.目录视图等. 以前我也写过关于DAC的一篇文章SQL Server数据

sql server与android-android与sql server怎么连接!步骤是什么呢?

问题描述 android与sql server怎么连接!步骤是什么呢? android与sql server怎么连接!步骤是什么呢?谁能指点一下我啊...跪求... 解决方案 android是客户端系统,不要直接和sql server连,对于本地数据,用sqlite,对于服务器数据,你用asp.net jsp去写一个服务器端,它们访问数据库,并且返回结果给你的android端. 解决方案二: 不能直接连接远程数据库,你需要写一个web服务,提供http接口,后台访问数据库,返回给你json数据,