Web 配置発行のデータベース サーバーを構成する

作成者: Jason Lee

このトピックでは、Web 配置と発行をサポートするように SQL Server 2008 R2 データベース サーバーを構成する方法について説明します。

このトピックで説明するタスクは、すべての配置シナリオに共通しています。Web サーバーが IIS Web 配置ツール (Web 配置) リモート エージェント サービス、Web 配置ハンドラー、オフライン配置のどれを使用するように構成されているかと、アプリケーションが単一の Web サーバーとサーバー ファームのどちらで実行されているかは関係ありません。 データベースを配置する方法は、セキュリティ要件やその他の考慮事項に応じて変わる可能性があります。 たとえば、サンプル データの有無に関係なくデータベースを配置し、配置後にユーザー ロール マッピングを配置するか、手動で構成できます。 ただし、データベース サーバーの構成方法は変わりません。

Web 配置をサポートするようにデータベース サーバーを構成するために、追加の製品やツールをインストールする必要はありません。 データベース サーバーと Web サーバーが異なるマシンで実行されていると仮定すると、次を実行する必要があります。

  • SQL Server が TCP/IP を使用して通信することを許可します。
  • ファイアウォールを通過する SQL Server トラフィックを許可します。
  • Web サーバー コンピューター アカウントに SQL Server ログインを付与します。
  • マシン アカウントのログインを、必要なデータベース ロールにマップします。
  • 配置を実行するアカウントに、SQL Server ログインとデータベース作成者のアクセス許可を付与します。
  • 繰り返し配置をサポートするには、配置アカウントのログインを db_owner データベース ロールにマップします。

このトピックでは、これらの各手順を実行する方法について説明します。 このトピックのタスクとチュートリアルでは、Windows Server 2008 R2 で実行されている SQL Server 2008 R2 の既定のインスタンスから開始することを前提としています。 次に進む前に、次のことを確認します。

  • Windows Server 2008 R2 Service Pack 1 と使用可能なすべての更新プログラムがインストールされていること。
  • サーバーがドメインに参加していること。
  • サーバーに静的 IP アドレスがあること。
  • SQL Server 2008 R2 Service Pack 1 と使用可能なすべての更新プログラムがインストールされていること。

SQL Server インスタンスに含める必要があるロールは、SQL Server のインストールに自動的に含まれるデータベース エンジン サービス ロールのみです。 ただし、構成とメンテナンスを容易にするために、[管理ツール - 基本][管理ツール - 完全] の各サーバー ロールを含めることをお勧めします。

Note

コンピューターをドメインに参加させる方法の詳細については、「コンピューターをドメインに追加してログオンする」を参照してください。 静的 IP アドレスの構成の詳細については、「静的 IP アドレスを構成する」を参照してください。 SQL Server のインストールの詳細については、「SQL Server 2008 R2 のインストール」を参照してください。

SQL Server へのリモート アクセスを有効にする

SQL Server は、TCP/IP を使用してリモート コンピューターと通信します。 データベース サーバーと Web サーバーが異なるマシン上にある場合は、次の操作を行う必要があります。

  • TCP/IP 経由の通信を許可するように SQL Server ネットワーク設定を構成します。
  • SQL Server インスタンスが使用するポートで TCP トラフィック (場合によってはユーザー データグラム プロトコル (UDP) トラフィック) を許可するように、ハードウェア ファイアウォールまたはソフトウェア ファイアウォールを構成します。

SQL Server が TCP/IP 経由で通信できるようにするには、SQL Server 構成マネージャーを使用して、SQL Server インスタンスのネットワーク構成を変更します。

