SQL Server 2008 : 基于策略的管理(Policy-Based Management)
在SQL Server 2008中提出了一套新的管理機制,就是所謂的基于策略的管理(姑且可以稱為PBM)。它的主要優勢如下
- 按需管理:PBM提供了系統配置的邏輯視圖,因此DBA們可以預先定義各自所需要的數據服務配置,而不用等到這些需要實際發生的時候再去配置。
- 智能監控:PBM可以持續監控系統的配置變化,并阻止那些違反了策略的配置變化操作。
- 虛擬管理:通過PBM,DBA們可以對多臺服務器進行規模化管理,在企業內部統一實施某些強制性配置會變得更加方便。
簡單地說,基于策略管理的兩個方面是:評估和監視。
- SQL Server 2008的PBM支持4種執行模式,這4種模式決定了策略對目標的影響程度。這四種模式分別是:
- 按需(On Demand):這種模式下的策略可以有管理員自由的選擇是否應用,例如管理員可以手動調用這些策略來檢查目標的依從性,或者通過DDL Trigger來訂閱這些策略。
- 更新時阻止(On Change - Prevent):這是最嚴格的一種,SQL Server 2008通過DDL Trigger的方式在訂閱該策略的目標上發生操作時實施檢查操作對策略的符合性,如果違反策略則回滾該操作,以達到強制策略的效果。
- 更新時記錄(On Change - Log Only):SQL Server 2008通過Event Notification的機制在在訂閱該策略的目標上發生操作時實施檢查操作對策略的符合性,如果違反策略則發送消息,就將該違反操作通過Service Broker的隊列發送進行記錄。
- 按計劃(On Schedule):通過SQL Agent的作業來調用策略對目標對象進行檢查。
基于策略管理的術語
- 對象(Facets):包括策略管理中某個方面的相關配置屬性。例如在Surface Area中包括了像Database Mail Enabled以及CLR Integration Enabled之類的SQL Server功能的屬性。
- 條件(Conditions):表示一個方面的狀態。條件是基于單個方面的,并且可以被一個或多個策略使用。例如,DBA可以建立一個名為Minimal Surface Area的條件,在這個條件中將Surface Area Facet中的所有屬性都設置為False。
- 策略(Policies):包括了用于約束單個或多個目標的條件。例如DBA可以創建一個名為Locked Down Server的策略,在這一策略中將Minimal Surface Area條件指派給某臺服務器。
- 類別(Categories):包含一條或多條策略。數據庫擁有者可以將一個或多個分類綁定到數據庫上。例如,DBA可以創建一個名為Corporate DB Policies的分類,其中包含一條強制數據庫對象命名規則的策略和一條強制數據庫兼容級別的策略,并將該分類綁定到業務數據庫上。通常所有數據庫都綁定到默認分類,但是可以在服務器或數據庫級別上將分類設置為激活(Active)或暫停(Inactive),這樣管理員就可以靈活控制策略的強制性。
- 目標(Targets):目標代表像服務器、數據庫、登錄、表以及其他數據庫對象各種被指派策略的實體。在一個SQL Server實例中的所有目標組成了一個目標層級。對于某個策略,DBA可以通過對目標層級進行篩選來定義一個目標集合。例如,DBA可以定義一個包含Production架構擁有的所有索引的目標集合。
為策略檢查配置警報
如果某項策略被違反,SQL Server 2008會生成相應的警報,因此可以通過在SQL Agent中配置警報來監控這些事件
?
| 執行模式 | 事件號 |
| On Change - Prevent (if automatic) | 34050 |
| On Change - Prevent (if On Demand) | 34051 |
| On schedule | 34052 |
| On change | 34053 |
策略管理的安全性
屬于PolicyAdministratorRole的成員才可以制定和修改策略定義,這個角色的成員是必須要小心控制的,因為惡意用戶可以通過制定苛刻的策略來達到類似于拒絕服務攻擊的效果。
【備注】這個角色是在MSDB里面
?
基于策略管理的常規配置步驟為:
?
我們下面用一個例子來演示一下如何使用策略進行管理工作。
我們的需求是:管理員需要確保服務器上所有數據庫中的存儲過程都是加密過的。
?
1. 創建條件(Condition)。
點擊“新建條件”
輸入名稱,在“方面”里面選擇“存儲過程”
在表達式中,“字段”中選擇“@IsEncrypted”,“值”設置為True(默認為True)
作為演示,其他的內容我們就不設置了。直接點擊“確定”關閉“創建新條件”對話框。我們可以在對象資源管理器中看到新增加的一個條件。如下圖所示
?
2. 創建一個策略(Policy)
接下來,我們基于這個條件創建文明的策略。
點擊“新建策略”
輸入一個名稱,并且在“檢查條件”中選擇剛才創建號的“存儲過程是否加密”這個條件。默認情況下,會有另外一些設置。如下圖
作為演示的第一個步驟,我們先不對其他選項做任何設置。直接點擊“確定”退出該對話框
3. 啟用該策略
策略創建好之后,默認是沒有啟用的。我們必須通過菜單進行啟用
很不幸,我們點擊“啟用”之后,會收到下面的一個錯誤消息
?
這個消息提示說:按需模式不支持“啟用”。也就是說,如果按需評估,則不需要啟用。
其實,按需的意思就是手工評估。
?
4. 使用該策略對數據庫進行按需評估
現在我們有了這么一個策略,我們怎么樣驗證某個數據庫中的存儲過程是否滿足該策略的要求呢?
選擇剛才創建好的策略,然后右鍵菜單中點擊“評估”
這個工具就會檢測當前服務器上面所有數據庫中的所有存儲過程是否已加密。在上面的對話框中,還可以點擊“導出結果”得到一個xml文件,可以作為其他用途,例如編寫專門的報告
與此同時,我們還可以直接針對某個特定的存儲過程進行評估
選中策略后,點擊“評估”
評估的結果仍然是沒有通過,因為我們的存儲過程沒有加密。
?
5. 使用策略進行主動監控。
與評估不同,監控則有主動性。例如,如果我們在服務器上啟用了該策略,那么任何存儲過程在被增加或者修改的時候,我們就可以主動干預,確保它必須加密。
我們再來看一下評估模式
這四種模式中,其實分為兩大類
“按需”和“按計劃”這兩種很類似,都是作為評估用的。他們的評估結果大多數通過“查看歷史記錄”的方式進行查看的。他們的區別只是在于“按計劃”是一個排好的日程,定期自動做的,而“按需”是全靠手工地做
而“更改時:僅記錄”和“更改時:禁止”則帶有主動性。
兩者的區別在于前者僅僅做記錄,而后者可以明確地阻止用戶的操作。
?
6. 使用“更改時:禁止”這種評估模式進行工作。
我們要實現的需求就是,如果用戶新建存儲過程,不進行加密,就不允許保存。
我們首先將策略的評估模式更改為“更改時:禁止”,并且選中“已啟用”的復選框。然后點擊“確定”關閉該對話框
接下來,我們嘗試去創建一個很簡單的存儲過程
這個語句太平常不過了。也沒有任何問題。然后我們點擊F5,執行代碼
我們收到了這么一個消息,說是因為不匹配策略,所以被回滾了。有點神奇對吧
那么,我們怎么樣才能成功創建該存儲過程呢?我們需要做的是,修改存儲過程的代碼,指定為其加密
這樣的話,該存儲過程就可以被創建了。如下
需要注意觀察一下它的圖標,右下角帶有一個小鎖,這就表示該存儲過程被加密了。加密的意思是不允許查看源代碼。(不管你用哪種方式)
?
7. 關于策略的其他好處
上面我們完整地演示了如何使用策略進行評估或者監視的過程。那么,是不是說每一臺服務器都需要我們這樣一步一步地創建條件,創建策略呢?
顯然不是的,基于策略的管理機制的好處就在于策略本身可以復用,實現一次定義,多次使用。
第一步,我們可以把策略導出
導出的是一個XML文件。里面包含了有關條件和策略的定義
?
為了做測驗,我把剛才創建好的條件和策略都刪除掉。下面來看看,如果通過導入策略的方式來部署。
點擊“確定”之后,我們很高興地看到條件和策略都被重新創建了
我們選中“存儲過程必須經過加密”這個策略,右鍵菜單中選擇“評估”,它可以正常工作,這證明我們導入是成功的。
總結
以上是生活随笔為你收集整理的SQL Server 2008 : 基于策略的管理(Policy-Based Management)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向服务体系架构的业务规划和建模方法系列
- 下一篇: 英语口语(5月17)