使用监控工具SQL Monitor,检查失败的服务器登录、服务器错误和警告(下)

翻译|使用教程|编辑:莫成敏|2019-10-14 15:06:20.790|阅读 397 次

概述:本教程提供了一个解决方案,使用PowerShell和SQL Monitor,可以迅速警告您一系列Windows错误、警告和关键事件,包括失败的服务器登录尝试,这将伴随着对承载您的SQL Server实例的Windows Server的强力密码攻击。这是后半部分内容——创建SQL Monitor自定义指标。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

SQL Monitor是一个SQL Server监控工具。它可以监控SQL Servers的健康状况和活动,并通过电子邮件为您发送监测结果和建议。

点击下载SQL Monitor正式版

本教程提供了一个解决方案,使用PowerShell和SQL Monitor,可以迅速警告您一系列Windows错误、警告和关键事件,包括失败的服务器登录尝试,这将伴随着对承载您的SQL Server实例的Windows Server的强力密码攻击。前面文章已经介绍了一部分内容(点此查看),本文为后半部分内容——创建SQL Monitor自定义指标

创建SQL Monitor自定义指标

以下SQL仅计算过去10分钟内写入事件表的Windows事件数。我们有计划的PowerShell作业每五分钟运行一次。

USE ServerEvents
  SELECT Count(*) 
    FROM events 
      WHERE TimeCreated > DateAdd(MINUTE, -10, GetDate())

或者,您可能想要创建两个指标,一个指标仅对失败的登录次数进行计数,而另一个指标对其他所有事项进行计数。这是仅用于获取失败登录的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'

我只使用了一个度量标准,因为无论出于何种原因无论如何签入SSMS都非常有用,但是无论您选择执行哪种操作,现在都可以使用这些查询在SQL Monitor中创建自定义指标以及相关警报。 显然,这不是数据库级别的指标。 您应该指定仅在master上运行。

使用监控工具SQL Monitor,检查失败的服务器登录、服务器错误和警告(下)

然后,您可以通过尝试登录服务器并运行PowerShell脚本,将错误和警告写入正在监视的各种日志中,以检查其是否正常运行。

使用监控工具SQL Monitor,检查失败的服务器登录、服务器错误和警告(下)

哎呀,有人试图强行登录我的一个登录!呃,没有。在这种情况下,我只是检查以确保“水通过所有管道”。您不仅可以检测到失败的登录信息,还可以检测到更多信息。当所有这些都在运行时,在我用作测试平台的服务器上进行了系统升级。出了很多问题,现在所有这些都被发现了。

我通常检查所有日志吗?是的。现在,我对显示器的运行状况有了充分的确认,并且我非常感谢采用带正括号的数据收集方法,可以获取整天的数据。

对于像我这样的SQL Server开发人员而言,将错误日志记录在表中是一个很棒的主意,因为我现在可以将所有数据切成薄片并切成小块并搜索消息。例如,我可以搜索特定的字符串:

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)

我可以按严重性细分错误:

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);

使用监控工具SQL Monitor,检查失败的服务器登录、服务器错误和警告(下)

或按提供者,以每天查看提供者的错误数量。

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;

使用监控工具SQL Monitor,检查失败的服务器登录、服务器错误和警告(下)

我可以解决特定问题,而不必在日志中进行混乱的搜索。另外,由于我可以将数据保留在SQL Server数据库中,因此可以保留更长的历史记录。

扩展解决方案

我宁愿将它留给如何将其扩展到一组服务器。SQL Monitor方面很容易,但是要使其正常工作,Windows事件需要存储在每个实例上。您需要决定是否从中心位置进行收集,并在收集每个服务器的记录时为它们编写副本,或者是否在每个服务器上运行脚本。我认为这取决于SQL Server的大小,但这是一个判断问题。

中央错误收集器的优点在于检查它。Get-WinEventcmdlet将可以通过网络收集日志记录,如果你告诉它的服务器从哪里获得日志记录,所以脚本和数据模型并不复杂,但凭据方面可能会导致混乱。

结论

如果一个外星人飞下来问我有关关系数据库系统的问题,我将很难向它解释SQL Server安全性。作为数据库人员,我们会密切注意实例,但很少关注托管它的服务器。当我告诉外星人我无法轻易获得有关Windows严重或错误事件的警报时,我几乎可以看到它的古怪表情。

幸运的是,假设我可以从Ops员工处获得同意以执行计划的PowerShell任务,那么当外星人询问我对数据库安全性在地球上是如何工作时,我就不会有这种社交尴尬的风险了。希望DevOps合作的精神也可以扩展到允许我以脚本方式收集这些任务,从而使我免遭星际尴尬的困扰。

尽管Azure SQL数据库位于一个良好的、可管理的茧中,就像一个满足的昆虫幼虫一样,但对于网络上托管的数据库并不一定是如此。许多成功的SQL Server渗透,例如暴力破解密码攻击,都依赖于宿主服务器的安全性问题,因此在服务器级别了解安全警报和警告似乎是正确的。实际上,需要注意所有事件。不仅可以破坏Windows Server的恶意入侵者,还可以进行自动升级或电源不足。

至少现在,在SQL Monitor的帮助下,我可以获得有关失败的登录和其他Windows安全事件发生的警报和基线,然后深入研究SQL Server数据库中的详细信息。是的,了解在服务器级别发生了什么错误、警报和警告以及它们何时发生是非常有用的!

本教程内容到这里就完结了,希望文章内容对您有所帮助~感兴趣的朋友可以下载SQL Monitor试用版尝试一下~

相关内容推荐:

使用监控工具SQL Monitor,检查失败的服务器登录、服务器错误和警告(上)

监控工具SQL Monitor:使用SQL Monitor跟踪数据库上的活动会话数

使用SQL Server监控工具SQL Monitor,监视Azure SQL数据库的性能问题(上)

使用SQL Server监控工具SQL Monitor,监视Azure SQL数据库的性能问题(下)


想要购买SQL Monitor正版授权,或了解更多产品信息请点击“咨询在线客服”



标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP