如何判断谁登录到SQL Server

Jef*_*ock 7 .net sql-server

我正在设计一个应用程序,我正在寻找最好的方法来告诉谁当前登录到SQL服务器.我将使用SSMS内置的Activity Monitor,它显示了访问服务器的所有进程的列表 - 非常酷.

但是,如果在我的.NET代码中,每次访问数据库时它都使用单独的连接,那么我如何能够告诉谁当前登录?如果用户只是在看屏幕而当时没有从数据库中检索数据,那么它们就不会显示正确吗?

小智 19

在MSSQL服务器中,您可以运行以下命令...

exec sp_who2
Run Code Online (Sandbox Code Playgroud)

这将为您提供大量信息,包括登录的人员,应用程序名称,当前命令等等.

谢谢


Mic*_*tta 10

也许,也许不是.你是正确的,登录你的应用程序不需要用户登录数据库 - 事实上,这个概念并不存在.Activity Montitor(以及有用的sp_who2)将仅显示活动连接 - 这些连接正在使用中.

如果您使用池化连接,则该图片会发生变化(我认为,"Pooled = true"在您的连接字符串中).这样做,"关闭"的客户端连接将保持活动状态,您将在监视器中看到该连接. 本文有更详细的内容.

但是,如果我是你,我会设计一种跟踪活跃用户的不同方式,一种不依赖于池化连接的用户.


Jon*_*ias 6

DMV sys.dm_exec_sessions可用于查找已连接的会话.您可以将其加入sys.dm_exec_requests以获取请求信息(如果它正在运行),或者获取可以加入sys.dm_exec_connections的连接特定信息.session_id用于所有连接.

我个人使用DMV而不是旧的sp_who存储过程.正如其他人所指出的,如果连接关闭,你将看不到它,所以如果你想在连接之间进行跟踪,你必须考虑另一种缓存连接信息的方法.