Windows: 2014年3月アーカイブ

あれ、通信の方向が逆ですわ。自分が SQL Server のホスト機をする時の設定ですな。今回は自分はクライアントなので、設定するところは別。

一応、何でそんな誤解をしてしまったのかというと、Windows フィアウォールって、設定しても、すぐにはその設定が有効にならんよね?
例えば、ファイアウォールを「無効」にしてて、それを「有効」にしても、しばらくパケットだだ漏れなのよ(^^;
しばらくすると「有効」になって、突然通信ができなくなったりするんだけど。そのため、色々やった中の、どの設定が「効いた」のかわかんなかったのよ・・・ごめん。

実際には、Windows ファイアウォール(firewall.cpl)を実行して、([詳細設定]タブではなく(^^;)「例外」タブを開き、

名前:SQL Server
ポート番号:1433
プロトコル:TCP

名前:SQL Server Browser サービス
ポート番号:1434
プロトコル:UDP

を追加。
ここまでは、(設定する場所間違えてたけど(^^;)前回の設定と一緒。

20140319_firewall.jpg
問題は、SQL Server ホストの名前解決に「NetBios による名前解決」が行われていること。
IP アドレスや、DNS で解決したホスト名ではなく、今回設定を行っているシステムでは俗に言う「コンピュータ名」で SQL Server に接続を行っている。その名前解決に、「ファイルとプリンタの共有」で使われる 137, 138, 139 といったポートが使われるのだ。NetBios だからな。

いや、それはわかっていたのだ。だから、「例外」タブを開いて、ちゃんと「ファイルとプリンタの共有」を例外としてチェックしていたのだ。

しかし、それだけでは足りなかった(^^;

うっかりしてたけど、Windows Virtual PC ってホスト OS とは「ルータ接続」なんだよね。
例えばホスト OS が「192.168.100.21/24」なネットワークでも、ゲスト OS である Windows XP 側は「192.168.131.65/24」とか、全然別のネットワーク(サブネット)に所属してるんだよね。

だから各ポートを「どのネットワークに対して例外とするか」をちゃんと設定してやらないといけないのだ。
なぜなら、「ファイルとプリンタの共有」のためのポートは、そのスコープが「ユーザのネットワーク(サブネット)のみ」になっているのであります。
だから、192.168.131.0/24 というサブネットに属している Windows XP から、192.168.100.0/24 という別のサブネットに属している SQL Server への137ポート行きのパケットは Windows ファイアウォールで止められてしまうのであーる。

ということで、今回の設定のキモは、「137, 138, 139 ポートのスコープの変更を行ってやること」だった(^^;

「サービスの編集」画面で対象のポート(名前)を選択し、「スコープの変更」ボタンを押そう。「ユーザにネットワーク(サブネット)のみ」にチェックが付いているはずだ。これを、「任意のコンピュータ(インターネット上のコンピュータを含む)」に変えよう。

これで、君の Windows XP Mode から無事 SQL Server に接続出来るようになるぞ!!

ま、そういうことやってる人、あんまりいないと思うけど(笑)

あのエントリーに書いたように、他の Windows 7 Professional 機(DELL と IBM の OS プリインストール機)からは接続できているので、例えば富士通独自の設定とかプリインストールソフトとかが邪魔してるんじゃね?という可能性もあり、もう、パソコンを売った業者がどうにかする問題だと思うんだけど、何かその業者が逆ギレして大変という話だったので(^^;、「ほんじゃもう XP Mode の上で動かしたら?」・・・と提案した。

で、試しに、うちの事務所の XP Mode 環境にインストールしてみたら、エラーが出るんで焦っちゃった(^^;

SQL State: '08001'
SQL Server エラー: 53
[Microsoft][SQL Native Client]名前付きパイプのプロバイダ : SQL Server への接続を開けませんでした [53].
接続できませんでした。:

だって。

まあ、これは何となくポートが開いてないだけの問題のような気がしたので、Windows ファイアウォールを無効にしたら問題解決。
でも、まるっきり無効にしてしまうのもアレなので、SQL Server 関係のポートだけ開けておいた。

やり方は、

Windows ファイアウォール(firewall.cpl)を実行して、[詳細設定]タブで「ネットワーク接続設定」の「設定」ボタンを押して、「追加」を。
下記の2つのポートを例外で登録する。

<サービス設定1>
サービスの説明:SQL Server
IP アドレス:SQL Server の IP アドレス
外部ポート番号:1433
内部ポート番号:1433
プロトコル:TCP

<サービス設定2>
サービスの説明:SQL Server Browser Service
IP アドレス:SQL Server の IP アドレス
外部ポート番号:1434
内部ポート番号:1434
プロトコル:UDP

これだけ。

これで、XP Mode からも問題なく SQL Server へ接続できた。
XP Mode のサポートも 4月で終わるけど、ある特定の1つのアプリを動かすだけなので、これで良いんじゃないかと思うけどね。
ややこしい設定変更で Windows 7 Professional で動くようにしても、あの業者ではメンテできんだろうし。

<追記>
すみません。このエントリーに書いていることは間違っています
実際の設定方法は別の「XP Mode で SQL Server に接続する時の F/W の設定」というエントリーに書いています。
色々反省の意味も込めて、このエントリーも残していますので、ググってたどり着いた人はご注意あれ(笑)
お客さんのところで導入された特定のパソコンでだけ、SQL Server エラーが発生して DB に接続できない。
富士通の D551/GX というパソコンで、OS は Windows 7 Professional SP1 32bit版・・・という環境。そこへ、Microsoft SQL Server Native Client を新規インストールしている。

SQL Server 2005 に接続しようとすると、

Microsoft SQL Server ログイン

接続できませんでした。:
SQLState: '08001'
SQL Server エラー: 21
[Microsoft][SQL Native Client]クライアントで暗号化をサポートしていません。
接続できませんでした。:
SQLState: '08001'
SQL Server エラー: 21
[Microsoft][SQL Native Client]クライアントの接続が確立できません。
接続できませんでした。:
SQLState: '08001'
SQL Server エラー: 0
[Microsoft][SQL Native Client]サーバへの接続確立時にエラーが発生しました。接続先が SQL Server 2005 である場合は、規定の設定では SQL Server がリモート接続を許可していないことが原因である可能性があります。

と表示されちゃう。

とりあえず、ファイアウォールや Microsoft Security Essentials のリアルタイム保護なんかも無効にしてみたけど状況変わらず。

元請さんのところの Windows 7 PC では問題なく接続できているし、うちの会社のノートPC(OS は同じく Windows 7 Professional SP1 32bit版)に新規に(上記富士通PCにインストールしたのと同じ) Microsoft SQL Server Native Client をインストールして接続してみるとすんなりつながった。

ということで、

  • アプリケーションや SQL Sever 側の問題ではなく、クライアント側の問題。
  • SQL Server との接続部分なので、アプリケーションとは関係無い。
  • 他の PC では(OS 一緒で)確実に新規セットアップしても接続できているので、このPC固有の問題。

と言えるので、本来であれば PC 導入業者に「うちのアプリは悪くないので、SQL Server に接続出来るようにそちらでどうにかしなさい」と戻して終わりなんだけど・・・
そういうことが出来そうな業者さんじゃなかったからなあ・・・(^^;
まあ、このブログを読んでいる人の大半は Windows を使っていることでしょう。

俺も、仕事パソコンは Windows です。仕事で使ういくつかのツールが Windows でしか動かないので仕方なしに。
例えば秀丸エディタから TextMate2 に乗り換えるとか、遊びならいいけど、仕事ではとても、とても。日本語は常に UTF-8 で・・・というわけにはいかんしね。

ま、そんなこんなで、Windows という糞 OS を使っている人は多いでしょう。
(日本人には「Windows OS が好き!」という非常に残念な人がけっこう多いのも事実ですが・・・(^^;)

Windows の何が一番嫌いか・・・と言うと、「セキュリティを『設定のわかりにくさ』で担保しようとしている」という幼稚なところです。頭の悪いヤツが考えそうな「安全対策」です(笑)

例えば、UNIX や Linux などの UNIX 互換 OS では「テキストファイルによる設定の管理」が一般的なので、どこに設定すればいいかわからん・・・という時は、grep してみれば大概修正箇所が見つかります。
Mac OS X では、各種設定関係の入り口が「システム環境設定」に一元化されているし、各設定メニュー内で設定が完結するので(ひとつの項目の設定箇所はひとつだけ)、何とか設定方法に辿り着けます。

しかーし、Windows は違う。

「Windows だってコントロールパネルから各設定画面に行けるやん」と思うかもしれないけど、それと Mac OS X の「システム環境設定」は似て非なる物です。
何せ、Windows の場合は「この項目でこれを選択した上で、こっちの項目でこれを選択しておかないと、ここでこれは選択できない」みたいな複合的に設定を行わないといけない設計のものが少なからずあるし、諸悪の根源「レジストリ」も存在しているからです。

UNIX や Mac OS X は「ユーザ単位できちんと権限管理が出来ていれば、設定は出来るだけ簡単な方がいい」という思想ですが、Windows は無理矢理 DOS 時代からの(シングルユーザOS時代からの)上位互換に拘ったために、「一般人が何の情報も無しに各種設定を行おうとしても無理なように設定操作を複雑化しておく」ことで「一般ユーザが変な設定をしないようにしている」・・・という、浅ましく、そして愚かしい設計になっています。

つまり、反対に、「Windows に詳しい悪いヤツにとっては何の歯止めにもなっていないし、いざ、悪いヤツに変なことをされた時に、どこにどんな変なことをされたかを一般ユーザが確認することは不可能」と言う、ある意味「セキュリティ的に不味い」設計でもあるんですねえ。

OS として正しい対応は「設定は単純にわかりやすく。但し、一般ユーザの権限ではそれは出来ないようにしておく」・・・ことです。

つまり Windows は糞 OS です。

大半の技術者は「この糞 OS が!」と思いながら Windows 使ってると思いますよ。
ただ、「飯の種」である一般人が Windows を使ってるから、自分も Windows を使わざるを得ないだけでね。
仕方ないのです。

まあ、そんな風に「仕方ないんだ、仕方ないんだ」と自分に言い聞かせつつ Windows を使ってきた俺が何故今日、ついにこのように Windows が糞 OS たる所以の「わけわからん設定にしてるから安全やでえ」という Microsoft 思想を糾弾したかというと・・・

実は Windows 7 Professeional でファイルの共有をしたいんですけど、「ネットワークと共有センター」→「共有の詳細設定」の画面で、「ファイルとプリンターの共有を有効にする」を選択しても、「変更の保存」をしたら元の「無効にする」に設定内容が戻っちゃうんですけど・・・なんで???という現象が、さっきから小一時間、色々なネットワーク設定を確認してるんですけど解消できないんです(^^;

多分、「どっかの設定をまず変更しないとここでこれを有効にできない」という Microsoft 式糞設定方法なんだと思うんですが、まったくわからん(^^;

ホント、Windows 糞すぎる。

識者の方、お助けください・・・(^^;

このアーカイブについて

このページには、2014年3月以降に書かれたブログ記事のうちWindowsカテゴリに属しているものが含まれています。

前のアーカイブはWindows: 2014年2月です。

次のアーカイブはWindows: 2014年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら