MSSQL 接続文字列をレジストリに格納および取得する Windows サービスを開発しました。ただし、サービスがレジストリから取得した文字列に接続しようとすると、指定された UID と PWD が露骨に無視されます。
次に、アプリケーションをコンソール アプリケーションとしてコンパイルして実行すると、コンソール アプリケーションは自分のユーザー アカウントの権限で実行されたのに対し、サービスはローカル システム アカウントで実行されたため、当然のことながら機能しました。サービスを自分のユーザー アカウントとして実行するように指定したところ、サービスはデータベースに正常に接続されました。
私の結論は、レジストリから取得すると、何らかの理由でアプリケーションが次のいずれかまたは両方を実行するということです。
- 指定された UID と PWD を無視します。
- Trusted モードで接続する必要があると自動的に想定します (Trusted_Connection=true)。
レジストリに保存されている接続文字列で実際に Trusted_Connection=false を指定したことは言及する価値があります。
これは私の接続文字列です:
SERVER=.\SQLEXPRESS;DATABASE=mydb;UID=myid;PWD=mypwd
誰かがこの問題に光を当てることができますか? 接続文字列に保存されているユーザー ID とパスワードを利用できるようにしたいと考えています。