第 2 課:建立和套用命名標準原則
適用於: SQL Server
某些以原則為基礎的管理原則類型可以建立觸發程序,以便強制執行原則的未來合規性。 在這一課,您會建立針對資料表強制執行命名標準的原則。 然後,您會透過嘗試建立違反此原則的資料表,測試此原則。
必要條件
若要完成本教學課程,您需要 SQL Server Management Studio 和執行 SQL Server 的伺服器存取權。
建立 Finance 資料庫
在 Management Studio 中,開啟查詢視窗並執行下列陳述式:
CREATE DATABASE Finance ; GO
在物件總管中,按一下 [資料庫],然後按下 F5 重新整理資料庫的清單。
建立 Finance 資料表條件
- 在物件總管中,依序展開 [管理] 和 [原則管理],以滑鼠右鍵按一下 [條件],然後按一下 [新增條件]。
在 [建立新條件] 對話方塊的 [名稱] 方塊中,輸入 Finance Tables。
- 在 [Facet] 清單中,選取 [多部分名稱]。
- 在 [運算式] 區域的 [欄位] 方塊中,選取 @Name;在 [運算子] 方塊中,選取 [Like];然後在 [值] 方塊中,輸入
'fintbl%'
,強制所有資料表名稱都以字母 fintbl 開頭。 - 在 [描述] 頁面上,輸入財務資料表名稱的開頭必須是 fintbl,然後按一下 [確定] 建立條件。
建立 Finance 名稱原則
- 在物件總管中,以滑鼠右鍵按一下 [原則],然後按一下 [新增原則]。
在 [建立新原則] 對話方塊的 [名稱] 方塊中,輸入 Finance Name。
- 在 [檢查條件] 清單中,選取 [Finance Tables]。 這會位於 [多部分名稱] 區域中。
- 在 [針對] 區域中,您將會看見可套用此原則的資料庫物件清單。 選取 [每份資料表] 的核取方塊。
- 選取 [已啟用] 清單 ([已啟用] 方塊不會套用至 [視需要] 原則)。
- 在 [評估模式] 清單中,選取 [變更時: 避免]。 這樣就會透過在 Finance 資料庫上建立資料庫觸發程序,強制執行此原則。
- 在 [伺服器限制] 清單中,選取 [無]。
- 在 [描述] 頁面上,新增這項描述:'Table names in the Finance database must contain 'fintbl%'.'
- 返回 [一般] 頁面,接著在 [每個資料庫] 區域中,展開 [全部],然後按一下 [新增條件]。
在 [建立新條件] 對話方塊的 [名稱] 方塊中,輸入 Finance Database。
- 在 [運算式] 方塊中,完成要包含 @Name = 'Finance' 的運算式,然後按一下 [確定] 關閉條件頁面。
注意
您可能必須按下 TAB 鍵跳離 [值] 方塊,才能啟用 [確定] 按鈕。
選取 [確定]。
建立 Finance 原則類別目錄
- 在物件總管中,展開 [管理],以滑鼠右鍵按一下 [原則管理],然後按一下 [管理類別目錄]。
在 [管理原則類別目錄] 對話方塊之 [名稱] 下的空白方塊中,輸入 Finance,然後清除 [託管資料庫訂閱]。 [託管資料庫訂閱] 將會強制執行個體中的每一個資料庫訂閱屬於這個原則類別目錄的原則。 基於這個理由,只有 Finance 資料庫應該訂閱 Finance Name 原則。
選取 [確定]。
訂閱 Finance 原則類別目錄
- 在物件總管中,展開 [資料庫]、以滑鼠右鍵按一下 Finance、指向 [原則],然後按一下 [類別目錄]。
- 針對 Finance 類別目錄,選取 [已訂閱] 核取方塊。
- 選取 [確定]。
測試 Finance 名稱原則的強制執行
在 Management Studio 中,開啟查詢視窗。 執行下列陳述式,以便嘗試建立違反 Finance Name 原則的資料表。 此資料表違反了原則,因為資料表名稱並未以字母 fintbl為開頭。
USE Finance ; GO CREATE TABLE NewTable (Col1 int) ; GO
請注意,這個原則會讓您無法建立資料表,並且傳回提供原則名稱的參考用訊息。
Policy 'Finance Name' has been violated by 'SQLSERVER:\SQL\SQL\SQL2017\Databases\Finance\Tables\dbo.NewTable'.
This transaction will be rolled back.
Policy condition: '@Name LIKE 'fintbl%''
Policy description: 'Tables names in the Finance database must contain 'fintbl%''.
Additional help: '' : ''
Statement: 'CREATE TABLE NewTable
(Col1 int)'.
Msg 515, Level 16, State 2, Procedure msdb.sys.sp_syspolicy_execute_policy, Line 69 [Batch Start Line 2]
Cannot insert the value NULL into column 'target_query_expression', table 'msdb.dbo.syspolicy_policy_execution_history_details_internal'; column does not allow nulls. INSERT fails.
The statement has been terminated.
若要提供有效的名稱,請依照下列內容修改程式碼並再次執行陳述式。
USE Finance ; GO CREATE TABLE fintblNewTable (Col1 int) ; GO
這次就會建立資料表。
將原則套用至整個伺服器
目前,只有 Finance 資料庫訂閱 Finance 原則類別目錄。 在許多情況下,將原則類別目錄套用至整個伺服器是比較簡單的方式。 在物件總管中,展開 [管理],以滑鼠右鍵按一下 [原則管理],然後按一下 [管理類別目錄]。
在 [管理原則類別目錄] 對話方塊中,找出 Finance 類別目錄,然後針對 Finance 類別目錄選取 [託管資料庫訂閱] 核取方塊。
選取 [確定]。 此時,Finance 類別目錄會套用至所有資料庫,但是您已建立的條件會將 Finance Name 原則限制為 Finance 資料庫。 這點就說明了如何以將在許多伺服器上正確套用的方式,使用複雜的條件組合來建立原則的目標。
摘要
這個教學課程已經示範了如何建立以原則為基礎的管理條件、原則和原則群組,以及如何套用篩選和檢查以原則為基礎的管理目標是否符合。
下一個
本教學課程已完成。 若要返回開頭,請前往教學課程:使用原則式管理來管理伺服器。
如需教學課程清單,請參閱 適用於 SQL Server 2016 的教學課程。