1

I know this is an often asked question, but I'm still receiving this error and I have tried:

  • Using localhost, the IP address and the instance name in the connection string
  • Changing the SQL Server Configuration Manager so Named Pipes and TCP are both enabled Ensured the database is set to allow remote connections
  • Opened 1433 & 1434 for UDP & TCP in Windows Firewall, in fact I tried turning off the firewall for a moment to see if it would connect
  • Ensured the browser & the MSSQLSERVER service are both up and running using NETWORK SERVICE

Now for some oddness. The SQL Server instance and the IIS running the website are on the same machine.

If I open a browser and browse to the website I get the error. If I open a browser on my local machine and browse to the website I get the error. If I change the connection string in my development PC to the IP address of the remote server running SQL server and debug the application it connects and runs without error!

I am totally at a loss now as to what could be the error.

This is SQL Server 2008 RC2.

I'm on the verge of giving up - I very much appreciate the efforts you guys have made, I have tried all the suggestions here and I am coming to the conclusion that something must have gone awry in the set-up of the server, the website or the database. Just to reiterate if you remote desktop onto the server and connect to the website using http://gdservers you can login and it all works fine, if you use http://gdservers.<domain>.co.uk the login fails. The error in the event log is a membership credentials failure, not blocked by firewall or anything like that. If there's any other suggestions I'd love to hear them, thanks again.

4

7 に答える 7

1

誰も気がつかなかったと思うし、私は水曜日にそれを見つけただけで、別の間違いを犯したことに気づいた. 誰かが上で言及した場合はお知らせください。賞を変更してポイントを与えます。

メンバーシップ プロバイダーに applicationName がありませんでした。水曜日に見つけて追加しましたが、アプリケーション名を追加するときにスペルミスをしていたことに気づかなかったので、これを行ったときに修正されなかったので、そうではないかと思いました。問題です。

昨日、コードを確認しているときに、applicationName を変更したときに「GDServers」ではなく「GSServers」と綴っていることに気付きましたが、すべて機能し始めました。

あまり満足のいく結論ではなく、申し訳ありません。

この問題を解決しようとして、それに固執してくれたすべての人に感謝します。

私が言ったように、誰かが答えやコメントでこれについて言及した場合は、私に知らせてください。

于 2013-05-03T07:11:12.400 に答える
1

Web アプリで SQL ログイン/パスワードを使用して SQL Server 認証を使用する場合は、接続文字列が明示的にIntegrated Security=False. そうしないと、接続がデフォルトで Windows 認証になり、期待どおりに動作しない場合があります。

編集

また、微調整している接続文字列が、接続を確立するために実際に使用されているものであることを確認してください。アプリケーションに独自の構成設定を持つ可能性のある複数のコンポーネントがある場合、状況が混乱することがあります。たとえば、ここのスレッドの問題は次のようになりました。

web.config で接続文字列を更新していましたが、これは多層アプリケーションであり、データ アクセス コンポーネントは別の .dll にあり、独自の接続文字列を持っています。

編集

データ接続がそうでない場合でも、SQL メンバーシップ プロバイダーが Windows 認証を使用して SQL Server に接続しているかどうか疑問に思い始めています。こちらのビデオをチェックして、設定を確認してください (特に、プロバイダーのセットアップ手順での認証設定)。

于 2013-04-29T11:10:35.957 に答える
0

通常、最も簡単で安全な方法は、統合セキュリティを使用することです。

<connectionStrings>
    <add name="HitCounterContext"
         connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=db;Integrated Security=True"
         providerName="System.Data.SqlClient" />
</connectionStrings>

デフォルトでは「SQLExpress」である正しいインスタンス名を使用していることを確認してください。IDE がどのように動作するかはわかりませんが、IIS でこの接続文字列を使用すると、少なくとも正常に接続されるはずです (これは認証とは異なります)。

データベースにアプリ プール アカウントのユーザーが必要なため、認証が失敗する可能性があります。でカスタム エラーを無効にしてweb.config.net エラー メッセージが表示される場合、エラー メッセージはアプリ プール ユーザーの認証が失敗したことを通知するはずです (メッセージは実際にどのユーザーが使用されているかを通知します)。例: IIS 7 を使用して "yoursite.com" という新しい Web サイトを作成すると、既定では "yoursite.com" という名前の新しいアプリケーション プールが作成されます。これで、データベースにユーザーを追加しIIS APPPOOL/yoursite.com(ユーザー リストにない可能性があります)、それdb_ownerをテスト用にする必要があります。

