從圖中能夠看到,策略管理中包含三個節點:策略、條件、方面。數據庫
方面就是策略要應用的對象,包括:服務器、表、觸發器、視圖、存儲過程……這些方面對象都是系統定義好了的,僅供瞻仰不可更改。雙擊具體的某一個方面能夠查看該方面的屬性,在定義條件時便可對這些屬性進行判斷,如圖爲存儲過程方面的屬性。服務器
條件就是一個布爾表達式判斷策略是否爲真。網絡
策略就是在條件爲假的狀況下要執行的操做,即評估模式。策略中的評估模式有4種:按需、按計劃、更改時記錄和更改時禁止。對於這4種模式,官方給出以下定義:函數
•按需。當用戶直接指定這種模式時,它可對策略進行評估。
•更改時: 禁止。這種自動模式使用 DDL 觸發器來防止違反策略。
•更改時: 僅記錄。當發生相關更改並違反日誌策略時,這種自動模式使用事件通知對策略進行評估。
•按計劃。這種自動模式使用 SQL Server 代理做業按期對策略進行評估。此模式記錄違反策略的狀況。
其中按需是手動操做的,其餘三個則能夠自動完成。按計劃是使用SQL Server代理來定時檢查策略,另外兩個是在更改時由DDL觸發器觸發。學習
其餘的概念我不用多說,你們能夠看聯機叢書,這裏就舉個例子來講明策略管理的使用。測試
假設如今咱們要開發個業務系統,其數據庫爲TestDB1,使用ADO.NET 調用存儲過程來實現數據操做,如今項目中規定存儲過程的命名規範:以「usp_」開頭。這裏咱們可使用策略管理來實現對該規範的檢查或強制實行。具體操做過程以下:spa
(1)因爲咱們針對的對象是存儲過程,因此在「方面」節點下右擊「存儲過程」,選擇「新建條件」選項,系統將會彈出新建條件的窗口。代理
(2)輸入「條件」的名稱:「存儲過程命名規範」,而後字段列表中選擇@Name,運算符爲LIKE,值爲'usp[_]%'。也就是判斷存儲過程的名字LIKE 'usp[_]%',也就是以「usp_」開頭的SQL表達。如圖:日誌
這裏字段和值均可以使用變量和函數,若是容許「USP_」、「Usp_」等開頭的存儲過程,則能夠將字段運用小寫函數,改寫爲「Lower(@Name)」,而後單擊「肯定」按鈕,建立「條件」完成。對象
(3)右擊「策略」節點,在右鍵菜單中選「新建策略」選項,系統將打開新建策略窗口,輸入策略名「檢查存儲過程命名規範」,在檢查條件的下拉列表中選擇剛建立的條件「存儲過程命名規範」,系統將根據選擇的檢查條件列出針對目標,默認狀況下是對每一個數據庫的每一個存儲過程進行檢查,因爲這裏咱們只但願檢查TestDB1數據庫,因此須要新建數據庫的條件,如圖:
(4)單擊「新建條件」後將出現與第(2)步新建條件相同的窗口,只是這裏咱們新建的條件方面是數據庫,新建條件TestDB1,如圖所示:
(5)單擊「肯定」按鈕回到新建策略窗口,針對目標變成了對TestDB1數據庫的每一個存儲過程。這裏若要強制實現這個策略,則選擇評估模式爲「更改:禁止」並選中「已啓用」複選框表示啓用該策略。
(6)單擊「說明」選擇頁,能夠在其中選擇策略的類別、在違反策略時給出的友好說明。最後單擊「肯定」按鈕便可完成策略的建立工做。
(7)接下來就是測試該策略是否有效了,運行以下SQL語句建立一個存儲過程usp_GetDate:
USE TestDB1
GO
CREATE PROC usp_GetDate
AS
SELECT GETDATE()
GO
一切正常,存儲過程被建立成功。那麼再建立一個存儲過程db1_GetDate:
USE TestDB1
GO
CREATE PROC db1_GetDate
AS
SELECT GETDATE()
GO
哈哈,系統拋出異常了:
「SQLSERVER:\SQL\MS-ZY\DEFAULT\Databases\TestDB1\StoredProcedures\dbo.db1_GetDate」已違反策略「檢查存儲過程命名規範」。
此事務將回滾。
策略條件:「Lower(@Name) LIKE 'usp[_]%'」
策略說明:「項目中統一了TestDB1數據庫中存儲過程的命名規範,全部存儲過程必須以usp_開頭」
其餘幫助:「存儲過程必須以usp_開頭」:「」
語句:「CREATE PROC db1_GetDate
AS
SELECT GETDATE()
」。
消息 3609,級別 16,狀態 1,過程 sp_syspolicy_dispatch_event,第 65 行
事務在觸發器中結束。批處理已停止。
再看看對象資源管理器中,該存儲過程確實沒有被建立。一樣能夠在另外的數據庫中建立這兩個存儲過程,可是因爲策略中針對的是TestDB1數據庫,因此在其餘數據庫中這兩個存儲過程都將會被成功建立。
如今有了這個策略,你們在命名存儲過程時都必須按照規範來了。
若是策略被定義爲「按需」評估模式的話,則用戶能夠在其中建立違反策略的存儲過程。若要檢查現有的數據庫對象是否符合策略,只須要在對象資源管理器中右擊數據庫對象節點,而後選擇右鍵菜單中的「策略」下的「評估」 選項,若是要檢查具體某個數據庫對象的「方面」屬性值的話,則選擇右鍵菜單中的「方面」選項。
選擇「評估」選項後系統彈出評估策略窗口,其中列出了全部存儲過程方面相關的策略,選擇須要驗證的策略,而後單擊「評估」按鈕便可查看當前數據庫對象是否符合策略。
這裏只是一個簡單的示例而已,策略管理的功能遠不止命名規範的檢查這麼簡單,經過策略管理還能夠檢查數據庫是否自動收縮、SQL Server的密碼策略、網絡數據表大小、最大並行度……
微軟爲咱們提供了一個安裝包,其中包含了大量的策略示例,幫助你們學習和使用基於策略的管理,下載地址:
http://go.microsoft.com/fwlink/?LinkId=123720&clcid=0x804