如何找出访问 SQL Server 的用户名和机器名

Posted

技术标签:

【中文标题】如何找出访问 SQL Server 的用户名和机器名【英文标题】:How to find out user name and machine name to access to SQL server 【发布时间】:2009-03-13 04:54:41 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:
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 匹配并找出谁登录了...

【讨论】:

【参考方案2】:

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

EXEC sp_who2;

您可以从哪里获得一些值得了解的其他信息,例如用户处于活动状态等等... 它并没有解决 gbn 宣布的问题。

【讨论】:

【参考方案3】:

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

sys.syslogins 查询只列出登录信息。 accdate 没有给出当前登录用户的时间戳。我尝试从另一个应用程序登录到我的 SQL,但此查询未列出登录信息。 SELECT SUSER_SNAME(), HOST_NAME() 仅列出 SQL 服务器上的一个用户。例如,我以我的名字登录到 SQL Server。这个查询的结果只列出了我的名字和机器名。此查询不会列出 SQL 服务器上的当前用户。 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

【讨论】:

以上是关于如何找出访问 SQL Server 的用户名和机器名的主要内容,如果未能解决你的问题,请参考以下文章

急:sql server 2000如何映射端口才能从外网访问?

如何在 MS Access VB 中访问 SQL Server 标量函数

如何授予用户对 SQL Server 中数据库的读取权限?

如何找到对 SQL Server Express 具有系统管理员访问权限的 Windows 用户和组?

SQL Server 2008 如何配置链接服务器访问 SQL Server2000?

sql server 2000 单用户如何设置?