2009-06-01 80 views
7

我正在设计一个应用程序,并且正在寻找告诉谁当前登录到SQL Server的最佳方法。我将使用SSMS中内置的Activity Monitor,它显示访问服务器的所有进程列表 - 非常酷。如何判断谁登录到SQL Server

但是,如果在我的.NET代码中,它每次访问数据库时都会使用一个单独的连接,那么我将如何知道当前登录的是谁?如果用户只是看着一个屏幕,而不是在那个时候从数据库中检索数据,那么他们不会显示正确的?

+0

你想要这样做的原因是什么?谁会查看这些信息? – 2009-06-01 17:16:33

回答

10

也许,也许不是。您登录到您的应用程序并不需要用户登录数据库是正确的 - 事实上,这个概念并不存在。 Activity Montitor(和有用的sp_who2)将只显示活动连接 - 正在使用的连接。

如果您使用池连接(我相信,在您的连接字符串中“Pooled = true”),该图片会更改。这样做,并且“关闭”客户端连接将保持活动状态,并且您将在监视器中看到该连接。 This article有更多的细节。

但是,如果我是你,我会设计一种不同的方式来跟踪活动用户,不依赖于联合连接。

2

您的断言是正确的,没有执行数据库操作的用户将不可见。您确实需要手动存储某种“登录用户”信息。

2

你是对的。如果编码正确,则在保存或检索数据时将创建连接,并在之后立即关闭。

假设你比谁登录到数据库服务器更感兴趣谁登录到应用程序,你可以在数据库中保存会话信息,包括用户标识符。然后,您可以简单地查询会话数据库以发现谁在线。根据您使用的开发技术,可能会有更好的解决方案。

2

我认为你正在寻找sp_whosp_who2

14

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

exec sp_who2 

这会给你很多的信息,包括谁是登录,应用程序名称,当前命令等等。

感谢

6

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

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