SQL ログインはアプリでは失敗するが、SSMS では失敗する

SQL ログインはアプリでは失敗するが、SSMS では失敗する

私は、データベースに接続してメッセージを表示するだけの簡単なテスト アプリケーションを C# (4.5) で作成しました。(基本的には、デプロイメントと DB 接続をテストするためだけです。) ローカル ワークステーションではすべて正常に動作します。SQL Express 2012 をインストールし、現在のユーザー (統合セキュリティ) として接続しましたが、問題はありませんでした。

ただし、Windows Server 2008 に展開すると、アプリケーションはデータベースに接続できません。ログイン失敗エラーが繰り返し発生します。

サーバーでは、SQL Express 2012 に対して同じインストールを実行しました。コンソール アプリケーションを実行するときは、管理者としてログインしています。混合モード認証をオンにして、ユーザーを作成し、そのユーザーとして接続してみました。SQL Management Studio では接続できますが、アプリケーションでは常にログイン失敗エラーが発生します。

.NET アプリケーションが SQL サーバーに接続できるようにするために、Windows Server 2008 に隠されたセキュリティ設定があるのでしょうか? SSMS 経由でデータベースにログインできるのに、アプリケーション経由ではログインできないというこの動作の原因は何でしょうか?

エラー:

System.Data.SqlClient.SqlException (0x80131904): ログインによって要求されたデータベース「TestDatabase」を開けません。ログインに失敗しました。ユーザー「sa」のログインに失敗しました。

sa当然、これはテストのための最後の手段として接続を試みたときのエラーのバージョンです。同じエラーTestUserが (このために作成した SQL ユーザー) とPERSONALSERVER\Administrator(アプリケーションを実行している現在ログインしているユーザー) の両方で発生します。

試した接続文字列は次のとおりです。

  • Data Source=localhost\sqlexpress2012;Initial Catalog=TestDatabase;Integrated Security=True
  • Data Source=localhost\sqlexpress2012;Initial Catalog=TestDatabase;User Id=TestUser;Password=testpassword

答え1

構成マネージャーで、TCP/IP と名前付きパイプが有効になっていることを確認します。

コントロール パネルで、SQL Server ドライバー (管理ツールの下) -> データ ソースを使用して SQL 接続を作成してみてください。これにより、非常に少ない変数 (たとえば、コード (完璧に記述されていると確信しています :) ) を使用したローカル接続がテストされます。

また、接続文字列を参照している場所が 2 か所ありますか (私はこれを実行しました)。接続文字列は app.config ファイルに保存され、コード内の文字列として (またはリソース文字列として) 保存されました。

コンピューター名ではなく IP アドレスで接続します (つまり、接続文字列も更新する必要があります。方法については、この投稿の下部に詳細があります)。

最後に、接続文字列を次のように更新します。

データ ソース = .\sqlexpress2012; 初期カタログ = TestDatabase; 統合セキュリティ = SSPI; ユーザー ID = myDomain\myUsername; パスワード = myPassword;

または次のように試してください:

サーバー=.\sqlexpress2012; データベース=TestDatabase; Trusted_Connection=True;

ユーザーが問題のデータベースに対して有効な権限を持っていると想定します。 :)

SQL ポート (通常は 1433 と 1434) が開いていることを確認します。

ユーザー名/パスワードを使用して SSMS にログオンし、権限があることを確認します。

このサイトについて- 接続文字列の素晴らしいリソースです! :)

関連情報