有沒有辦法找出誰更改了登錄密碼?
我試圖找出誰更改了 SQL Server 2008 R2 中的登錄密碼。
我已經檢查了預設跟踪 - 它不會記錄該事件。預設跟踪將包括這些與安全相關的事件:
/* Audit Add DB user event Audit Add login to server role event Audit Add Member to DB role event Audit Add Role event Audit Add login event Audit Backup/Restore event Audit Change Database owner Audit DBCC event Audit Database Scope GDR event (Grant, Deny, Revoke) Audit Login Change Property event Audit Login Failed Audit Login GDR event Audit Schema Object GDR event Audit Schema Object Take Ownership Audit Server Starts and Stops */
另外,查看事務日誌備份以找出答案,但沒有運氣。
有沒有其他方法可以找到它?
另外,我知道伺服器端跟踪會有所幫助,但不幸的是,在我們的伺服器端跟踪中,我們沒有包含
Audit Login Change Password Event
.我發現的最佳文章來自 Aaron Bertrand:Tracking Login Password Changes in SQL Server
如果您提前設置,我的文章會有所幫助,但當事件發生在過去並且您沒有設置任何類型的審核機制時,則不會。
不過還是有希望的。假設我這樣做了:
CREATE LOGIN flooberella WITH PASSWORD = N'x', CHECK_POLICY = OFF;
此資訊位於 EventClass 104 (Audit Addlogin Event) 下的預設跟踪中。但是,如果我使用以下任一方法更改密碼:
ALTER LOGIN flooberella WITH PASSWORD = N'y'; EXEC sp_password N'y', N'z', N'flooberella';
出於明顯的安全原因,預設跟踪不會擷取這些事件- 任何有權訪問預設跟踪的人都無法弄清楚其他人的密碼是什麼,他們也不想讓它變得容易甚至發現密碼已更改(例如,輪詢這些事件的頻率可以揭示您的安全策略的某些屬性)。
那你還能做什麼?雖然這依賴於日誌中仍然存在的資訊,並且還依賴於對系統數據庫使用未記錄的 DBCC 命令(您可能希望備份 master 並在其他地方恢復它),但您可以從事務日誌中獲取一些資訊,例如:
DBCC LOG(master, 1);
對於上述兩個命令,這將產生具有以下(部分)資訊的行:
Current LSN Description ====================== ====================================================================== 000000f2:000001b8:0002 ALTER LOGIN;0x01050000000000051500000093a3bcd7a9f8fb1417ab13bce8030000 000000f2:000001b8:0004 Alter login change password;0x01050000000000 ... same sid as above ...
看起來不多,但現在取描述的 0x 部分,然後執行以下操作:
SELECT name FROM sys.server_principals WHERE sid = 0x01050000000000051500000093a3bcd7a9f8fb1417ab13bce8030000;
吸煙槍!這是該事件的負責人。
當然,如果他們
ALTER LOGIN
對所有操作都使用語法(他們應該使用語法而不是sp_password
),則您無法區分更改預設數據庫的人和更改密碼的人。您也無法分辨(至少我可以看到)受影響的登錄名,只是這個人更改了登錄名。Jon 似乎認為該資訊也在日誌中,但我沒有找到它(與時間資訊不同,我以某種方式滾動過去)。SQL Server 2012 中包含的使用者可能有不同的答案——儘管我懷疑密碼更改仍然以類似的方式被混淆。將把它留給一個單獨的問題。