エンタープライズ環境にメンバーシップ データベースを配置する

作成者: Jason Lee

注意

この記事が作成されて以来、ASP.NET メンバーシップ プロバイダーは ASP.NET Identity に置き換えられました。 この記事の執筆時点で取り上げられたメンバーシップ プロバイダーではなく 、ASP.NET ID プラットフォームを使用するようにアプリを更新することを強くお勧めします。 ASP.NET ID には、ASP.NET メンバーシップ システムに比して、次のような多くの利点があります。

  • パフォーマンスの向上
  • 拡張性とテスト性の向上
  • OAuth、OpenID Connect、および 2 要素認証のサポート
  • クレームベースの ID のサポート
  • ASP.Net Core との相互運用性の向上

このトピックでは、テスト環境、ステージング環境、または運用環境で ASP.NET アプリケーション サービス データベース (より一般的にメンバーシップ データベースと呼ばれます) をプロビジョニングするときに克服する必要がある主な考慮事項と課題について説明します。 また、これらの課題に対応するために使用できるアプローチについても説明します。

このトピックは、Fabrikam, Inc という架空の会社のエンタープライズ展開要件に基づく一連のチュートリアルの一部です。このチュートリアル シリーズでは、サンプル ソリューションである Contact Manager ソリューションを使用して、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなど、現実的なレベルの複雑さの Web アプリケーションを表します。

これらのチュートリアルの中心にある配置方法は、「 プロジェクト ファイルの理解」で説明されている分割プロジェクト ファイルのアプローチに基づいています。このアプローチでは、ビルド プロセスは 2 つのプロジェクト ファイルによって制御されます。1 つは、すべての移行先環境に適用されるビルド命令を含み、もう 1 つは環境固有のビルドと配置設定を含みます。 ビルド時に、環境固有のプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド手順の完全なセットが形成されます。

メンバーシップ データベースをデプロイするときの問題は何ですか?

ほとんどの場合、データベースのデプロイ戦略を考案する場合、最初に考慮する必要があるのは、デプロイするデータです。 開発環境またはテスト環境では、ユーザー アカウント データをデプロイして、迅速で簡単なテストを容易に行うことができます。 ステージング環境または運用環境では、ユーザー アカウント データをデプロイする可能性はほとんどありません。

残念ながら、ASP.NET メンバーシップ データベースでは、この決定をより複雑にするいくつかの特定の課題が発生します。

  • スキーマのみのデプロイでは、メンバーシップ データベースは非運用状態になります。 これは、メンバーシップ データベースに、データベースが機能するために必要な構成データ ( aspnet_SchemaVersions テーブル内) が含まれているためです。 そのため、ユーザー アカウント データを除外するためにメンバーシップ データベースのスキーマのみのデプロイを実行する場合は、デプロイ後スクリプトを実行して重要な構成データを追加する必要があります。
  • メンバーシップ データベースの構成方法によっては、メンバーシップ プロバイダーがマシン キーを使用してパスワードを暗号化し、データベースに格納する場合があります。 この場合、データベースと共にデプロイするすべてのユーザー アカウント データは、移行先サーバーで使用できなくなります。 このため、ユーザー アカウント データのデプロイはサポートされていないシナリオです。

メンバーシップ データベース戦略の選択

エンタープライズ サーバー環境でメンバーシップ データベースをプロビジョニングする方法を選択する場合は、次のガイドラインを使用します。

  • 可能な限り、メンバーシップ データベースをデプロイしないでください。 代わりに、ターゲット データベース サーバーでメンバーシップ データベースを手動で作成します。 メンバーシップ データベース スキーマをカスタマイズしていない場合は、ASP.NET SQL Server登録ツール (aspnet_regsql.exe) を使用して、移行先で新しいスキーマをその場で作成できます。
  • メンバーシップ データベースをデプロイする以外にオプションがない場合 (たとえば、データベース スキーマを広範囲に変更した場合)、メンバーシップ データベースのスキーマのみのデプロイを実行してユーザー アカウント データを除外し、デプロイ後スクリプトを実行して必要な構成データを追加する必要があります。 これらのアプローチに関する広範なガイダンスについては、「 方法: ユーザー アカウントを含めずに ASP.NET メンバーシップ データベースを展開する」を参照してください。

メンバーシップ データベースのスキーマはかなり静的である可能性が高い点に注意してください。 メンバーシップ データベースをカスタマイズした場合でも、スキーマを定期的に更新する必要はほとんどありません。Web アプリケーションやデータベース プロジェクトのコードと同じ頻度で変更されるわけではありません。 そのため、自動またはシングルステップのデプロイ プロセスにメンバーシップ データベースを含める必要はありません。

VSDBCMD を使用したメンバーシップ データベース スキーマの更新

最初の展開後にメンバーシップ データベースの構造を変更する場合は、インターネット インフォメーション サービス (IIS) Web 配置ツール (Web 配置) を使用してデータベースを再デプロイしたくない場合があります。 Web 配置のデータベース配置機能には、移行先データベースに対して差分更新を行う機能は含まれていません。代わりに、Web 配置でデータベースを削除して再作成する必要があります。 つまり、既存のユーザー アカウント データは失われます。これは通常、ステージング環境または運用環境では望ましくありません。

代わりに、VSDBCMD ユーティリティを使用して、移行先データベースのスキーマを更新することもできます。 VSDBCMD には、2 つの重要な機能が含まれています。 まず、既存のデータベースのスキーマを .dbschema ファイルにインポートできます。 次に、.dbschema ファイルを差分更新として既存のデータベースにデプロイできます。つまり、ターゲット データベースを最新の状態にするために必要な変更のみが行われ、データが失われるわけではありません。

次の大まかな手順を使用して、メンバーシップ データベース スキーマを更新できます。

  1. VSDBCMD インポート アクションを使用して、ソース メンバーシップ データベースの .dbschema ファイルを生成します。 この手順については、「 方法: コマンド プロンプトからスキーマをインポートする」を参照してください
  2. VSDBCMD 配置 アクションを使用して、.dbschema ファイルを移行先メンバーシップ データベースに展開します。 この手順については、「 VSDBCMD.EXEのコマンド ライン リファレンス (デプロイとスキーマのインポート)」を参照してください

まとめ

このトピックでは、さまざまなターゲット環境で ASP.NET メンバーシップ データベースをプロビジョニングする必要がある場合に直面する可能性があるいくつかの課題について説明しました。 特に、スキーマのみのデプロイでメンバーシップ データベースが非運用状態のままになる理由と、ユーザー アカウント データのデプロイがサポートされない理由について説明しました。 また、このトピックでは、さまざまなシナリオでメンバーシップ データベースをプロビジョニング、デプロイ、更新する方法に関するガイダンスも示しました。

もっと読む

VSDBCMD を使用する方法の詳細なガイダンスと例については、「 コマンド ライン リファレンス for VSDBCMD.EXE (配置とスキーマのインポート)」 および 「方法: コマンド プロンプトからスキーマをインポートする」を参照してください。 aspnet_regsql.exeを使用してメンバーシップ データベースを作成する方法の詳細については、「ASP.NET SQL Server登録ツール (aspnet_regsql.exe)」を参照してください。 メンバーシップ データベースの展開に関する一般的なガイダンスについては、「 方法: ユーザー アカウントを含めずに ASP.NET メンバーシップ データベースを展開する」を参照してください。