スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサードリンク

Windows Firewall to Allow SQL Server Access(netsh advfirewall)

【開発者、ネットワーク設定者向け】

カスケード接続したハブ環境下のWindows7端末に、
SQL Server 2008 R2 Express Edition をインストールしてみたのですが、
Windowsファイアウォールの例外設定に、
TCP1433、UDP1434の受信の規則設定を行っても接続できないことが判明。

結局は、名前付きインスタンスを利用するため、
動的ポートを使用しますので、
sqlservr.exe と sqlbrowser.exeの受信の規則設定で、
ちょっとした工夫が必要みたいでした。

なお、SQL Server 2008 R2 のインストールパスは、
C:\Program Files\Microsoft SQL Server 2008に変えています。

BATファイルで実行する場合


BATファイルで処理するなら以下の通りです。

netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,public
netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain
netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,domain
netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain

netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private,public
netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain
netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private
netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain


Delphiで作ったプログラムで実行する場合


自作のインストーラーでSQL Server のインストールやら、
データベース構築などを行っていたので、
Delphiで作成したプログラムのサンプルも作ってみました。

ShellExecuteでコマンドプロンプトを起動して、
クリップボード経由で、netsh advfirewallコマンドを発行しています。
(Mr.XRAYさんの490_コマンドプロンプトを ShellExecute 関数で起動を参考にさせていただきました。)
注意すべきなのは、Sleepで一定間隔を空けないと駄目な点です。


では、Delphiのソースは以下の通り。
(半角スペースを全角スペースに変更しています。)

//=====================================================================================
unit FM_FireWallSetting;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, StdCtrls, Clipbrd;

type
  TForm7 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form7: TForm7;

implementation

{$R *.dfm}

procedure TForm7.Button1Click(Sender: TObject);
const
  ID_Paste = $FFF1;
var
  LFile      : String;
  LParams    : String;
  LCmdWnd    : HWND;
  LText      : String;
  LCmdText   : String;
  LCmdTextF  : array [1..8] Of String;
  i          : Integer;
begin
  LFile := 'cmd.exe';
  LParams  := '/K';
  ShellExecute(0, '', PChar(LFile), PChar(LParams), nil, SW_SHOW);

  LCmdTextF[1] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,public';
  LCmdTextF[2] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain';
  LCmdTextF[3] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=private,domain';
  LCmdTextF[4] := 'netsh advfirewall firewall add rule name="SQL Browser Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe" enable=yes profile=domain';

  LCmdTextF[5] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private,public';
  LCmdTextF[6] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=tcp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain';
  LCmdTextF[7] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=private';
  LCmdTextF[8] := 'netsh advfirewall firewall add rule name="SQL Server Windows NT" dir=in action=allow protocol=udp program="C:\Program Files\Microsoft SQL Server 2008\MSSQL10_50.SQLEXPRESS2008\MSSQL\Binn\sqlservr.exe" enable=yes profile=domain';

  Sleep(300);

  LCmdWnd := FindWindow('ConsoleWindowClass', nil);
  if LCmdWnd = 0 then begin
    MessageBox(Handle, 'コマンドプロンプトが起動していません', '情報', MB_ICONINFORMATION);
    exit;
  end;

  for i := 1 to 8 do
  begin
    LCmdText :=LCmdTextF[i] + sLineBreak;
    Clipboard.AsText := LCmdText;
    SendMessage(LCmdWnd, WM_COMMAND, ID_Paste, 0);
    Application.ProcessMessages;
    Sleep(100);
  end;

  SendMessage(LCmdWnd, WM_CLOSE, 0, 0);
  Application.ProcessMessages;
end;

end.
//=====================================================================================


まとめ


ちょっとした設定なんですが、
これひとつ正しくできていないだけで、
クライアントPCからの接続ができなくなるので、
もし、客先であったなら、冷や汗ものです。

BATファイルでもいいし、EXEファイルでもいいので、
こういった知識が非常に役立ちます。

BATファイル化して、
USBメモリに保存しておくのもお勧めです。

スポンサードリンク

テーマ:プログラミング - ジャンル:コンピュータ

コメントの投稿

非公開コメント

スポンサードリンク
最新記事
カテゴリ
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

月別アーカイブ
激安特価情報
Amazonタイムセール
楽天市場タイムセール
Yahoo出店記念セール
NTT-X Store 激安特価!
激安家電のGENO PLUS
コストコ・イケアの通販
つけたまま眠れるファンデ
家電品を安値で買うならこちら!
ケーズデンキ
ベルメゾンアウトレット
激安ブランドコスメ 週末セール
モバコレ SALE
au Brand Garden
アウトレットモール BRANDELI
ブックオフオンラインのオトナ買い
ビッグカメラ◆週末特別セール
ソフマップ 中古・アウトレット
【宿代全額ポイントバック】夏休み早期予約キャンペーン
ネットプライス 送料294円
イオンモールオンライン
EDIONネットショップ
最新コメント
天気予報

-天気予報コム- -FC2-
カウンター
検索フォーム
リンクに表示されるテキスト
ランキング参加中
クリックしていただけると、 こまつもとは大変嬉しいです。



人気ブログランキングへ

ランキングに参加しています。 クリックのご協力をお願い致します。 いつもありがとうございます。 にほんブログ村 通販ブログへ
ブログランキング・にほんブログ村へ
にほんブログ村 IT技術ブログ ソフトウェアへ
にほんブログ村 ゲームブログへ
にほんブログ村 IT技術ブログへ



人気ブログをblogramで分析

趣味・個人

ランキング

リンクリックブログランキング

私を登録 by BlogPeople



RSSリンクの表示
リンク
QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。