翻譯|使用教程|編輯:莫成敏|2019-10-14 15:06:20.790|閱讀 431 次
概述:本教程提供了一個(gè)解決方案,使用PowerShell和SQL Monitor,可以迅速警告您一系列Windows錯(cuò)誤、警告和關(guān)鍵事件,包括失敗的服務(wù)器登錄嘗試,這將伴隨著對(duì)承載您的SQL Server實(shí)例的Windows Server的強(qiáng)力密碼攻擊。這是后半部分內(nèi)容——?jiǎng)?chuàng)建SQL Monitor自定義指標(biāo)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
SQL Monitor是一個(gè)SQL Server監(jiān)控工具。它可以監(jiān)控SQL Servers的健康狀況和活動(dòng),并通過電子郵件為您發(fā)送監(jiān)測(cè)結(jié)果和建議。
本教程提供了一個(gè)解決方案,使用PowerShell和SQL Monitor,可以迅速警告您一系列Windows錯(cuò)誤、警告和關(guān)鍵事件,包括失敗的服務(wù)器登錄嘗試,這將伴隨著對(duì)承載您的SQL Server實(shí)例的Windows Server的強(qiáng)力密碼攻擊。前面文章已經(jīng)介紹了一部分內(nèi)容(點(diǎn)此查看),本文為后半部分內(nèi)容——創(chuàng)建SQL Monitor自定義指標(biāo)。
創(chuàng)建SQL Monitor自定義指標(biāo)
以下SQL僅計(jì)算過去10分鐘內(nèi)寫入事件表的Windows事件數(shù)。我們有計(jì)劃的PowerShell作業(yè)每五分鐘運(yùn)行一次。
USE ServerEvents SELECT Count(*) FROM events WHERE TimeCreated > DateAdd(MINUTE, -10, GetDate())
或者,您可能想要?jiǎng)?chuàng)建兩個(gè)指標(biāo),一個(gè)指標(biāo)僅對(duì)失敗的登錄次數(shù)進(jìn)行計(jì)數(shù),而另一個(gè)指標(biāo)對(duì)其他所有事項(xiàng)進(jìn)行計(jì)數(shù)。這是僅用于獲取失敗登錄的SQL:
USE ServerEvents SELECT Count(*) FROM events WHERE TimeCreated > DateAdd(MINUTE, -10, GetDate()) AND providername LIKE 'Microsoft-Windows-Security-Auditing'
并且,您可以得到其他類似的事件:
USE ServerEvents SELECT Count(*) FROM events WHERE TimeCreated > DateAdd(MINUTE, -10, GetDate()) AND NOT providername LIKE 'Microsoft-Windows-Security-Auditing'
我只使用了一個(gè)度量標(biāo)準(zhǔn),因?yàn)闊o論出于何種原因無論如何簽入SSMS都非常有用,但是無論您選擇執(zhí)行哪種操作,現(xiàn)在都可以使用這些查詢?cè)赟QL Monitor中創(chuàng)建自定義指標(biāo)以及相關(guān)警報(bào)。 顯然,這不是數(shù)據(jù)庫(kù)級(jí)別的指標(biāo)。 您應(yīng)該指定僅在master上運(yùn)行。

然后,您可以通過嘗試登錄服務(wù)器并運(yùn)行PowerShell腳本,將錯(cuò)誤和警告寫入正在監(jiān)視的各種日志中,以檢查其是否正常運(yùn)行。

哎呀,有人試圖強(qiáng)行登錄我的一個(gè)登錄!呃,沒有。在這種情況下,我只是檢查以確保“水通過所有管道”。您不僅可以檢測(cè)到失敗的登錄信息,還可以檢測(cè)到更多信息。當(dāng)所有這些都在運(yùn)行時(shí),在我用作測(cè)試平臺(tái)的服務(wù)器上進(jìn)行了系統(tǒng)升級(jí)。出了很多問題,現(xiàn)在所有這些都被發(fā)現(xiàn)了。
我通常檢查所有日志嗎?是的。現(xiàn)在,我對(duì)顯示器的運(yùn)行狀況有了充分的確認(rèn),并且我非常感謝采用帶正括號(hào)的數(shù)據(jù)收集方法,可以獲取整天的數(shù)據(jù)。
對(duì)于像我這樣的SQL Server開發(fā)人員而言,將錯(cuò)誤日志記錄在表中是一個(gè)很棒的主意,因?yàn)槲椰F(xiàn)在可以將所有數(shù)據(jù)切成薄片并切成小塊并搜索消息。例如,我可以搜索特定的字符串:
SELECT Message, LogName FROM Events WHERE Message LIKE '%Vlad The Impaler%';
給:
message ------------------------------- An account failed to log on. Subject: Security ID: S-1-0-0 Account Name: - Account Domain: - Logon ID: 0x0 Logon Type: 3 Account For Which Logon Failed: Security ID: S-1-0-0 Account Name: Vlad the Impaler Account Domain: Security (1 row affected)
我可以按嚴(yán)重性細(xì)分錯(cuò)誤:
SELECT Convert(CHAR(11), TimeCreated, 113) AS The_date, --Verbose 5,Informational 4,Warning 3,Error 2, Critical 1 LogAlways 0 Sum(CASE WHEN Level = 5 THEN 1 ELSE 0 END) AS Verbose, Sum(CASE WHEN Level = 4 OR Level = 0 THEN 1 ELSE 0 END) AS Informational, Sum(CASE WHEN Level = 3 THEN 1 ELSE 0 END) AS Error, Sum(CASE WHEN Level = 2 THEN 1 ELSE 0 END) AS Critical, Sum(CASE WHEN Level = 1 THEN 1 ELSE 0 END) AS LogAlways, Count(*) AS total FROM Events GROUP BY Convert(CHAR(11), TimeCreated, 113) ORDER BY Min(TimeCreated);

