IIS上で動くASP.NET (MVC)アプリケーションの権限について
ASP.NET MVC アプリケーションを別サーバーにデプロイして動作確認しようとしたが、DBやフォルダへのアクセス権限でエラーが発生しました。以前に設定したのが少し前で、やり方を忘れていたのと、IIS上でASP.NET MVC アプリケーションの権限について理解があやふやな部分があったので調べました。
ASP.NET MVCでしか確認していないけれど、MVC固有の設定はしていないので ASP.NET上のアプリケーション全般に通じる話かもしれない。
Webアプリケーション、アプリケーションプールについて
そもそもIIS上でのWebアプリケーションやアプリケーションプールとは何なのか?については、以下のサイトに書いてありました。
メモ
- IIS上のアプリケーションは、Application Pool単位で実行される。Application Poolは自作も可能(.NET Framework Versionを指定する)
- IIS上のアプリケーションは、ワーカープロセス(w3wp.exe)で起動し、その設定がApplication Poolとしてまとめられている
- ワーカープロセスは、Webサイトへのアクセスとは別の権限で動作する
アプリケーションの権限について
では、Application Poolの権限は、どうやって調べるのか?こちらは以下のサイトに書いてありました。
メモ
- Application PoolのIDが、ワーカープロセスのアカウント
- Application Poolは、アプリケーションごとに指定も出来るが、大体はサイト作成時に指定したものを継承する
- DefaultWebSiteのApplication Poolは、DefaultAppPool
- アプリケーション プール IDについての公式ドキュメントは英語と日本語が存在するが、英語のほうが、ほんの少しだけ情報が多い
IIS 7.0(Windows Server 2008)とIIS 7.5(Windows Server 2008 R2)の違い
メモ
IIS 7.0(Windows 2008)
- Application PoolのIDは、NETWORK SERVICEが既定値
- 実在のユーザーアカウントではないが、IIS AppPool\(Application Pool名)というIDでアクセス制御をすることが可能
- アクセス制御は可能だが、ワーカープロセスはNETWORK SERVICEで動作する
- IIS7.5と同じ動きにしたい場合は、Application PoolのIDをApplicationPoolIdentityにする
IIS 7.5(Windows 2008 R2)
- Application PoolのIDは、ApplicationPoolIdentityが既定値
- ApplicationPoolIdentityでは、ワーカープロセスはApplication Poolごとに IIS AppPool\(Application Pool名)という仮想アカウントで動作する
- 全てのApplication Poolのアカウントは、IIS_IUSRS グループに含まれる
DBやフォルダへの権限設定方法
作成したアプリケーションのDBやフォルダへのアクセス許可等の権限を設定するには、以下のどちらかを設定すれば良いようです。
- IIS_IUSRS グループを追加して権限を設定すると、Application Poolを使用するアプリケーションつまり、IIS上の全てのアプリケーションが設定した権限を持つ。
- IIS AppPool\(Application Pool名)アカウントを追加して権限を設定すると、対象のApplication Poolを使用するアプリケーションが設定した権限を持つ。
以上です。
補足
アプリケーションからDBへのログインは、Windows認証を使用しています。(Web.configの接続文字列にユーザー名・パスワードを指定しない)