如何找出访问 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 Express 具有系统管理员访问权限的 Windows 用户和组?