SQL Server が TCP/IP を使用して通信できるようにするには

  1. [スタート] メニューで、[すべてのプログラム] をポイントし、[Microsoft SQL Server 2008 R2][構成ツール][SQL Server 構成マネージャー] の順に選択します。

  2. ツリー ビュー ウィンドウで、[SQL Server ネットワークの構成] を展開し、[MSSQLSERVER のプロトコル] を選択します。

    Note

    SQL Server の複数のインスタンスをインストールしている場合は、各インスタンスの [インスタンス名] 項目の [のプロトコル] が表示されます。 インスタンスごとにネットワーク設定を構成する必要があります。

  3. 詳細ウィンドウで、[TCP/IP] 行を右クリックし、[有効化] をクリックします。

    詳細ウィンドウで、[TCP/IP] 行を右クリックし、[有効にする] をクリックします。

  4. [警告] ダイアログ ボックスで、[OK] をクリックします。

    [警告] ダイアログ ボックスで、[OK] をクリックします。

  5. 新しいネットワーク構成が有効になる前に、MSSQLSERVER サービスを再起動する必要があります。 これは、コマンド プロンプト、サービス コンソール、または SQL Server Management Studio から実行できます。 この手順では、SQL Server Management Studio を使用します。

  6. SQL Server 構成マネージャーを閉じます。

  7. [スタート] メニューで、[すべてのプログラム] をポイントし、[Microsoft SQL Server 2008 R2] を選択し、[SQL Server Management Studio] を選択します。

  8. [サーバーへの接続] ダイアログ ボックスの [サーバー名] ボックスに、データベース サーバーの名前を入力し、[接続] をクリックします。

    [サーバーへの接続] ダイアログ ボックスの [サーバー名] ボックスに、データベース サーバーの名前を入力し、[接続] をクリックします。

  9. [オブジェクト エクスプローラー] ウィンドウで、親サーバー ノード (TESTDB1 など) を右クリックし、[再起動] をクリックします。

    [オブジェクト エクスプローラー] ウィンドウで、親サーバー ノード (TESTDB1 など) を右クリックし、[再起動] をクリックします。

  10. [Microsoft SQL Server Management Studio] ダイアログ ボックスで [はい] を選択します。

    [Microsoft SQL Server Management Studio] ダイアログ ボックスで [はい] を選択します。

  11. サービスが再起動したら、SQL Server Management Studio を閉じます。

ファイアウォール経由の SQL Server トラフィックを許可するには、まず、SQL Server インスタンスが使用しているポートを把握する必要があります。 これは、SQL Server インスタンスの作成方法と構成方法によって異なります。

  • SQL Server の既定のインスタンスは、TCP ポート 1433 で要求をリッスン (および応答) します。
  • SQL Server の名前付きインスタンスは、動的に割り当てられた TCP ポートで要求をリッスン (および応答) します。
  • SQL Server Browser サービスが有効になっている場合、クライアントは UDP ポート 1434 でサービスに対してクエリを実行して、特定の SQL Server インスタンスに使用する TCP ポートを確認できます。 ただし、多くの場合、このサービスはセキュリティ上の理由から無効になっています。

SQL Server の既定のインスタンスを使用している場合は、トラフィックを許可するようにファイアウォールを構成する必要があります。

方向 元ポート 対象ポート ポートの種類
受信 Any 1433 TCP
発信 1433 Any TCP

Note

技術的には、クライアント コンピューターは 1024 と 5000 の間でランダムに割り当てられた TCP ポートを使用して SQL Server と通信し、それに応じてファイアウォール規則を制限できます。 SQL Server ポートとファイアウォールの詳細については、ファイアウォール経由で SQL と通信するために必要な TCP/IP ポート番号に関するページと「特定の TCP ポートで受信待ちするようにサーバーを構成する方法 (SQL Server Configuration Manager)」を参照してください。

ほとんどの Windows Server 環境では、データベース サーバーで Windows ファイアウォールを構成する必要があります。 既定では、ルールで明示的に禁止されていない限り、Windows ファイアウォールはすべての送信トラフィックを許可します。 Web サーバーがデータベースに到達できるようにするには、SQL Server インスタンスが使用するポート番号で TCP トラフィックを許可する受信規則を構成する必要があります。 SQL Server の既定のインスタンスを使用している場合は、次の手順を使用してこの規則を構成できます。

