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

作成者: Jason Lee

Note

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

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

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

このトピックは、Fabrikam, Inc. という架空の会社のエンタープライズ配置要件を題材にしたチュートリアル シリーズの一部です。このシリーズでは、サンプル ソリューション (Contact Manager ソリューション) を使用して、現実的なレベルの複雑さを持った、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなどを含んだ Web アプリケーションを取り上げます。

これらのチュートリアルの核心である配置方法は、「プロジェクト ファイルについて」で説明した分割プロジェクト ファイルのアプローチを基にして、ビルド プロセスを 2 つのプロジェクト ファイル (すべての配置先環境に適用されるビルド命令を含んだファイルと、環境に特化したビルド設定や配置設定を含んだファイル) で制御するものになっています。 ビルド時には、環境に特化したプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。

メンバーシップ データベースを配置する際の問題

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

残念ながら、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 Import アクションを使用して、ソース メンバーシップ データベースの .dbschema ファイルを生成します。 この手順については、「方法: コマンド プロンプトからスキーマをインポートする」を参照してください。
  2. VSDBCMD Deploy アクションを使用して、.dbschema ファイルを配置先のメンバーシップ データベースに配置します。 この手順については、「VSDBCMD.EXE のコマンドライン リファレンス (配置とスキーマのインポート)」を参照してください。

まとめ

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

もっと読む

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