0

私の問題は、SQL Server 2012データベースにリモートで接続する接続文字列をC#で作成しようとしていることです。SQL Serverをホストしているマシンが移動先のポート番号を必要としない場合、これを正常に実行できます。IPを少し再ルーティングしたので、SQL ServerをホストしているマシンへのIPはXXX.XXX.XXX.XXX:16500であり、SQLServerは引き続きデフォルトのポート1433でリッスンしています。

SQLServerインスタンスが使用しているポート番号をそのように指定できることを理解しています。

data source=XXX.XXX.XXX.XXX,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

私たちの問題は、私たちのリモートマシンが単なるIPではないということです。IPとポートです。

XXX.XXX.XXX.XXX:16500手動で目的のPCに移動し、ポート番号を無視すると別のマシンに移動します。私たちはこのようなことを成し遂げようとしています。

data source=XXX.XXX.XXX.XXX:16500,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

私はこれを行う方法を私の人生のために見つけることができません。データソースをリモートIP:PORTに設定し、SQL Serverがリッスンするポートを設定したい(1433がデフォルトであることは理解していますが、場合によっては変更する必要があるため、変更する必要があります)将来のためにそこに)

私が試してみました;

data source=XXX.XXX.XXX.XXX:16500,1433;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

エラー:

SQLServerへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました...

data source=XXX.XXX.XXX.XXX:16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

エラー:

SQLServerへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました...

data source=XXX.XXX.XXX.XXX,16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;");

エラー:

サーバーとの接続は正常に確立されましたが、ログイン前のハンドシェイク中にエラーが発生しました。(プロバイダー:TCPプロバイダー、エラー:0-既存の接続がリモートホストによって強制的に閉じられました。)

ここでは、SQL Serverにポート16500を使用しようとして、間違ったサーバーに接続しているようですが、これは正しくありません。

誰かが光を当ててくれませんか、これは可能ですか?

4

3 に答える 3

2

これは、お持ちのIPアドレスが実際にはNATデバイスであり、接続に使用されたポート上の別のマシンベースにトラフィックを転送しているように聞こえます。この場合は、NAT管理者に、SQLServerマシンのポート1433に転送されるNAT上にパブリックポートを作成してもらう必要があります。ポート転送は常に単一のポートにのみ転送されるため、新しい転送ルールを設定しないと、実行しようとしていたことは機能しません。

于 2012-10-24T21:49:08.773 に答える
1

あなたが言っていることは、ネットワークの観点からは意味がありません。定義上、ホストは、IP:ポートの組み合わせではなく、アドレス指定された1つ以上のIPに関連付けられています。

私はセバスチャンに同意します。あなたのネットワーク管理者がNATまたは他のタイプのルーティング/ファイアウォールを設定して、ルーター/ファイアウォール/ NATのXXX.XXX.XXX.XXX:16500に(TCPで?)接続すると転送されるように聞こえますSQLサーバーマシンの一部のポートでリッスンしている一部のアプリケーション(おそらくリモートデスクトップアプリケーション)への接続。

Sebastianが提案したように構成するには、SQLサーバーへのポート転送を要求する必要があります。別のオプションは、すでに転送されたポート(または別のポート)でリッスンするようにSSHサーバーをセットアップすることです。そうすれば、ファイアウォール構成を変更せずに、必要なアプリケーションへの安全なトンネルをセットアップできます。

複数のアプリケーションの複数のポートでNAT/ルーター/ファイアウォールによって転送を実行したり、SHHを使用して単一のポートでトンネリングしたりすることには、それぞれ長所と短所があります。ネットワーク管理者に相談して、どちらがあなたのケースに適しているかを判断できるはずです。

于 2012-10-24T22:28:14.757 に答える
0

MS SQL ServerはXXX.XXX.XXX.XXX:16500であり、MSSQLは引き続きデフォルトのポート1433でリッスンしています。

ええと、いいえ。NATデバイスはXXX.XXX.XXX.XXXにあり、ポート16500をSQLServerに転送しています。SQLサーバーのIPアドレスは、NATがユーザーとその間にあるため、アプリケーションから完全にアクセスできないため、わかりません。また、SQLサーバーがインストールされているポート番号もわかりません。これがNATの仕事です。

したがって、使用する適切な接続文字列は次のとおりです。

data source=XXX.XXX.XXX.XXX,16500;Network Library=DBMSSOCN;initial catalog=Order;User ID=test1;Password=test1;";

ここでエラーが発生したとのことですが。このエラーは、正常に接続したが、他の問題が発生していることを示しています。これを引き起こす可能性のあるものは次のとおりです。

  • SQLサーバーが接続制限に達しました(ほとんどの場合)
  • SQLサーバーは暗号化された接続を必要としていますが、それはあなたが確立しようとしているものではありません
  • 不正なSSL証明書が使用されています
  • SQLサーバーは、使用していないWindows認証のみを想定しています。
  • SQLServerでTCP/IP接続が有効になっていません
  • ユーザーとNAT間、またはNATとSQLサーバー間のデータ圧縮。
  • SQLサーバーに到達する前に接続情報をねじ込むNAT(NATが正しく構成されていない場合は確かに可能です)。
  • SynAttackProtectはどこかでオンになっていて、あなたはそれがあなたを追い出した非常に多くのことを試みました。
  • NATとSQLサーバーの間には、SQLServerが接続を開始するのに十分な遅延があります。
  • そしてもっとたくさん...

基本的に、ここにはネットワークの問題があり、ポート番号が原因ではありません。何が起こっているかを確認するには、ネットワーク管理者を関与させる必要があります。

問題は、接続数を人為的に制限するためのSQLサーバーの構成の問題か、DBサーバーに適切に転送される前にNATが要求をジャックしていることのどちらかです。

次のいくつかを参照してください:http: //betav.com/blog/billva/2008/11/solution-forcibly-closed-sql-s.html http://arshpreet9.wordpress.com/category/sql-errorsbug-fixes //

于 2012-10-24T23:02:09.283 に答える