既定の SQL Server インスタンスとの通信を許可するように Windows ファイアウォールを構成するには

  1. データベース サーバーの [スタート] メニューの [管理ツール] をポイントし、[セキュリティが強化された Windows ファイアウォール] をクリックします。

  2. ツリー ビュー ウィンドウで、[受信の規則] をクリックします。

    ツリー ビュー ウィンドウで、[受信の規則] をクリックします。

  3. [操作] ウィンドウの [受信ルール] で、[新しいルール] をクリックします。

  4. 新規の受信の規則ウィザードの [規則の種類] ページで、[ポート] を選択し、[次へ] を選択します。

    新規の受信の規則ウィザードの [規則の種類] ページで、[ポート] を選択し、[次へ] を選択します。

  5. [プロトコルとポート] ページで、[TCP] が選択されていることを確認し、[特定のローカル ポート] ボックスに「1433」と入力し、[次へ] をクリックします。

    [プロトコルとポート] ページで、[TCP] が選択されていることを確認し、[特定のローカル ポート] ボックスに「1433」と入力し、[次へ] をクリックします。

  6. [アクション] ページで、[接続を許可する] がオンになっているままにし、[次へ] を選択します。

  7. [プロファイル] ページで、[ドメイン] がオンのままにし、[プライベート] チェック ボックスと [パブリック ] チェック ボックスをオフにして、[次へ] をクリックします。

    [プロファイル] ページで、[ドメイン] がオンのままにし、[プライベート] チェック ボックスと [パブリック ] チェック ボックスをオフにして、[次へ] をクリックします。

  8. [名前] ページで、規則に適切なわかりやすい名前 (たとえば、SQL Server の既定のインスタンス - ネットワーク アクセス) を指定し、[完了] をクリックします。

SQL Server 用の Windows ファイアウォールの構成の詳細に関し、特に、標準以外のポートまたは動的ポート経由で SQL Server と通信する必要がある場合は、「データベース エンジン アクセスを有効にするための Windows ファイアウォールの構成方法」を参照してください。

ログインとデータベースのアクセス許可を構成する

Web アプリケーションをインターネット インフォメーション サービス (IIS) に配置するときに、アプリケーションはアプリケーション プール ID を使用して実行されます。 ドメイン環境では、アプリケーション プール ID は、実行するサーバーのマシン アカウントを使用してネットワーク リソースにアクセスします。 マシン アカウントは、[ドメイン名]</strong>[マシン名]$ という形式になります (例: FABRIKAM\TESTWEB1$)。 Web アプリケーションがネットワーク経由でデータベースにアクセスできるようにするには、次の操作を行う必要があります。

  • Web サーバー コンピューター アカウントのログインを SQL Server インスタンスに追加します。
  • マシン アカウント ログインを必要なデータベース ロール (通常は db_datareaderdb_datawriter) にマップします。

Web アプリケーションが単一のサーバーではなくサーバー ファームで実行されている場合は、サーバー ファーム内のすべての Web サーバーに対してこれらの手順を繰り返す必要があります。

Note

アプリケーション プール ID とネットワーク リソースへのアクセスの詳細については、アプリケーション プール ID に関するページを参照してください。

これらのタスクにはさまざまな方法でアプローチできます。 ログインを作成するには、次のいずれかを行います。

  • Transact-SQL または SQL Server Management Studio を使用して、データベース サーバーでログインを手動で作成します。
  • Visual Studio の SQL Server 2008 Server プロジェクトを使用して、ログインを作成して配置します。

SQL Server ログインは、データベース レベルのオブジェクトでなくサーバー レベルのオブジェクトであるため、配置するデータベースに依存しません。 そのため、ログインはいつでも作成できます。その最も簡単な方法は、データベースの配置を開始する前に、データベース サーバーに手動でログインを作成することです。 次の手順を使用して、SQL Server Management Studio でログインを作成できます。

