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 可用來評定:

  • Azure 虛擬機器上的 SQL Server

  • Azure SQL 受控執行個體

  • SQL Server 2012 和更新版本

  • Linux 版系統和容器上的 SQL Server

Azure Data Studio (ADS) 的 SQL Server 評定延伸模組,也使用此 API。

注意

SQL 評定 API 會針對各個領域提供評定,但不會深入探討安全性。 建議您使用 SQL 弱點評量,主動改善資料庫安全性。

規則

規則 (有時稱為「檢查」) 定義於 JSON 格式化檔案中。 規則集格式需要指定規則集名稱和版本。 使用自訂規則集時,可以輕鬆地知道哪些規則集來自哪些建議。

GitHub 上提供 Microsoft 隨附的規則集。 您可以在範例存放庫 (英文) 中檢視整個規則集 (英文)。

SQL 評定 Cmdlet 和相關聯的延伸模組

直接使用 API

您能使用 SQL 評定 API,且可透過受控程式碼,將其用作為下列任何元件的一部分:

開始使用 SQL 評定 API 本身之前,請務必安裝下列其中一項:

SMO 架構由提供下列方法的 SQL 評定 API 延伸模組加以補充:

  • GetAssessmentItems:傳回特定 SQL 物件的可用檢查 (IEnumerable<...>)

  • GetAssessmentResults:同步評估評定,並傳回結果和錯誤 (如果有的話) (IEnumerable<...>)

  • GetAssessmentResultsList:非同步評估評定,並傳回結果和錯誤 (如果有的話) (Task<...>)

透過 PowerShell 使用 API

如果想要透過 PowerShell 叫用 SQL 評定 API,則必須安裝 SQL Server PowerShell 模組。 此 SqlServer 模組提供兩個 Cmdlet,可搭配 SQL 評定 API 使用:

  • 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 cmdlet 和由 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 檔案中的一些閾值。

重要

我們強烈建議您,在徹底審查之前,不要使用來自不受信任來源的規則集,以確保它們安全無誤。

後續步驟