SQL Server Express Edition でのデータベース作成法

ユーザーインスタンスの機能を利用した MDF ファイルの作成と配布

SQL Server 2005 Express Edition では、Access の MDB ファイルを扱うのと同じような感覚でデータベースを手軽に扱えるようにとユーザーインスタンスの機能が導入されました。ユーザーインスタンスの機能は、管理者以外のユーザーでも自分のアカウントで SQL Server のプロセスを起動して実行できるようにする機能で、MDF ファイルを動的にアタッチすることができます。また、自動デタッチ機能も備えており、アプリケーションが終了すると自動的にMDF ファイルをデタッチするので、ユーザーがデタッチの操作をすることなくデータベースのコピーが可能になります。

※注意!
Windows 7 と Vista sp2 以降では、IIS のアプリケーションプールのデフォルトのワーカープロセス ID (IIS 7 のアクセス許可を参照)では、以下の図のように「クライアントの権限借用中のエラーにより、SQL Server のユーザー インスタンスを生成できませんでした。接続は閉じられます。」というエラーが発生して、ユーザーインスタンスを生成できません。ワーカープロセス ID を ApplicationPoolIdentity から NETWORK SERVICE 等に変更すれば、接続ができるようになりますが、セキュリティ的にはかなりレベルが下がります。Visual Studio の開発サーバー上では問題なく動作するので、開発中の利用には問題はありませんが、運用を始める時には、通常の方法でデータベースをアタッチしてユーザーも設定するようにして使用するのが確実です。また、「SQL Server オンライン ブック」のユーザー インスタンスの説明では、「この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。」となっており、そういう点でも運用サーバーではおすすめの方法ではありません。
express00

以下、簡単に設定の手順をメモしておきます。

1. 空のデーターベース (.mdf ファイル)を作成
1-1 Visual Studio を立ち上げて、Web アプリケーションを作成する。
1-2 ソリューション エクスプローラの App_Data フォルダーを右クリックして、 「追加」、「新規項目」をクリックします。
express02

1-3 「SQL Server データベース」を選択し、ファイル名(ここでは、Umbraco.mdf)を入力します。
express03

1-4 エクスプローラでデータベースファイルを表示する。 (Visual Studio で App_Data を右クリックして、「エクスプローラでフォルダを開く」を選択すれば表示できます)
1-5 Visual Studio を終了して、データベースを閉じた状態にする。

2. アプリケーションでの使用

2-1 インストールフォルダに、App_Data フォルダを作成する。
2-2 作成した .mdf ファイル(ここでは Umbraco.mdf) を App_Data フォルダにコピーします。 (ログファイル Umbraco_log.LDF はコピーしなくても作成されます。)

2-3 名前付きインスタンス(インスタンス名 SQLEXPRESS)の場合、接続文字列を以下のように設定します。(既定のインスタンスの場合、Data Source の \SQLEXPRESS を省略します)
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Umbraco.mdf;Integrated Security=True;User Instance=True;

Umbraco の場合は、Web.config の編集をしなくても、設定ウィザードで接続文字列の設定ができます。設定ウィザードの 2/5 で、Type を 「Custom connection」 に設定して、Connection string を以下のように設定します。

datalayer=SqlServer;Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Umbraco.mdf;Integrated Security=True;User Instance=True;
express04

※Umbraco の場合の注意!

Windows 7 と Vista sp2 以降で、アプリケーションプールのワーカープロセス ID が ApplicationPoolIdentity になっていた場合にも、「Database connection initialisation failed. The installer cannot connect to the databese. 」というエラーメッセージが設定ウィザードの画面に表示されるだけなので、接続文字列の入力ミスとの区別ができません。