[環境]
OS:Windows2003 SP2
SQL Server 2005 Enterprise Edition SP2
[アプリケーション・データベース環境]
1.JDBCにてSQL Server接続を行わせるアプリケーションがWindowサービスで起動します。
2.DBにはSQL認証を利用して接続できるようにしており、DBにアクセスする
ユーザには、下記のようなロール権限をマップさせたユーザが定義されています
- db_buckupoperator
- db_datareader
- db_datawriter
- db_ddladmin
[問題事象]
1.上記設定にてアプリケーションはMS SQL へ正常に接続できる状態になっております。
2.次にアプリケーションのサービス再起動を実施します。
すると以下のメッセージがSQL ServerのERROR.LOGに出力され、
--ERRORメッセージ--
エラー: 18456、重大度: 14、状態: 16。
Login failed for user 'XXXXXX(ユーザ名)'. [クライアント: <ホストIPアドレス>]
--
またWindowsホストのアプリケーション・イベントログにも以下のメッセージが
出力され、
--
MSSQLSERVER 失敗の監査 (4) 18456 N/A <ホスト名> ユーザー 'XXXXXX' はログインできませんでした。 [クラ
イアント: <ホストIPアドレス>]
--
結果的にアプリケーションからの接続が全くできない事象が発生します。
3.ところが、Management Studioにて上記設定済みのユーザ定義を一旦削除し、再定義を行なうとまたアプリケーションからの接続が正常
に行われるようになります。
※同様な事象が以下のURLにても紹介されています。
http://slashdot.jp/~noritama2/journal/392321
本事象は、SQL Server 2005 Standard Edition SP2環境では再現しておりません。
アプリケーションの再起動により、この事象が発生してしまい、ユーザの再定義を
行なわない限り、接続が行えなくなるという不可解な事象となっており、困っております。
どうぞ宜しく御願いします。
[問題の原因]
・SQL Serverが複数のネットワークインターフェイスカードを搭載し、それぞれのNIC上にて異なるIPアドレスがアクティブになっている。
・SQL Serverが複数のIPアドレスにて、TCP/IP接続をリスンするように設定されている。
[回避方法]
SQL Serverの構成マネージャより、以下の設定を行なうことで、接続に使用するIPアドレス上のみでTCP/IP接続をリスンできるようになり
ます。
1.TCP/IPプロパティ設定の、プロトコルタブにて[すべて受信待ち]を「いいえ」に指定。
2.IPアドレスタブにて、アプリケーションからの接続に使用するIPアドレスの[有効]を「はい」に指定。
(その他のIPアドレスは[有効]を「いいえ」に設定。)
3.上記設定後、MSSQL Serverサービスを再起動。
ご参考になればと。