查看连接到SQL Server数据库的用户信息

-- =============================================
-- Author:        <lisky>
-- Create date: <2010-09-10>
-- Description:    <查看连接到SQL Server数据库的用户信息>
-- =============================================

ALTER PROCEDURE [dbo].[SMC_GetDBConnectionsInfo]
@DatabaseName sysname=NULL,  --参数1:要查询的数据库名称,默认查询所有数据库的连接信息
@ShowIPAddress bit=0                        --参数2:是否显示IP地址,默认为否(查询IP地址比较费时,但必须启用 'xp_cmdshell' 组件)
AS
SET Transaction Isolation Level Read UNCOMMITTED
SET NOCOUNT ON

DECLARE @DatabaseID int
SET @DatabaseID=db_id(@DatabaseName)

Create TABLE #tblTemp(ID int identity(1,1),
                                                  DatabaseName sysname,
                                                  HostName nchar(128),
                                                  UserName nchar(128),
                                                  MACAddress nchar(12),
                                                  IPAddress nchar(15),
                                                  Application nchar(128))

Insert INTO #tblTemp(HostName,DatabaseName,MACAddress,UserName,Application)
Select DISTINCT hostname,db_name(dbid),net_address,loginame,program_name
FROM master..sysprocesses
Where hostname<>'' AND (@DatabaseID IS NULL or dbid=@DatabaseID)

IF @ShowIPAddress=0 GOTO Tag_ShowIPAddress

DECLARE @SQLStatement varchar(500),@HostName nchar(128),@ID int
Create TABLE #tblIP(HostName nchar(128),
       TempString varchar(200))
DECLARE tblTemp CURSOR LOCAL FOR Select DISTINCT HostName FROM #tblTemp
OPEN tblTemp
FETCH NEXT FROM tblTemp INTO @HostName
WHILE @@FETCH_STATUS=0

BEGIN
SET @SQLStatement='ping '+@HostName+' -a -n 1 -l 1'
Insert #tblIP(TempString) EXEC master..xp_cmdshell @SQLStatement
Update #tblIP SET HostName=@HostName Where HostName IS NULL
FETCH NEXT FROM tblTemp INTO @HostName
END

Update #tblTemp SET IPAddress=LEFT(TempString,PATINDEX('%:%',TempString)-1)
FROM #tblTemp X INNER JOIN ( Select HostName,TempString=SUBSTRING(TempString,PATINDEX('ping statistics for %:%',TempString)+20,20)
                                                            FROM #tblIP
                                                             Where TempString LIKE'ping statistics for %:%') Y
                                  ON X.HostName=Y.HostName

Tag_ShowIPAddress:
Select 序号=ID,数据库名称=DatabaseName,客户机名称=RTRIM(HostName),用户名=RTRIM(UserName),
                 MAC地址=MACAddress,IP地址=IPAddress,应用程序名称=RTRIM(Application)
FROM #tblTemp

你可能感兴趣的:(查看连接到SQL Server数据库的用户信息)