0

MSSQL 接続文字列をレジストリに格納および取得する Windows サービスを開発しました。ただし、サービスがレジストリから取得した文字列に接続しようとすると、指定された UID と PWD が露骨に無視されます。

次に、アプリケーションをコンソール アプリケーションとしてコンパイルして実行すると、コンソール アプリケーションは自分のユーザー アカウントの権限で実行されたのに対し、サービスはローカル システム アカウントで実行されたため、当然のことながら機能しました。サービスを自分のユーザー アカウントとして実行するように指定したところ、サービスはデータベースに正常に接続されました。

私の結論は、レジストリから取得すると、何らかの理由でアプリケーションが次のいずれかまたは両方を実行するということです。

  • 指定された UID と PWD を無視します。
  • Trusted モードで接続する必要があると自動的に想定します (Trusted_Connection=true)。

レジストリに保存されている接続文字列で実際に Trusted_Connection=false を指定したことは言及する価値があります。

これは私の接続文字列です:

SERVER=.\SQLEXPRESS;DATABASE=mydb;UID=myid;PWD=mypwd

誰かがこの問題に光を当てることができますか? 接続文字列に保存されているユーザー ID とパスワードを利用できるようにしたいと考えています。

4

2 に答える 2

1

ユーザー名とパスワードを指定すると、統合されていない標準セキュリティが使用されるため、SQL が標準セキュリティ用に構成されていることを確認します。したがって、Windows アカウントを使用してこの方法でデータベースにアクセスすることはできません。

別の、通常は推奨される方法は、サービスを Windows アカウントとして実行し、統合セキュリティを使用してアクセスすることです。

http://msdn.microsoft.com/en-us/library/aa266913(v=vs.60).aspx

于 2012-12-10T14:33:47.363 に答える
1

SQL Server 認証がオンになっていると思いますか?

統合認証 (推奨) では、サービスの実行アカウントを SQL Server ログインを持つアカウントに変更する必要があります。

いえ

  • Trusted_connection をオンにします。ただ...オフにしないでください。
  • ユーザー DOMAIN\USR_MYSERVICE を作成します。
  • 適切なマシンとデータベースのアクセス許可をアカウントに付与します。
  • そのアカウントとして実行するようにサービスを設定します。
于 2012-12-10T14:33:59.287 に答える