特集:クライアントステート管理、3つの手法Visual Studio Magazine(4/9 ページ)

» 2004年12月28日 10時30分 公開
[Matthew Gibbs, Rob Howard,FTPOnline]

 SQL Serverは、データの管理、格納、検索を素早く効率的に行えるよう最適化されたエンタープライズ向けのデータベースソリューションだ。そしてさらに、レプリケーションやクラスタリングも実行できる。またSQL Serverは、クラスタ環境においてフェイルオーバーするよう構成ができる。たとえば、クラスタ構成したSQL Serverが失敗した場合には、バックアップがそれを引き継ぐといった具合だ。

 ASP.NETのセッション状態は、クラスタ構成したSQL Serverではサポート外となるので注意してほしい。SQL Serverのクラスタリングやレプリケーション機能を有効にするためには、tempDB以外のテーブルに、セッションデータを格納しなければならない。また、SQL Serverをセッション状態の保存先として利用する場合でも、コードのいかなる変更も必要としない。次のコードは、SQL Serverを利用するのに必要となるmacine.config構成ファイルだ。

<configuration>
<system.web>
<sessionState mode="SQLServer"
sqlConnection
String="database=サーバー名;
Trusted_Connection=true"
cookieless="false"
timeout="20"/>
</system.web>
</configuration>

 mode属性は、「SQLServer」でなければならない。また、sqlConnectionString属性は、ASP.NETのSQLセッション状態を受け入れるように構成されたSQL Serverが実行されているサーバを示さなければならない。

 ASP.NET 1では、SQL Serverの認証モードを混合モードにし、ASP.NETのセッション状態へのアクセスに必要なSQL Serverの権限(EXECUTE)を与えた「ASPNETアカウント」を加えてほしい(ASPNETアカウントは、ASP.NETワーカープロセスの実行ユーザーだ)。IIS 6上のASP.NET 1.1では、SQL Serverの認証モードを混合モードにし、「NT AUTHORITY\NETWORK SERVICEアカウント」を加えてほしい。

 アカウントが必要な権限を持っいるならば、統合認証(訳注:Windows認証)を利用すべきだ。これにより構成ファイルにおいて、クリアテキストとしてユーザー名やパスワードを保存する必要性がなくなる。

 統合認証を使う場合、ASP.NETは、ワーカープロセスの実行ユーザーの資格情報(クレデンシャル)を使ってSQL Serverにアクセスする。標準では、これらの資格情報は「ASPNET」であり、Windows Server 2003上のIIS 6では、「NT AUTHORITY\NETWORK SERVICE」となるのだ。なお、構成ファイルにSQL Serverへの接続に必要な資格情報を保存するのではなく、統合認証を使ってほしい。

 それでもSQL Serverのユーザー名やパスワードを利用すると決めた場合には、システム管理者のアカウント(sa)を使わないでほしい。代わりに、データベースオブジェクトへの必要な権限だけを持たせるアカウントを利用すべきだ(セッション状態にアクセスするのに必要なのはEXECUTE権限だけだ)。もし、SQL Serverの資格情報を使わなければならない場合には、ASP.NET 1.1は、資格情報を安全に格納することをサポートする(訳注:具体的には、Aspnet_setreg.exeユーティリティを使いレジストリに暗号化した文字列を保存する。その詳細については、マイクロソフトのサポート技術情報で文章番号「329290」を参照してほしい)。

 InstallSqlState.sqlファイルをisqlw.exe(クエリアナライザ)で表示参照するか、コマンドラインツールであるosql.exeを使うかにより、ASP.NETのセッション状態をサポートするよう、SQL Serverを構成してほしい。そのためには、[スタート]メニューから、[すべてのプログラム]→[Microsoft SQL Server]→[クエリアナライザ]を選択し、クエリアナライザを表示する(画面3)。この際、SQLスクリプト(InstallSqlSate.sql)を実行する前に、「SQL Server Agent」が実行されていることを確認してほしい。SQL Server Agentは、期限切れとなったセッションを取り除くための周期的なジョブを実行する。

画面3■クエリアナライザを実行する。クエリアナライザを使って、SQL ServerがASP.NETセッション状態をサポートするように構成する。実行操作は[スタート]メニューから[すべてのプログラム]→[Microsoft SQL Server]→[クエリアナライザ]をクリック。SQLスクリプトを実行する前に、SQL Server Agentが実行されているかどうかを確認してほしい。SQL Server Agentは、期限切れとなったセッションを取り除くための周期的なジョブを実行する

 ASP.NET 1の場合には、[ファイル]メニューから[開く]を選択し、「システムドライブ\WINDOWS\Microsoft.NET\Framework\v1.03705\InstallSqlState.sql」を読み込む。ASP.NET 1.1の場合には、同様に、「システムドライブ\WINDOWS\Microsoft.NET\Framework\V1.0.4322ディレクトリ」にあるInstallSqlState.sqlを読み込む。

 そして[クエリ実行]ボタンをクリックするか、[F5]キーを押すことで、スクリプトを実行する。コマンドラインツール(osql.exe)を使うのであれば、コマンドプロンプトを開き、カレントディレクトリを「システムドライブ\WINDOWS\Microsoft.NET\Framework\ASP.NETバージョン」に移動してほしい。SQL Serverが統合認証モードで構成されており、かつ、現在WindowsにログオンしているユーザーがSQL Serverに対して適切な権限もっているなら、「osql -E < InstallSqlState.sql」と入力する。

 SQL Serverが混合モードで構成されており、かつ、現在WindowsにログオンしているユーザーがSQL Serverに対して適切な権限をもっていないなら、ユーザー名とパスワードを指定し、「osql -U ユーザー名 -P パスワード < InstallSqlSate.sql」と入力しよう。SQLスクリプトを実行することで、SQL Serverは、ASP.NETのセッション状態をサポートするように構成される。具体的には、tempdbデータベース内に、「ASPStateTempApplications」と「ASPStateTempSession」という2つのテーブルが作られる。

© Copyright 2001-2005 Fawcette Technical Publications

注目のテーマ