我有一个繁忙的 SQL 2012 服务器,与一个特定数据库的连接(使用相同的 SQL 登录名)不显示“主机名”,我需要找出这些连接来自哪个(几个)框。
我已经尝试了所有普通的内置工具和第 3 方工具(、、、、、 SSMS 活动监视器master.sys.processes
,甚至 SQL Profiler 和 Idera 诊断管理器) sys.dm_exec_sessions
,它们都不能给我这些连接背后的服务器/客户端的主机名,大概是因为它们都使用相同的底层系统表/视图。sp_who2
sp_WhoIsActive
我也可以使用 IP 地址,但也看不到任何从 SQL 中确定它的方法。
如果有任何帮助:
sys.dm_exec_sessions
显示的client_interface_name
是 ODBCprogram_name
两者都没有捕获- 用户是一个 SQL 帐户,恰好是 SYSADMIN(是的,我知道...)
我在这里找到了一个相关的问题(尽管来自另一边),但没有得到解答。
此时我很想禁用该用户,以便在 SQL 错误日志中捕获一些失败的登录,但我不认为应用程序团队会对此感到满意。
看起来我只是问错了问题,我在下面找到了答案:如何从 SQL Server 2008 本身获取客户端 IP 地址?:
正如 Aaron 在评论中提到的,我不得不使用
sys.dm_exec_connections
来获取源 IP。这是我使用的查询的最终版本: