策略式管理:從單一實例擴展到全環境自動化合規
SQL Server 2008 引入 **Policy-Based Management (PBM)**,定義原則(如「AutoShrink = OFF」)後,需逐一對每個受管實例評估。**手動逐個匯入/匯出極不實用**,正解是 **匯出為 XML → 建立伺服器群組 → 註冊所有實例 → 批次評估/強制**。
操作流程
- 建立/選取原則:SSMS → 管理 → 原則管理 → 原則 → 右鍵「匯出原則」 → 存為 `.xml`(如 `AutoShrink OFF.xml`)。
- 建立伺服器群組:SSMS 物件總管 → 伺服器群組 → 右鍵「新增伺服器群組」 → 命名(如 `All Prod Instances`)。
- 註冊受管實例:群組右鍵「註冊」 → 輸入實例名稱/認證 → 批次加入群組。
- 匯入原則到群組:群組右鍵「原則」→「匯入」→ 選取 XML 檔案 → 原則自動套用至群組內所有實例。
- 評估/強制:選取群組 → 右鍵「評估」→ 檢視合規報告 → 違規者可「強制」自動修正(視原則模式:On Demand/On Schedule/On Change/On Log)。
原則評估模式
| 模式 | 觸發時機 | 適用場景 |
| On Demand | 手動點擊評估 | 審計、臨時檢查 |
| On Schedule | Agent 排程作業 | 定期合規掃描(每日/每週) |
| On Change (Prevent) | DDL 觸發器攔截 | 強制合規(如禁止建立未加密資料庫) |
| On Log | 事件通知非同步 | 事後稽核、警報 |
進階技巧
- 中央管理伺服器 (CMS)**:將註冊資訊集中儲存於指定實例 msdb,所有 DBA 共用同一組群組/原則,避免各自維護本地註冊。
- PowerShell 自動化**:`Invoke-PolicyEvaluation` 搭配 CMS,納入 CI/CD 或每日排程,輸出 HTML/CSV 合規報告郵件通知。
- 原則類別標籤**:「安全性」、「效能」、「命名規範」等分類,便於報告篩選與責任歸屬。
避坑提醒
- **On Change (Prevent) 模式會攔截 DDL**,若原則定義有誤(如條件過嚴),會導致正常部署失敗,**上線前必須在測試環境完整驗證**。
- **XML 匯出僅含原則定義**,不含評估歷史與結果,歷史需依賴 CMS 的 `msdb.dbo.syspolicy_*` 系統表。
- **跨版本相容性**:2008 定義的原則在 2012/2014/2016/2019 通常可直接匯入,但條件運算式引用的 DMV/目錄檢視若版本間有差異需微調。