Sql-Server

將主機名/IP 與使用者相關聯

  • January 24, 2018

我在應用程序之間共享登錄名的環境中工作,偶爾在開發人員之間共享登錄資訊 - 在這種情況下,我無法確定誰連接到數據庫,或者誰正在執行特定查詢。

我能找到的最具體的資訊似乎是主機名或 IP 地址。

我想知道,是否有辦法將這些資訊與使用者關聯起來?

如果您知道哪個工作站屬於哪個人,您可以創建一個登錄觸發器,在一段時間內記錄特定共享使用者的所有實例,並且您可以查看該表以查看哪些工作站正在登錄。我會將日誌記錄表放在一個穩定的地方,msdb如果你有的話,或者一個實用數據庫。

USE msdb;
GO
CREATE TABLE dbo.ThatLoginLog
(
 EventDate datetime2 NOT NULL DEFAULT sysdatetime(),
 HostName sysname,
 IPAddress varchar(15)
);

現在,登錄觸發器:

USE master;
GO
CREATE TRIGGER LogTheLogin
ON ALL SERVER
WITH EXECUTE AS 'sa'
FOR LOGON
AS
 IF ORIGINAL_LOGIN() = N'that login name'
 BEGIN
   INSERT msdb.dbo.ThatLoginLog(HostName, IPAddress)
     SELECT HOST_NAME(), client_net_address
       FROM sys.dm_exec_connections
       WHERE session_id = @@SPID;
 END
GO

然後,定期地,或者一旦你認為你已經在你的業務週期中給了足夠的時間讓每個人都至少登錄一次:

SELECT HostName, IPAddress, COUNT(*), MAX(EventDate)
 FROM msdb.dbo.ThatLoginLog
 GROUP BY HostName, IPAddress;

引用自:https://dba.stackexchange.com/questions/196069