SQL 评估 API

适用于: SQL Server 2012 (11.x) 及更高版本 Azure SQL 托管实例 Azure 虚拟机上的 SQL Server Linux 上的 SQL Server

SQL 评估 API 提供了一种机制来评估 SQL Server 的配置,以获得最佳做法。 该 API 附带一个规则集,其中包含 SQL Server 团队建议的最佳做法规则。 随着新版本的发布,此规则集得到了增强,但同时,此 API 旨在提供高度可自定义且可扩展的解决方案。 用户可以优化默认规则并创建自己的规则。

若要确保 SQL Server 配置符合建议的最佳做法,你就会发现 SQL 评估 API 非常有用。 初步评估后,可以通过定期安排评估来跟踪配置稳定性。

API 可用于访问:

注意

SQL 评估 API 针对各种领域提供评估,但它不会深入到安全性中。 建议使用 SQL Server 的漏洞评估 来主动提高数据库安全性。

规则

规则有时被称为“检查”,它们是在 JSON 格式的文件中定义的。 规则集格式要求指定规则集名称和版本。 使用自定义规则集时,你可轻松知道哪些建议来自哪个规则集。

Microsoft 发布的规则集可以在 GitHub 上找到。 可以在示例存储库中查看完整规则集

SQL 评估 cmdlet 及相关扩展

直接使用 API

SQL 评估 API 已提供,可通过托管代码将其用作以下任意组件的一部分:

开始使用 SQL 评估 API 之前,请确保安装以下任一项:

SQL 评估 API 扩展对 SMO Framework 进行了补充,提供了以下方法:

  • GetAssessmentItems:返回特定 SQL 对象的可用检查 (IEnumerable<...>)
  • GetAssessmentResults:对评估进行同步评估并返回结果和错误(如果有)(IEnumerable<...>)
  • GetAssessmentResultsList:对评估进行异步评估并返回结果和错误(如果有)(Task<...>)

通过 PowerShell 使用 API

如果要通过 PowerShell 调用 SQL 评估 API,必须安装 SQL Server PowerShell 模块SqlServer 模块提供两个适用于 SQL 评估 API 的 cmdlet:

  • Get-SqlAssessmentItem:提供 SQL Server 对象的可用评估检查列表
  • Invoke-SqlAssessment:提供评估结果

开始使用 SQL 评估 cmdlet

针对所选的 SQL Server 对象执行评估。 默认规则集中仅提供针对两种对象的检查:ServerDatabase(此外,该 API 支持另外两种对象:FilegroupAvailabilityGroup)。 如果要评估 SQL Server 实例及其所有数据库,应分别为每个对象运行 SQL 评估 cmdlet。 或者,也可以将要评估的对象通过变量或管道传递给 SQL 评估 cmdlet。

SqlServerRegisteredServer 对象是可交换的,因此可以将任何对象传递给 SQL 评估 cmdlet。

浏览下面的示例以开始使用。

  1. 获取本地默认实例的可用检查列表,以便熟悉这些检查。 在此示例中,我们通过管道将 Get-SqlInstance cmdlet 的输出传递到 Get-SqlAssessmentItem cmdlet,以将实例对象传递给它。

    Get-SqlInstance -ServerInstance 'localhost' | Get-SqlAssessmentItem
    
  2. 获取实例的所有数据库的可用检查列表。 此处,我们使用 Get-Item 和 Windows PowerShell SQL Server 提供程序实现的路径来获取数据库列表,然后将其传送到 Get-SqlDatabase cmdlet。

    Get-Item SQLSERVER:\SQL\localhost\default | Get-SqlAssessmentItem
    

    此外,还可以使用 Get-SqlDatabase cmdlet 来执行相同的操作。

    Get-SqlDatabase -ServerInstance 'localhost' | Get-SqlAssessmentItem
    
  3. 调用实例的评估,并将结果保存到 SQL Server 表。 在此示例中,我们通过管道将 Get-SqlInstance cmdlet 的输出传递到 Invoke-SqlAssessment cmdlet,其结果通过管道传递到 Write-SqlTableData cmdlet。 在此示例中,Invoke-Assessment cmdlet 与 -FlattenOutput 参数一起运行。 此参数使输出适用于 Write-SqlTableData cmdlet。 如果不使用该参数,后者将引发错误。

    Get-SqlInstance -ServerInstance 'localhost' |
    Invoke-SqlAssessment -FlattenOutput |
    Write-SqlTableData -ServerInstance 'localhost' -DatabaseName SQLAssessmentDemo -SchemaName Assessment -TableName Results -Force
    

    现在,我们来调用实例的所有数据库的评估,并将结果添加到同一个表中。

    Get-SqlDatabase -ServerInstance 'localhost' |
    Invoke-SqlAssessment -FlattenOutput |
    Write-SqlTableData -ServerInstance 'localhost' -DatabaseName SQLAssessmentDemo -SchemaName Assessment -TableName Results -Force
    
  4. 请按照表中的说明和链接来进一步了解建议。

  5. 根据环境和组织要求自定义规则(见下文)。

  6. 安排任务或作业以定期或按需运行评估从而衡量进度。

自定义规则

规则是可自定义和可扩展的。 Microsoft 的规则集旨在适用于大多数环境。 但是,一个规则集不可能适用于所有环境。 用户可以编写自己的 JSON 文件并自定义现有规则或添加新规则。 示例存储库中提供了自定义示例和完整的 Microsoft 发布的规则集。 有关如何使用自定义 JSON 文件运行 SQL 评估 cmdlet 的更多详细信息,请使用 Get-Help cmdlet。

规则自定义功能提供的选项

启用/禁用某些规则或规则组(使用标签)

当特定规则不适用于环境时,或在完成计划工作以解决问题之后,可以使这些规则处于静默状态。

更改阈值参数

特定规则会将自身阈值与当前的指标值进行比较,以发现问题。 如果默认阈值不合适,可以对其进行更改。

添加更多由所在组织或第三方编写的规则

通过将一个或多个 JSON 文件作为参数添加到 SQL 评估 API 调用中,可以将多个规则集组合在一起。 组织可能会编写这些文件,或从第三方获取这些文件。 例如,可以让你的 JSON 文件禁用 Microsoft 规则集中的特定规则,让行业专家提供的另一个 JSON 文件包含你认为对环境有用的规则,然后再让另一个 JSON 文件更改该 JSON 文件中的某些阈值。

重要说明

我们强烈建议不要使用来自不受信任源的规则集,除非对其全面检查以确保它们安全。