2009-06-01 37 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存儲過程。正如其他人所指出的那樣,如果連接關閉,您將不會看到它,所以如果您想要在連接之間進行跟蹤,則必須考慮另一種緩存連接信息的方法。