アプリのSQLログインは失敗しますが、SSMSの失敗はありません


0

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

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

サーバーで、SQL Express 2012と同じインストールを実行しました。コンソールアプリケーションを実行すると、管理者としてログインします。ミックスモード認証を有効にして、ユーザーを作成し、そのユーザーとして接続することさえ試みました。SQL Management Studioで接続できますが、アプリケーションは常にログイン失敗エラーを受け取ります。

Windows Server 2008には、.NETアプリケーションがSQLサーバーに接続できるように変更する必要がある隠しセキュリティ設定がありますか?アプリケーションではなく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

SSMSとアプリの両方でWindows認証を使用していますか?
アミラムコラーチ

@AmiramKorach:Windows認証とSQL認証の両方で同じ結果を試しました。
デビッド

接続文字列が間違っている可能性があります。追加してください。
アミラムコラーチ

1
SQL Serverのログを確認できますか?実際にsqlデータベースと通信しているのでなければ、「ログインに失敗しました」というメッセージは表示されません。
sgmoore

1
> Windows Server 2008には、.NETアプリケーションがSQLサーバーに接続できるように変更する必要のある隠しセキュリティ設定がありますか?これを反証する簡単な方法は、LinqPadをダウンロードして試してみることです(linqpad.netから)
sgmoore

回答:


1

まず、SQL Expressインスタンスが年を使用するのを見たことがありません。通常、それは常にlocalhost \ SqlExpressです。

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

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

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

コンピューター名の代わりにIPアドレス経由で接続します(これは接続文字列も更新することを意味します-この投稿の最後の詳細をご覧ください)。

最後に、接続文字列を更新して

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

または以下で試してください:

Server =。\ sqlexpress2012; Database = TestDatabase; Trusted_Connection = True;

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

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

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

www.ConnectionStrings.com-接続文字列の素晴らしいリソース!:)


sqlexpress2012インストール中にインスタンスに名前を付けました。
デビッド

たくさんの良いアドバイス:) TCP / IPと名前付きパイプは実際に無効にされましたが、それらを有効にしても結果は変わらないようです。データソーステストは機能しましたが、アプリケーションはまだ機能しません。(.NET Frameworkの信頼レベルに関するものなのか、それともそのようなものなのか疑問に思います。)構成ファイルの接続文字列を間違いなく使用しています。ユーザーはDBに対する権限を持ち、問題なくSSMSを介してデータベースとやり取りできます。
デビッド

Linq to Sql。このアプリは、データコンテキストを作成し、データベース内の唯一のテーブルから最初の行を照会するだけで、取得するのと同じくらい簡単です。私は、管理者としてログインしていますので、それは、このような...として実行しておく必要があります
デヴィッド・

ローカルホストで手動で開く必要がありますか?データベースが存在するのと同じボックスでアプリを実行しています(RDP経由)。
デビッド

まだ運がありません。SQLエラーメッセージが返されるため、間違いなくSQLサーバーに接続しています。
デビッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.