Windows2000ServerにSQL-Server2000をいれて、サーバにグローバルIPを振り、外部からアクセスすると接続できました。
もう一台のパソコン(Windows2003Server)にSQL-Server2000をいれ、サーバにグローバルIPを振り、外部からアクセスすると接続できないんです。><
プログラム上ですと、SqlClient.SqlConnectionのOpenで失敗します。EnterPriseManagerで接続するとConnection.Open(Connect())で失敗します。
失敗する方には、ファイアウォール無効、外部ファイアフォールも無効になっています。
この二つのサーバの違いは、
・OSが違う
・サーバホスティング会社が違う
・成功する方は、TCP/IPのプロパティがグローバルIPで設定しています。
失敗する方は、ローカルIPになっています。
※失敗する方のグローバルIPはWebページが外部から閲覧できる為グローバルIPが届いていないということはない
なぜなんでしょうか><
OSによってセキュリティ強化がされていてできないということなんでしょうか?
※緊急を要する為教えてgooでも質問しています。
http://www.windows-world.jp/faq/-/20250.html
推測になりますが失敗する方のネット接続環境はポートがあいているでしょうか?
WEBページの閲覧は問題ないということで80ポートの転送は設定されているのだと推測できますが
SQLが使用するTCP1433(デフォルトは1433のようです)のポートの転送が出来ていない可能性があります。
グローバルIPを振っているルータの設定の見直しが必要かもしれません
結局のところ失敗する方はグローバルIPかローカルIPのどちらが振られているでしょうか?質問からは読み取れませんでした。
どちらでも考えられる理由として、
1.ルーターでフィルタリングされている。
ローカルIPであるなら考えられることとして、
2.ローカルIPだから外部からは接続できない
(Web はルーターでスタティックマスカレード等を行っている)
ぐらいでしょうか。
レスありがとうございます。
サーバのパソコンのネットワーク接続のTCPIPのプロパティには、ローカルIPを振っています。
サーバの外側(ルータ?)側でグローバルIPの接続先を当サーバに指定しているといっていました。
一応外部からポートを使うものとして確認できているのは、
・Web閲覧
・FTP接続
・PC-Anywhere
考えられる理由というのがよくわからなかったんですが、具体的にどうすれば直るという意味なんでしょうか?
>プログラム上ですと、SqlClient.SqlConnectionのOpenで失敗します。
プログラムとは、WEBアプリケーションでしょうか。
その場合、WEBサーバー(アプリケーションサーバー)起動ユーザーからSQLServerへ接続に行きますので、このユーザーに権限があるかどうかを確認してみるとよいと思います。
WEBサーバー(APS)がコンソール起動か、サービス起動かによっても異なります。
コンソール起動ならログインユーザーの権限になる。
サービス起動ならサービスのプロパティを見れば確認できると思います。
>EnterPriseManagerで接続するとConnection.Open(Connect())で失敗します。
APSとEnterPriseManagerを実行したのは同一サーバー上(Windows2003サーバ)でしょうか。
もし前者(プログラム)と後者(EnterPriseManager)を実行している場所が異なるのであれば切り分けにはならないと思います。
同一であればEnterPriseManagerから繋がらないということは単純にSQLServerの設定が上手くいっていないと考えられます。
URLはダミーです。
http://q.hatena.ne.jp/1158630932
以上取り急ぎ。
レスありがとうございます。
認証に関しては、SQL-Server認証です。
一つ書き忘れていました。
できない方は、2台サーバでLANを組んでいます。
2台ともグローバルIPが振られています。
■同一サーバの動作
同一サーバ内でのEnterPriseManagerや、同一サーバ内のWebコンテンツからのデータベースアクセスはできます!
■LAN内の別サーバからの動作
EnterPriseMangerで接続できます。
WebサーバからLANを通してのデータベース接続もできます。
■外部PCからの接続
EnterPriseMangerもWebプログラムからも接続できません。
LAN内の環境では接続できるので、外部からのアクセスブロックがかかっていると思うのですが、穂スティング会社はブロックしていないというのでOSの問題なのかなぁと思っているんですが。。
プログラムはサーバサイドで実行されないようですね。
であれば、
外部PCでプログラムを実行して、netstatしてみてください。
ESTABLISHEDとなれば正常ですが、ならないと思います。
> netstat -an
TCP 外部PC:1404 サーバ:1433 ESTABLISHED
(外部PCのポートは任意というかランダム)
その場合は1の方の回答になりますね。
TCP1433を空けてもらうか。
ホスティング会社が対応してくれないならポートを変更するかになりますね。
URLはダミーです。
http://q.hatena.ne.jp/1158630932
がんばってください。
レスありがとうございます。
>外部PCでプログラムを実行して、netstatしてみてください。
ごめんなさいこの意味がわかりません。
データベースに接続できないサーバで
netsat -an
を実行してみました。
TCP
Local Addres 0.0.0.0:1433
Foreign Address 0.0.0.0:0
State LISTENING
になっていました。
ホスティング会社に電話してすべて開放状態にしてもらったんですが、やっぱりできない><
あと、ルータでマスカレード設定は行っていなくて、NATというのでグローバルIPをローカルIPに変換しているだけだといっていました
該当問題でうっかりミスしやすい(初歩的な)ことのひとつが
認証モードの話なのですが、これは混合モードに設定されていますか?
(上の方でSQL-Server認証とはっきり書かれているので問題ないとは
思いますが・・・)
あとは、ODBC接続とADO接続のテストWEBページでも作成して、
SQLServer認証で両方ともきちんと動くのかなど、ポート関連以外で
疑われるところもチェックしてみると絞られると思います。
URLはダミーです。
レスありがとうございます。
この辺の認証に関しては、
ローカルプログラムや、Lan内の別サーバからのSQL-Server認証で認証できることが確認できています。
http://support.microsoft.com/kb/884012/ja
上記記事かも。
英語記事を機械翻訳で日本語化したらしいので読みにくい記事ですが、SQLServer2000をSP3以上にアップグレードしろ、ということらしいです。
レスありがとうございます。
下記サイトで、
SQL2000-KB884525-SP4-x86-JPN.EXE
というのをダウンロードして実行してみました。(あってますよね・・?)
しかし、
EnterPriseManagerでバージョン情報をみてみると、
Microsoft(R) Management Console 3.0
バージョン5.2 R2 (ビルド 3790.srv03_sp1_qfe.050504-1733:Service Pack 1)
となっている・・
SQL ServerグループのLOCALのプロパティをみると
オペレーティングシステム:Microsoft WindowsNT-5.2(3790)
製品バージョン 8.00.760(SP3)
となっている。。
あれ、SP4いれたのにSP4とは何処にも書いていない?ダウンロードしたのが間違ってるんでしょうか?
再起動してもかわりませんでした・・><
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&a...
回答の6から連投です。
SP4をダウンロードして、インストールされたそうですが、、、
その後のセットアップは実行されましたか?
SQL2000-KB884525-SP4-x86-JPN.EXE
の実行は、圧縮ファイルの展開のみです
(もしかしたら、、インストール完了と表示されたかも。まぎらわしい)
デフォルトではC:\SQL2KSP4\あたりにsetup.exe(またはbat)があったと思うので、そいつを実行してください。
(実行済みだったらごめんなさい)
URLはダミーでhttp://q.hatena.ne.jp/1158630932
レスありがとうございます。
解凍だとは思いませんでした。
バッチを実行してSP4になりました
製品バージョン 8.00.2039(SP4)
しかしながら、外部から接続できない・・
なんなんだこれはーー><
ホスティング会社のポンミスだったらキレそうだのぉ
再々度回答。
まだダメでしたか、、残念。
とりあえず、こんな記事見つけてきました。お試しください。
http://157.120.140.204/bbs/bbs_disp.aspx?forum_id=1¤t_...
SP3を先にいれろ、らしいです。SP3の配布は終了しているのでSP3aを使用することになります。
----
あと、
Windows2003のセキュリティポリシーとSQLServerの関係も気になります。
具体的には、「リモート接続では空パスワードが許可されない」などの設定があります。
http://technet2.microsoft.com/WindowsServer/ja/Library/45acdbfd-...
とりあえず、パスワードを付けたアカウントを作って、ログインしてみてください。
----
これで限界かも。
レスありがとうございます。
sp3は、インストール時に先にいれたので問題ないです。
リモート接続はパスワードいれて接続しているんですよね・・
■■■■続報■■■■
ホスティング会社がWindows2000serverでSQL-Server接続のテスト環境を設置しました。
⇒結果失敗
つ、つまり、OSの問題ではなくホスティング会社の問題ではないか・・・><
ホスティング会社が提示した今のサーバ環境は以下です。
2台のサーバが、SonicWall Pro 4060のDMZの下に配置してあり、それぞれローカルIPが振られています。インターネットからはLinkProofを通しえてNATがかかります。
この環境がいけないようですね。Windows2000Serverでもできないとするとサーバ外部でブロックされているということですよね。
ホスティング会社は引き続き調査を行うとのことですが、速く解決してくれー><
皆様、様々な解決策ありがとうございました。
上記環境の解決策がわかる方がいましたらご意見ください。
もう少し上記環境での解決策を募集したいと思います。
レスありがとうございます。
一応ホスティング会社に確認をとったのですが、ポートの制限はかけていないといっていました。
ルータの方の設定の見直しを確認してみます。