そのように「SQL Server Management Studio」を使用してアプリ プールのユーザーを追加します (ドイツ語で申し訳ありません。これは実際にはユーザーが追加された後のフォームですが、追加中も同じように見えるはずです)。

アプリ プール ユーザーを追加する

その後、ユーザーリストは次のようになります

データベース ユーザー リスト

そして、サーバーのログインリストは次のようになります

サーバーのログイン リスト

各アプリケーション プールには、サーバー用の独自のログインと、それぞれのデータベース用のユーザーがあります。

ちなみに、Management Studio からの接続は、通常は SMS で現在のユーザーを使用することを除いて、asp.net アプリと同じように機能します。

ここに画像の説明を入力

したがって、これが機能する場合は、アプリからの接続も同様に機能するはずです。残りは、アプリ プールのユーザーに依存します。

于 2013-05-01T09:56:56.210 に答える
0

ローカルで sa としてログインしようとしているという事実は、コードで接続文字列を使用していないことを示唆しています。SQL サーバーの問題ではなく、アプリの問題だと思います。

アプリで、実際に接続文字列の値を使用していることを確認してください。デフォルトのコンストラクターは使用しないでください。例えば

using(SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["myconnectionstring"].ConnectionString)){ /* .. code */ }

いいえ

using(SqlConnection conn = new SqlConnection()){ /* .. code .. */ }

開発用 PC の接続文字列を SQL サーバーを実行しているリモート サーバーの IP アドレスに変更し、アプリケーションをデバッグすると、接続してエラーなしで実行されます。

開発ボックスに認証済みログインが追加されている可能性があり、自動的に「機能」しています。

于 2013-05-01T14:27:53.150 に答える
0

コメント: セキュリティの観点から、Windows ユーザー アカウントで SSPI を使用することをお勧めします。

答え:

ポート 1433 は、デフォルト (名前なし) インスタンスによって SSL に使用されます。名前付きインスタンスに SSL ポートが適切に割り当てられていることを確認してください:
http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx

これらの接続文字列を試してください (「localhost」は使用しないことに注意してください - 大文字と小文字が区別されると思います):

  • 'プロバイダー=SQLOLEDB;データ ソース=COMPUTERNAME\SQLEXPRESS;初期カタログ=テスト;ユーザー ID=COMPUTERNAME\USERNAME; パスワード=PASSWORD;統合セキュリティ=False'

  • 'Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;Initial Catalog=Test;User ID=COMPUTERNAME\USERNAME; パスワード=PASSWORD;統合セキュリティ=False'

  • 'Provider=SQLOLEDB;Data Source=.\SQLEXPRESS;Initial Catalog=Test;User ID=COMPUTERNAME\USERNAME; パスワード=PASSWORD;統合セキュリティ=SSPI'

追加の編集:

クライアントが SQL Server と同じマシンで実行されるたびに、エラーが発生します。クライアントが開発マシンから実行されている場合、エラーはありません。DNS がどの名前もサポートしていないため、マシン名の解決に失敗している可能性があります。

提案: localhost を使用して接続します。ping localhostおよび/またはできることを確認してくださいtelnet localhost 1433。ホスト ファイル (例: C:\Windows\System32\drivers\etc\hosts) に次のエントリがあることを確認します。

  127.0.0.1       localhost

または、次を使用します: (local)\INSTANCENAME

SQLCMD –L を実行して、インストールを一覧表示します (ブラウザーの動作が正しいことを確認します)。

同じサーバー上に古いバージョンの管理ツールが存在しないことを確認してください。たとえば、2008 ツールと 2005 ツールは共存できませんが、2008 ツールは下位互換性があるため、両方を削除して 2008 をクリーン インストールするだけでかまいません。

于 2013-04-30T03:54:58.930 に答える
0

ばかげた質問ですが、ログインの資格情報を確認しましたか? 私はまだこの分野では非常に初心者ですが、データベースのバックアップと復元を通じて(少なくともMS SQL Serverでは)、復元されたユーザーログインが機能しないことがわかりました。

データベースからユーザーを削除して再度追加する必要がありましたが、すべて正常に機能します。稼働していないマシンで別のバージョンのデータベースにアクセスしている可能性はありますか?

于 2013-04-30T23:10:02.103 に答える