錯誤日誌中多次失敗的身份驗證嘗試
我在試圖弄清楚什麼是試圖對執行 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 連接,或者(可能更面向未來)您可以設置不同的別名並更改它們的連接字元串以使用新名稱。