Web サーバー コンピューター アカウントの SQL Server ログインを作成するには

  1. データベース サーバーの [スタート] メニューで、[すべてのプログラム] をポイントし、[Microsoft SQL Server 2008 R2] を選択し、[SQL Server Management Studio] を選択します。

  2. [サーバーへの接続] ダイアログ ボックスの [サーバー名] ボックスに、データベース サーバーの名前を入力し、[接続] をクリックします。

    次の図は、[サーバーへの接続] ダイアログ ボックスの [サーバー名] ボックスにデータベース サーバーの名前を入力し、[接続] をクリックします。

  3. [オブジェクト エクスプローラー] ウィンドウで、[セキュリティ] を右クリックし、[新規] をポイントして、[ログイン] をクリックします。

  4. [ログイン - 新規] ダイアログ ボックスの [ログイン名] ボックスに、Web サーバー コンピューター アカウントの名前 (例: FABRIKAM\TESTWEB1$) を入力します。

    [ログイン - 新規] ダイアログ ボックスの [ログイン名] ボックスに、Web サーバー コンピューター アカウントの名前 (例: FABRIKAM\TESTWEB1$) を入力します。

  5. OK をクリックします。

この時点で、データベース サーバーは Web 配置発行の準備ができています。 ただし、配置するソリューションが何であっても、マシン アカウントのログインを必要なデータベース ロールにマップするまでは機能しません。 データベースを配置するまではロールをマップできないため、ログインをデータベース ロールにマップするには、さらに多くの検討が必要です。 マシン アカウントのログインを必要なデータベース ロールにマップするには、次のいずれかを実行できます。

  • 初めてデータベースを配置した後、データベース ロールをログインに手動で割り当てます。
  • 配置後スクリプトを使用して、ログインにデータベース ロールを割り当てます。

ログインとデータベース ロールのマッピングの作成を自動化する方法の詳細については、「テスト環境にデータベース ロール メンバーシップを配置する」を参照してください。 または、次の手順を使用して、マシン アカウントのログインを必要なデータベース ロールに手動でマップすることもできます。 この手順は、データベースを配置するまで実行できないことに注意してください。

データベース ロールを Web サーバー コンピューター アカウント ログインにマップするには

  1. 前の手順と同様に、SQL Server Management Studio を開きます。

  2. [オブジェクト エクスプローラー] ウィンドウで、[セキュリティ] ノードを展開し、[ログイン] ノードを展開し、マシン アカウント ログイン (例: FABRIKAM\TESTWEB1$) をダブルクリックします。

    [オブジェクト エクスプローラー] ウィンドウで、[セキュリティ] ノードを展開し、[ログイン] ノードを展開し、マシン アカウント ログイン (例: FABRIKAM\TESTWEB1$) をダブルクリックします。

  3. [ログインのプロパティ] ダイアログ ボックスで、[ユーザー マッピング] をクリックします。

  4. [このログインにマップされたユーザー] テーブルで、データベースの名前 (例: ContactManager) を選択します。

  5. Database ロールメンバーシップ for: [データベース名]一覧で、必要なアクセス許可を選択します。 Contact Manager サンプル ソリューションの場合は、db_datareaderdb_datawriter の各ロールを選択する必要があります。

    [データベース名] ボックスの一覧で、必要なアクセス許可を選択します。Contact Manager サンプル ソリューションの場合は、db_datareaderロールとdb_datawriterロールを選択する必要があります。

  6. OK をクリックします。

データベース ロールを手動でマップするのは、多くの場合、テスト環境では適切なものの、ステージング環境または運用環境への自動配置またはワンクリック配置では望ましくありません。 配置後スクリプトを使用してこの種のタスクを自動化する方法の詳細については、「データベース ロール メンバーシップのテスト環境への配置」を参照してください。

Note

