適用於:SQL Server
Azure SQL 受控執行個體
SQL 評定 API 可提供一種機制,來評定您的 SQL Server 組態,以取得最佳做法。 API 附帶一套規則集,包含 SQL Server 團隊建議的最佳實務規則。 隨著新版本的釋出,這套規則集會進一步強化,但同時,API 也被設計成提供高度可自訂且可擴充的解決方案。 使用者可以調整預設規則,並建立自己的規則。
想要確保 SQL Server 組態是否符合建議的最佳做法時,SQL 評定 API 相當實用。 初始評定之後,可以透過定期排程的評定來追蹤設定穩定性。
API 可用來評定:
- Azure 虛擬機器上的 SQL Server
- Azure SQL 受控執行個體
- SQL Server 2012 和更新版本
- 基於 Linux 的系統和容器上的 SQL Server
注意
SQL 評定 API 提供各種領域的評量,但不會深入安全性。 利用 SQL Server 的漏洞評估 ,主動提升你的資料庫安全性。
規則
規則 (有時稱為「檢查」) 定義於 JSON 格式化檔案中。 規則集格式需要指定規則集名稱與版本。 使用自訂規則集時,你可以輕鬆知道哪些建議來自哪套規則集。
GitHub 上提供 Microsoft 隨附的規則集。 您可以在範例存放庫 (英文) 中檢視整個規則集 (英文)。
SQL 評定命令小程式和相關聯的擴充套件
直接使用 API
您能使用 SQL 評定 API,且可透過受控程式碼,將其用作為下列任何元件的一部分:
- SQL Server 管理物件 (SMO)(2019 年 7 月及之後版本)
- SQL Server PowerShell 模組(2019 年 7 月及之後的發行版本)
開始使用 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 評估指令程式
系統會根據所選的 SQL Server 物件執行評定。 在預設規則集中,僅對兩種物件進行檢查: Server 和 Database (此外,API 還支援另外兩種物件: Filegroup 和 AvailabilityGroup)。 如果想要評定 SQL Server 執行個體及其所有資料庫,應分別針對每個物件,執行 SQL 評定 Cmdlet。 或者,可以將用於評定的物件,傳遞至變數或管線中的 SQL 評定 Cmdlet。
SqlServer 和 RegisteredServer 物件可以互換,因此,可以將這兩個物件中的任一物件傳遞至 SQL 評定 Cmdlet。
請瀏覽下列範例以開始使用。
取得本機預設執行個體的可用檢查清單,以便熟悉這些檢查。 在此範例中,我們會將
Get-SqlInstancecmdlet 的輸出,輸送至Get-SqlAssessmentItemcmdlet,以對其傳遞執行個體物件。Get-SqlInstance -ServerInstance 'localhost' | Get-SqlAssessmentItem取得該實例所有資料庫的可用檢查列表。 我們會於此處,使用
Get-Itemcmdlet 和由 Windows Powershell SQL Server 提供者所實作的路徑,來取得資料庫清單,然後將其輸送至Get-SqlDatabaseCmdlet。Get-Item SQLSERVER:\SQL\localhost\default | Get-SqlAssessmentItem此外,也可以使用
Get-SqlDatabaseCmdlet,執行相同的動作。Get-SqlDatabase -ServerInstance 'localhost' | Get-SqlAssessmentItem調用執行個體評估,並將結果儲存至 SQL Server 資料表。 在此範例中,我們會將
Get-SqlInstancecmdlet 的輸出,輸送至Invoke-SqlAssessmentcmdlet,如此會將結果輸送至Write-SqlTableDatacmdlet。 在此範例中,執行Invoke-AssessmentCmdlet 時,指定了-FlattenOutput參數。 此參數可讓輸出適用於Write-SqlTableDatacmdlet。 如果您省略此參數,後者會引發錯誤。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依照資料表中的描述和連結,進一步了解建議。
根據您的環境和組織需求,自訂規則 (請參閱下方)。
排程一個任務或作業,定期或按需執行評估以測量進度。
自訂規則
規則的設計可自訂且可擴充。 Microsoft 的規則集設計上適用於大多數環境。 然而,不可能有一套規則適用於所有環境。 使用者可以撰寫自己的 JSON 檔案,並自訂現有的規則或加入新的規則。 自訂化範例及完整 Microsoft 發布規則集的範例可在範例庫中取得。 如需如何以自訂 JSON 檔案執行 SQL 評定 Cmdlet 的詳細資料,請使用 Get-Help Cmdlet。
規則自訂功能提供的選項
啟用/停用特定規則或規則群組 (使用標籤)
當特定規則未套用至您的環境,或在排定的工作完成以更正問題之前,您可以使其靜音。
變更閾值參數
特定規則的閾值會與計量的目前值進行比較,以找出問題。 如果預設閾值不符合,您可以變更它們。
新增您或協力廠商所撰寫的更多規則
您可以將一或多個 JSON 檔案以參數的形式,新增至 SQL 評定 API 呼叫,藉此將規則集合併在一起。 您的組織可能會撰寫這些檔案,或向協力廠商取得這些檔案。 例如,你可以有一個 JSON 檔案,禁用 Microsoft 規則集中的特定規則,另一個由業界專家提供的 JSON 檔案,包含你覺得適合你環境的規則,接著是另一個 JSON 檔案,改變該 JSON 檔案中的某些閾值值。
重要
我們強烈建議您,在徹底審查之前,不要使用來自不受信任來源的規則集,以確保它們安全無誤。