レッスン 2: 名前付け基準ポリシーの作成と適用

適用対象:SQL Server

ポリシー ベースの管理の一部の種類のポリシーでは、ポリシーへの今後の準拠を適用するためのトリガーを作成することができます。 このレッスンでは、テーブルの名前付け基準を適用するポリシーを作成します。 その後に、ポリシーに違反するテーブルを作成してポリシーをテストします。

前提条件

このチュートリアルを完了するには、SQL Server Management Studio と SQL Server を実行しているサーバーへのアクセスが必要です。

Finance データベースの作成

  1. Management Studioでクエリ ウィンドウを開き、次のステートメントを実行します。

    CREATE DATABASE Finance ;  
    GO  
    
  2. オブジェクト エクスプローラーで、 [データベース]をクリックし、F5 キーを押してデータベースの一覧を更新します。

Finance テーブルの条件の作成

  1. オブジェクト エクスプローラーで、 [管理][ポリシー管理]の順に展開し、 [条件]を右クリックして [新しい条件]をクリックします。

新しい条件

  1. [新しい条件の作成] ダイアログ ボックスで、 [名前] ボックスに「 Finance のテーブル」と入力します。

    1. [ファセット] ボックスの一覧で [マルチパート名]を選択します。
    2. [ ] 領域の [ フィールド ] ボックスで、[ @Name] を選択します。[ 演算子 ] ボックスで[ いいね!] を選択します。[ ] ボックスに「」と入力 'fintbl%' して、すべてのテーブル名を強制的に文字 fintbl で始めます。
    3. [説明] ページで、「 Finance のテーブル名は必ず fintbl で始める」と入力し、 [OK] をクリックして条件を作成します。

    Finance テーブルの条件

Finace Name ポリシーの作成

  1. オブジェクト エクスプローラーで [ポリシー]を右クリックし、 [新しいポリシー]をクリックします。

新しいポリシー

  1. [新しいポリシーの作成] ダイアログ ボックスで、 [名前] ボックスに「 Finance の名前」と入力します。

    1. [条件の確認] ボックスの一覧で、 [Finance のテーブル]を選択します。 このボックスは [マルチパート名] 領域にあります。
    2. [対象] 領域に、このポリシーを適用できるデータベース オブジェクトの一覧が表示されます。 [すべてのテーブル]のチェック ボックスをオンにします。
    3. [有効] チェック ボックスをオンにします ( [要求時] ポリシーには [有効] ボックスが適用されません)。
    4. [評価モード] の一覧で、 [変更時: 回避]を選択します。 これにより、Finance データベースでデータベース トリガーを作成することでポリシーが適用されるようになります。
    5. [サーバーの制限] ボックスの一覧で [なし]を選択します。
    6. [説明] ページで、'Table names in the Finance database must contain 'fintbl%' (Finance データベースのテーブル名には 'fintbl%' が含まれている必要があります。) の説明を追加します。
    7. [全般] ページに戻り、[すべてのデータベース] 領域で [すべて] を展開し、[新しい条件] をクリックします。

    新しい Finance Name ポリシーの作成

  2. [新しい条件の作成] ダイアログ ボックスで、 [名前] ボックスに「 Finance データベース」と入力します。

    1. [式] ボックスで、@Name = 'Finance' を追加して式を完成させ、 [OK] をクリックして条件ページを閉じます。

    新しい 'finance database' 条件の作成

    注意

    Tab キーを押して [値] ボックスから移動しないと、 [OK] ボタンが有効にならない場合があります。

  3. [OK] を選択します。

Finance ポリシー カテゴリの作成

  1. オブジェクト エクスプローラーで [管理]を展開し、 [ポリシー管理]を右クリックして、 [カテゴリの管理]をクリックします。

カテゴリの管理

  1. [ポリシー カテゴリの管理] ダイアログ ボックスで、 [名前]の下の空白のボックスに「 Finance 」と入力し、 [データベースのサブスクリプションの要求]チェック ボックスをオフにします。 [データベースのサブスクリプションの要求] では、インスタンス内のすべてのデータベースは、このポリシー カテゴリに属するポリシーをサブスクライブします。 このレッスンでは、Finance の名前ポリシーをサブスクライブするのは Finance データベースだけです。

    ポリシー カテゴリの管理

  2. [OK] を選択します。

Finance ポリシー カテゴリのサブスクライブ

  1. オブジェクト エクスプローラーで [データベース]を展開し、 [Finance]を右クリックして、 [ポリシー]をポイントし、 [カテゴリ]をクリックします。

Finance ポリシー カテゴリ

  1. Finance カテゴリの [サブスクライブ済み] チェック ボックスをオンにします。

Finance ポリシーのサブスクライブ

  1. [OK] を選択します。

Finance Name ポリシーの強制のテスト

  1. Management Studioでクエリ ウィンドウを開きます。 Finance の名前 ポリシーに違反するテーブルの作成を試みる次のステートメントを実行します。 このテーブルは、テーブル名が文字列 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.
  1. 有効な名前を指定するには、コードを次のように変更し、ステートメントを再度実行します。

    USE Finance ;  
    GO  
    CREATE TABLE fintblNewTable  
    (Col1 int) ;  
    GO    
    

    今度はテーブルが作成されます。

サーバー全体へのポリシーの適用

  1. 現在、Finance ポリシー カテゴリをサブスクライブするのは Finance データベースだけです。 多くの場合、ポリシー カテゴリをサーバー全体に適用する方が簡単です。 オブジェクト エクスプローラーで [管理]を展開し、 [ポリシー管理]を右クリックして、 [カテゴリの管理]をクリックします。

  2. [ポリシー カテゴリの管理] ダイアログ ボックスで Finance カテゴリを探し、Finance カテゴリの [データベースのサブスクリプションの要求] チェック ボックスをオンにします。

  3. [OK] を選択します。 これで Finance カテゴリがすべてのデータベースに適用されるようになります。ただし、作成した条件により、Finance の名前ポリシーは Finance データベースにのみ適用されることになります。 これは、条件を複雑に組み合わせることで、多数のサーバーに対して適切な方法でポリシーを適用できるということを示しています。

まとめ

このチュートリアルでは、ポリシー ベースの管理の条件、ポリシー、およびポリシー グループを作成する方法と、フィルターを適用してポリシー ベースの管理対象がポリシーに準拠しているかどうかを調べる方法について学習しました。

次へ

このチュートリアルはこれで終了です。 最初に戻るには、「チュートリアル: ポリシー ベースの管理を使用したサーバーの管理」を参照してください。

チュートリアルの一覧については、「 SQL Server 2016 チュートリアル」を参照してください。

参照

ポリシー ベースの管理を使用したサーバーの管理