Sql-Server

錯誤日誌中多次失敗的身份驗證嘗試

  • May 8, 2020

我在試圖弄清楚什麼是試圖對執行 SQL Server 2008 R2 標準版的特定數據庫伺服器進行身份驗證時遇到了麻煩。以下是我的日誌中散落的錯誤:

使用者“Master80”登錄失敗。
原因:密碼與提供的登錄名不匹配。

$$ CLIENT: Server IP Address $$

有趣的是,在 Active Directory 或數據庫伺服器中找不到此帳戶,甚至在特定數據庫中也找不到。我瀏覽了每個安全文件夾並蒐索了 AD 高低,什麼都沒有,沒有這個帳戶的殘餘。

至於錯誤的“伺服器 IP 地址”部分,它會在 3 或 4 個 CITRIX 伺服器之間發生變化。所以,我們唯一確定的是它來自特定的少數伺服器,也許還有一些應用程序,但沒有人知道是哪個應用程序。仔細閱讀伺服器並從程序菜單打開應用程序或檢查添加/刪除程序什麼都沒有。

我能做些什麼來追踪它?有人建議開始跟踪,但我不確定要配置什麼,因為跟踪對我來說有點模糊。

我最初的想法是登錄觸發器,但遺憾的是,只有在成功登錄後才會觸發。

Audit Login Failed Event Class 的文件說失敗的登錄審計將包括應用程序名稱,但到目前為止我還沒有觀察到(我只測試了在 Management Studio 中更改連接的失敗登錄,所以它可能在其他場景中暴露)。無論如何,創建這個審計和審計規範:

USE master;
GO

CREATE SERVER AUDIT failed_logins                                         
 TO FILE (FILEPATH = 'C:\temp')
GO

ALTER SERVER AUDIT failed_logins 
 WITH (STATE = ON);
GO

CREATE SERVER AUDIT SPECIFICATION failed_logins_spec
 FOR SERVER AUDIT failed_logins
 ADD (FAILED_LOGIN_GROUP)
 WITH (STATE=ON);
GO

現在您應該能夠右鍵點擊審計(在對象資源管理器中的安全 > 審計下)並選擇查看審計日誌。那裡可能會為您提供更多資訊,這可能會幫助您更好地縮小範圍,但我不能 100% 確定。嘗試連接的應用程序必須傳遞一個有效的應用程序名稱,Citrix 不能阻止任何該資訊通過(或在途中更改它)等。

請注意,這也可能是無操作的,具體取決於您的版本和版本。如果是這樣,您的下一個選擇可能是擴展事件,正如 Max 在下面指出的那樣。

CREATE EVENT SESSION FailedLogins
ON SERVER
ADD EVENT sqlserver.error_reported
(
  ACTION 
  (
    sqlserver.client_app_name,
    sqlserver.client_hostname,
    sqlserver.nt_username
   )
   WHERE severity = 14
     --AND error_number = 18456 -- login failed - 2012+ only!
     AND state > 1 -- seems to always be a redundant state 1 event
 )
 ADD TARGET package0.asynchronous_file_target
 (
   SET FILENAME = N'C:\temp\FailedLogins.xel',
   METADATAFILE = N'C:\temp\FailedLogins.xem'
 );
GO

ALTER EVENT SESSION FailedLogins ON SERVER
 STATE = START;
GO

您可以編寫真正醜陋的XQuery來解析結果,或獲取Jonathan Kehayias的SSMS載入項

2012年,您可以通過右鍵點擊Object Explorer中的會話:管理>擴展事件>會話並等待它再次發生,然後再次鍵入Watch Live數據視窗。您可能會收到來自其他“真實”登錄失敗、密碼輸入錯誤、其他嚴重性 14 錯誤等的噪音。在 2012 年及以後,您將能夠綁定error_number,但它在 2008 年無效。無論如何,這是我在 2014 年看到的使用18456錯誤過濾器:

在此處輸入圖像描述

雖然我對製作 XQuery 沒有興趣,但您需要以漂亮的表格格式查看查詢結果,但我確實在 2008 年驗證了上述會話確實通過打開它在 .xel 文件目標中記錄了應用程序名稱在記事本中(它不漂亮)。

如果這不起作用(例如,由於某種原因沒有填充應用程序名稱),接下來將是某種網路/數據包嗅探器,例如Wireshark。您還可以:

  • 查看“控制面板”>“管理工具”>“服務”,查看是否有任何正在執行的服務設置為使用該帳戶啟動。
  • 查看 SQL Server 機器和有問題的 Citrix 機器上的事件日誌,以了解有關登錄失敗時的任何其他線索。
  • 更改該hosts電腦上的文件以覆蓋 SQL Server DNS 名稱以指向其他地方(例如,指向無法訪問的 IP),並查看如果​​應用程序或服務根本無法連接到 SQL Server,是否有任何中斷。誰知道呢,在這種情況下,它實際上可能會記錄一些東西或彈出一個對話框。當然,這只有在應用程序目前通過名稱解析而不是通過 IP 到達 SQL Server 時才有效 - 您可能需要同時嘗試 Windows 名稱和 FQDN。這至少應該可以阻止登錄嘗試,即使它不會產生更多關於來源的線索;如果是這樣,那麼至少這可能是一種永久的方式來停止使用失敗的登錄嘗試填充 SQL Server 的日誌。如果該機器上的其他應用程序執行需要連接到 SQL Server,您可以讓它們通過 IP 連接,或者(可能更面向未來)您可以設置不同的別名並更改它們的連接字元串以使用新名稱。

我還有一篇非常詳盡的博文,詳細說明了狀態對所有 18456 錯誤的含義

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