ポリシーを作成する
ポリシーを作成するには、オブジェクトエクスプローラツリーの[Policy Management]項目の下にある[Policies]項目を右クリックして、[New Policy...]項目を選択します。すると、次のダイアログボックスが表示されます。
このダイアログボックスで、ポリシーをどのように設定するかを定義します。最初にポリシーの名前を入力します。今回、ポリシー名は「Enforce User Stored Procedure Naming Standards」とします。
次に、条件の確認([Check condition])を指定する必要があります。[Check condition]を指定するには、ドロップダウンメニューボタンをクリックして、前のセクションで作成した条件を選択します。条件を選択すると、[Against target:]領域にいくつかのデフォルトの対象情報が表示されます。次のスクリーンショットには、そのようなデフォルト値が表示されています。
このように、すべてのストアドプロシージャとすべてのデータベースに対してこのポリシーを実行するというデフォルトの対象設定を受け入れることができます。あるいは、[StoredProcedure]や[Database]に対して異なる設定を行うこともできます。[StoredProcedure]に対して異なる設定を行うには、[StoredProcedure]という語句の左にある小さい下矢印の上にマウスカーソルを置きます。すると、次のメニューが表示されます。
このメニューから、既存の条件を選択することも、必要なストアドプロシージャのみを指定するための新しい条件を作成することもできます。今回は、このポリシーをすべてのデータベースとストアドプロシージャに対して適用します。特定のデータベースのみを指定したい場合は、[Database]の横の小さい下矢印をクリックして、ポリシー実行対象とする特定のデータベースのみを指定する条件を作成することもできます。
次に検討すべきことは、ポリシーの評価モード([Evaluation Mode])の定義です。選択肢は[On demand]、[On schedule]、[On change: log only]、[On change: prevent]です。ポリシーを作成して[Evaluation Mode]を[On demand]に設定すると、ポリシーを手動で実行して、ポリシーで指定したとおりにファセットが設定されているかどうかを確認できます。[On schedule]オプションを使用すると、指定したスケジュールでポリシーが評価されます。[On change: log only]オプションは、変更内容をイベントログとSQL Serverエラーログに記録するだけです。一方、[On change: prevent]オプションは、ポリシーに違反する変更をSQL Serverインスタンスに対して実行できないようにします。
今回は、「sp_」で始まるストアドプロシージャを作成できないようにしたいので、[Evaluation Mode]に[On change: prevent]を用いてポリシーを設定します。
ポリシーに対して最後に設定するのは、サーバの制限([Server restriction])です。このプロパティは、ポリシーを適用するサーバのタイプを指定するもので、このデモでは[None]を指定します。
ポリシーを完成させるには、ポリシーを有効にするかどうかを決定する必要があります。このポリシーによって、「sp_」で始まるストアドプロシージャを作成できないようにしたいので、ポリシーを有効にします。ポリシーを有効にするには、[Enable]チェックボックスをオンにします。
入力が完了したポリシー定義のスクリーンショットを次に示します。
ユーザーの環境に対してポリシーを評価する
ポリシーを作成してしまえば、そのポリシーを評価することは簡単です。指定可能な評価モードがいろいろ([On demand]、[On schedule]、[On change])あることを思い出してください。評価モードによって、ポリシーをいつ評価するかを指定することになります。
評価モードとして[On demand]を設定したポリシーを作成した場合は、このポリシーを手動で評価する必要があります。ポリシーを手動で評価するには、評価したいポリシー名を右クリックして、ドロップダウンメニューから[Evaluate]オプションを選択します。設定されている評価モードにかかわらず、このようにメニューを選択する方法で、すべてのポリシーを評価できることに注意してください。有効になっていないポリシーも、この方法で評価できます。
スケジュールで評価するようポリシーを設定した場合は、このポリシーを評価するためのSQL Server Agentジョブが作成されます。評価モードを[On schedule]に設定すると、指定したスケジュールでSQL Server Agentジョブが実行されます。このSQL Agentジョブの実行時に、ポリシーで指定したファセットがポリシーに違反していないかどうかが検証されます。
[On change]評価モードは、ポリシーに関連付けられたファセットが変更されるといつでもポリシーを評価します。ファセットの変更によって、ポリシーの[Check condition]で定義した条件の中に真を返さなくなるものがある場合、ファセットの変更が強制されます。評価モードが[On change: log only]の場合は、変更内容が記録されます。評価モードが[On change: prevent]の場合は、変更内容が記録されるとともに、その変更は実行できなくなります。このため、ポリシーが許可しない状態にファセットを変更することはできません。
ポリシー管理を利用してインスタンスをコントロールする
ポリシー管理は、DBA用の強力な拡張機能です。DBAは、ポリシー管理を利用して、ファセットに対して実行する条件を作成し、その条件をすべて1つのポリシーにまとめることによって、インスタンスをコントロールできるようになりました。一連のポリシーを定義して有効にすることで、インスタンスの設定、およびオブジェクトを定義済みのポリシーすべてに準拠させることができます。読者がDBAであれば、ポリシー管理について研究し、SQL Serverインスタンスをより適切に管理できるポリシーの作成に着手すべきです。