サーバー プロジェクトとデータベース プロジェクトの詳細については、Visual Studio 2010 SQL Server データベース プロジェクトに関するページを参照してください。

配置アカウントのアクセス許可を構成する

配置の実行に使用するアカウントが SQL Server 管理者でない場合は、このアカウント用のログインも作成する必要があります。 データベースを作成するには、アカウントが dbcreator サーバー ロールのメンバーであるか、同等のアクセス許可を持っている必要があります。

Note

Web 配置または VSDBCMD を使用してデータベースを配置する場合は、Windows 資格情報または SQL Server 資格情報を使用できます (SQL Server インスタンスが混合モード認証をサポートするように構成されている場合)。 次の手順では、Windows 資格情報を使用することを前提としていますが、展開を構成するときに、接続文字列に SQL Server のユーザー名とパスワードを指定してはいけないわけではありません。

配置アカウントのアクセス許可を設定するには

  1. 前の手順と同様に、SQL Server Management Studio を開きます。

  2. [オブジェクト エクスプローラー] ウィンドウで、[セキュリティ] を右クリックし、[新規] をポイントして、[ログイン] をクリックします。

  3. [ログイン - 新規] ダイアログ ボックスの [ログイン名] ボックスに、配置アカウントの名前 (例: FABRIKAM\matt) を入力します。

  4. [ページの選択] ウィンドウで、[サーバー ロール] をクリックします。

  5. dbcreator を選択し、[OK] をクリックします。

    dbcreator を選択し、[OK] をクリックします。

後続の配置をサポートするには、最初の配置後に、データベースの db_owner ロールに配置アカウントを追加する必要もあります。 これは、後続の配置では、新しいデータベースを作成するのではなく、既存のデータベースのスキーマを変更するためです。 前のセクションで説明した明らかな理由により、データベースを作成するまでは、データベース ロールにユーザーを追加することはできません。

配置アカウントのログインを db_owner データベース ロールにマップするには

  1. 前の手順と同様に、SQL Server Management Studio を開きます。

  2. [オブジェクト エクスプローラー] ウィンドウで、[セキュリティ] ノードを展開し、[ログイン] ノードを展開し、マシン アカウント ログイン (例: FABRIKAM\matt) をダブルクリックします。

  3. [ログインのプロパティ] ダイアログ ボックスで、[ユーザー マッピング] をクリックします。

  4. [このログインにマップされたユーザー] テーブルで、データベースの名前 (例: ContactManager) を選択します。

  5. Database ロールメンバーシップ for: [データベース名]一覧で、db_ownerロールを選択します。

    [データベース ロールのメンバーシップ] ボックスの一覧で、db_ownerロールを選択します。

  6. OK をクリックします。

まとめ

これで、データベース サーバーは、リモート データベースの配置を受け入れ、リモート IIS Web サーバーがデータベースにアクセスできるようにする準備が整いました。 データベースの配置と使用を試みる前に、次の重要な点を確認してください。

  • リモート TCP/IP 接続を受け入れるように SQL Server を構成したこと。
  • SQL Server トラフィックを許可するようにファイアウォールを構成したこと。
  • SQL Server にアクセスするすべての Web サーバーに対して、マシン アカウント ログインを作成したこと。
  • データベースの配置に、ユーザー ロール マッピングを作成するためのスクリプトが含まれている、または、データベースを初めて配置した後に、これらを手動で作成する必要があること。
  • 配置アカウントのログインを作成し、dbcreator サーバー ロールに追加したこと。

もっと読む

データベース プロジェクトの配置に関するガイダンスについては、「データベース プロジェクトの配置」を参照してください。 配置後スクリプトを実行してデータベース ロール メンバーシップを作成する方法については、「データベース ロール メンバーシップのテスト環境への配置」を参照してください。 メンバーシップ データベースで発生する固有の配置の課題を満たす方法については、「エンタープライズ環境にメンバーシップ データベースを配置する」を参照してください。