如何找出用于访问SQL Server的用户名和计算机名

时间:2009-03-13 04:54:41

标签: sql sql-server sql-server-2005 tsql

我的工作公司有一个MSSQL服务器2005.我有两个问题,关于找出当前的日志用户以及发送警告消息的任何方式:

第一个问题是,是否有任何T-SQL或SP可用于查找当前登录用户名和机器名。如果用户使用SQL Server sa名称远程访问SQL Server,有没有办法找出该用户的Windows名称(登录到Windows的名称)?

我的下一个问题是,如果我可以获取用户名或ID,是否有任何方法可以发出警告消息,例如“当前SQL服务器正在清理或备份,请不要在此时登录”。我想这可能很难。我可能需要向用户发送电子邮件。

只能在公司中访问SQL服务器。 SQL服务器有一个用户列表作为登录用户:Windows用户,SQL用户和sa。

3 个答案:

答案 0 :(得分:33)

SELECT SUSER_SNAME(), HOST_NAME()

如果连接是“sa”(或任何其他SQL登录),则无法找到域/ windows用户名。 SQL Server只知道它是“sa”或SQL登录。

HOST_NAME可能也不可靠,可以在连接字符串(“应用程序名称”)中设置。或者它可能是模糊的,例如“Microsoft Office”默认为Access,Excel等

您可以通过sys.dm_exec_connections中的client_net_address回溯并将MAC地址与IP匹配,并找出登录的用户...

答案 1 :(得分:4)

找出主机和用户的简单方法是

EXEC sp_who2;

你可以获得一些其他可以很好知道的信息,就好像用户是活跃的等等...... 它没有解决gbn宣布的问题。

答案 2 :(得分:3)

首先感谢您的所有建议。我尝试了所有的方法,我认为Joakim Backman的方法符合我的需要。以下是我发现的摘要。

  • 查询sys.syslogins仅列出登录信息。 accdate不提供当前登录用户的时间戳。我尝试从另一个应用程序登录到我的SQL,此查询未列出登录。
  • SELECT SUSER_SNAME(),HOST_NAME()仅列出SQL Server上的一个用户。例如,我以SQL名称登录SQL服务器。此查询的结果仅列出我的名称和计算机名称。此查询未列出SQL Server上的当前用户。
  • exec sp_who2列出了我需要的信息。它列出了当前用户名机器名称,活动状态,数据库名称用户访问权限和使用的命令。

为了获取我在SP中使用的信息,我必须过滤并将信息与其他表(例如电子邮件)连接。这是我使用的代码:

DECLARE @retTable TABLE (
 SPID int not null
 , Status varchar (255) not null
 , Login varchar (255) not null
 , HostName varchar (255) not null
 , BlkBy varchar(10) not null
 , DBName varchar (255) null
 , Command varchar (255) not null
 , CPUTime int not null
 , DiskIO int not null
 , LastBatch varchar (255) not null
 , ProgramName varchar (255) null
 , SPID2 int not null
 , REQUESTID INT
)  

INSERT INTO @retTable EXEC sp_who2  

SELECT Status, Login, HostName, DBName, Command, CPUTime, ProgramName -- *
  FROM @retTable
  --WHERE Login not like 'sa%' -- if not interested in sa
  ORDER BY Login, HostName