グローバルIPを指定してSQL Serverに接続するには
質問
2011年8月30日火曜日 2:40
グローバルIPをもつサーバーにSQL ServerとManagement Studioをインストールしました。
混合モードでsaでManagement Studioで接続しました。
次にこのサーバー自身がもつグルーバルアドレスで接続を試みます。
すると失敗します。次の投稿に進みます。
すべての返信 (12)
2011年8月30日火曜日 4:00 ✅回答済み
インスタンス名が SQL Express なので Express edition だと思いますが、tcp/ip のプロパティ値は標準ではない状態ですね?
単純に外部から tcp/ip でデフォルトインスタンスとして自由に接続したいのであれば、IP1 ~ IPn の「アクティブ」をすべて「いいえ」にして、IPALL のみ 1433 の固定ポートとすればよいかと思います。
2011年8月30日火曜日 4:57 ✅回答済み
localhost\SQLExpress
で接続できます。
127.0.0.1\SQLExpress
では接続できません。
TCP/IPが有効になっているのに、127.0.0.1\SQLExpress で接続できないのは、おそらくSQL Browserが起動していないからだと思われます.
名前付きインスタンスの場合(SQLExpressも名前付きインスタンス)、ポートは固定されず、起動の度にポートが変わります。これに対応して現在のポートに正しく接続させる役目を担っているのがSQL Browserです。
ファイアウォールの関係でポートを固定されたいのであれば、K.Takaokaさんが書かれている方法で固定します。この場合、SQL Browserは必要ありません。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
2011年8月30日火曜日 2:44
SQL Server Configuration Managerでは
このようにTCP接続が有効になっています。
また全く同じ設定でLAN内の環境でやりましたがプライベートアドレス192.168.0.101では接続できました。
2011年8月30日火曜日 2:52
http://www.cman.jp/network/support/port.html
によりポートチェックしてみました。
ポート80にはアクセスできました。
SQL Server標準の1433のポートを開け実行してみましたが
ホスト:x.x.x.x ポート:1433 に到達できませんでした。
ポートが原因かもしれないと思います。グローバルIPで接続する方法をご指南いただきたいです。
2011年8月30日火曜日 3:35
TCP
TCP/IPのプロパティ設定です
この状態ですが
localhost\SQLExpress
で接続できます。
127.0.0.1\SQLExpress
では接続できません。
2011年8月30日火曜日 3:59
とりあえず赤字でIPアドレスが出ていますが大丈夫ですか?
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
2011年8月30日火曜日 5:08
普通にMSDNの
データベース エンジン アクセスを有効にするための Windows ファイアウォールの構成方法
特定の TCP ポートで受信待ちするようにサーバーを構成する方法 (SQL Server Configuration Manager)
は読んでいますか?
Windowsファイアウォールの設定は即時反映されますが、SQL Serverの設定はリンク先にもありますが、設定反映のために再起動が必要です。
ところで、グローバルIPアドレスで世界中からSQL Server接続を受け付ける必要があるのですか? とりあえず24時間攻撃を受け続けますが大丈夫ですか?
あとはIPアドレスから会社名がわかってしまいますが大丈夫ですか?
2011年8月30日火曜日 6:12
よろしくなかったです。ありがとうございました。
あと毎時ではないですが世界中から受け付ける必要があります。
予算と納期と仕様でこのようになっています。
2011年8月30日火曜日 6:19
ありがとうございました。IPAllでないところを1433にしていたからできませんでした。
2011年8月30日火曜日 7:27
まずは外部からManagement studioで接続することはできました。
サーバー上でサーバー自身のSQL Serverに接続するときはx.x.x.x\SQLExpress
で接続できます。
外部からだとx.x.x.xで接続でき、x.x.x.x\SQLExpressだと
タイトル: サーバーへの接続
x.x.x.x\SQLExpress に接続できません。
ADDITIONAL INFORMATION:
SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL ネットワーク インターフェイス, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました) (Microsoft SQL Server、エラー: -1)
ヘルプを表示するには http://go.microsoft.com/fwlink?ProdName=Microsoft;SQL;Server&EvtSrc=MSSQLServer&EvtID=-1&LinkId=20476 をクリック
BUTTONS:
OK
と出てしまいます。インスタンス名は指定できないのでしょうか、
最終的な目標はAccessDataProject(ADP)で接続することです。
Management Studioのようにインスタンスを指定せずに接続先をx.x.x.xとしていすると
Microsoft データ リンク エラー
プロバイダーの初期化中にエラーが発生したため、接続のテストに失敗しました。[DBNETLIB][ConnectionOpen (Invalid Instance()).]接続が正しくありません。
OK
と出てしまうからこれを解決したいのです。
とりあえずSQL Server Browserについて見なおしてみたいと思います。
2011年8月30日火曜日 7:42
うまくいきました。
trapemiyaさんの話に聞いたSQL Server Browserのサービスが無効になっていて、有効にしたらインスタンス名が指定できるようになりました。
ありがとうございました。
2011年8月30日火曜日 9:03
蛇足ですが、、、
特に 1433 のままでも問題ないのですが、ブラウザサービスを使用する場合は動的ポートにしておくことができます。
一般的に、ポート番号を指定してのサービスに接続する場合にはインスタンス名ではなくポート番号を指定して接続します。この場合は、"x.x.x.x,1433" という接続文字列を指定することになります。
同様に、名前を指定してのサービスに接続する場合には、ブラウザサービスを経由します。この場合、ポート番号は何番でもかまいません。(ブラウザサービスが、何番のポートに接続すればよいか教えてくれます。このため、1433 に固定せず動的ポートを利用できます。) 名前を指定してインスタンスに接続する場合は、"x.x.x.x\name" と指定することになります。
どちらにも「既定のポート」「既定のインスタンス」があり、接続文字列として "x.x.x.x" とサーバだけを指定すると、それぞれ "x.x.x.x,1433" と "x.x.x.x\SQLSERVER" が指定されたとみなされます。