或按提供者,以每天查看提供者的錯(cuò)誤數(shù)量。
DECLARE @variable NVARCHAR(MAX) = 'Select Convert(CHAR(11), TimeCreated, 113),' + ( SELECT String_Agg (Convert (NVARCHAR(MAX), 'sum(Case when Providername like ''' + providername + ''' then 1 else 0 end) as [' + providername + ']' ), ', ' ) FROM (SELECT ProviderName FROM Events GROUP BY ProviderName) AS f(providername) ) + ',count(*) as [total] FROM Events GROUP BY Convert(CHAR(11), TimeCreated, 113) ORDER BY Min(TimeCreated);'; EXECUTE sp_executesql @variable;

我可以解決特定問題,而不必在日志中進(jìn)行混亂的搜索。另外,由于我可以將數(shù)據(jù)保留在SQL Server數(shù)據(jù)庫(kù)中,因此可以保留更長(zhǎng)的歷史記錄。
擴(kuò)展解決方案
我寧愿將它留給如何將其擴(kuò)展到一組服務(wù)器。SQL Monitor方面很容易,但是要使其正常工作,Windows事件需要存儲(chǔ)在每個(gè)實(shí)例上。您需要決定是否從中心位置進(jìn)行收集,并在收集每個(gè)服務(wù)器的記錄時(shí)為它們編寫副本,或者是否在每個(gè)服務(wù)器上運(yùn)行腳本。我認(rèn)為這取決于SQL Server的大小,但這是一個(gè)判斷問題。
中央錯(cuò)誤收集器的優(yōu)點(diǎn)在于檢查它。Get-WinEventcmdlet將可以通過網(wǎng)絡(luò)收集日志記錄,如果你告訴它的服務(wù)器從哪里獲得日志記錄,所以腳本和數(shù)據(jù)模型并不復(fù)雜,但憑據(jù)方面可能會(huì)導(dǎo)致混亂。
結(jié)論
如果一個(gè)外星人飛下來問我有關(guān)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)的問題,我將很難向它解釋SQL Server安全性。作為數(shù)據(jù)庫(kù)人員,我們會(huì)密切注意實(shí)例,但很少關(guān)注托管它的服務(wù)器。當(dāng)我告訴外星人我無法輕易獲得有關(guān)Windows嚴(yán)重或錯(cuò)誤事件的警報(bào)時(shí),我?guī)缀蹩梢钥吹?它的古怪表情。
幸運(yùn)的是,假設(shè)我可以從Ops員工處獲得同意以執(zhí)行計(jì)劃的PowerShell任務(wù),那么當(dāng)外星人詢問我對(duì)數(shù)據(jù)庫(kù)安全性在地球上是如何工作時(shí),我就不會(huì)有這種社交尷尬的風(fēng)險(xiǎn)了。希望DevOps合作的精神也可以擴(kuò)展到允許我以腳本方式收集這些任務(wù),從而使我免遭星際尷尬的困擾。
盡管Azure SQL數(shù)據(jù)庫(kù)位于一個(gè)良好的、可管理的繭中,就像一個(gè)滿足的昆蟲幼蟲一樣,但對(duì)于網(wǎng)絡(luò)上托管的數(shù)據(jù)庫(kù)并不一定是如此。許多成功的SQL Server滲透,例如暴力破解密碼攻擊,都依賴于宿主服務(wù)器的安全性問題,因此在服務(wù)器級(jí)別了解安全警報(bào)和警告似乎是正確的。實(shí)際上,需要注意所有事件。不僅可以破壞Windows Server的惡意入侵者,還可以進(jìn)行自動(dòng)升級(jí)或電源不足。
至少現(xiàn)在,在SQL Monitor的幫助下,我可以獲得有關(guān)失敗的登錄和其他Windows安全事件發(fā)生的警報(bào)和基線,然后深入研究SQL Server數(shù)據(jù)庫(kù)中的詳細(xì)信息。是的,了解在服務(wù)器級(jí)別發(fā)生了什么錯(cuò)誤、警報(bào)和警告以及它們何時(shí)發(fā)生是非常有用的!
本教程內(nèi)容到這里就完結(jié)了,希望文章內(nèi)容對(duì)您有所幫助~感興趣的朋友可以下載SQL Monitor試用版嘗試一下~
相關(guān)內(nèi)容推薦:
使用監(jiān)控工具SQL Monitor,檢查失敗的服務(wù)器登錄、服務(wù)器錯(cuò)誤和警告(上)
監(jiān)控工具SQL Monitor:使用SQL Monitor跟蹤數(shù)據(jù)庫(kù)上的活動(dòng)會(huì)話數(shù)
使用SQL Server監(jiān)控工具SQL Monitor,監(jiān)視Azure SQL數(shù)據(jù)庫(kù)的性能問題(上)
使用SQL Server監(jiān)控工具SQL Monitor,監(jiān)視Azure SQL數(shù)據(jù)庫(kù)的性能問題(下)
想要購(gòu)買SQL Monitor正版授權(quán),或了解更多產(chǎn)品信息請(qǐng)點(diǎn)擊
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn