Symfoware

Symfowareについての考察blog

SQL Server 2012 ExpressにJava(JDBC)で外部から接続する

SQL Server 2012 ExpressをWindows Server 2008 R2にインストールしました。
SQL Server 2012 Express を Windows 2008 R2 にインストールする


このサーバーに、Ubuntu + Javaで接続してみようと思います。



JDBCドライバの入手とサンプルプログラム



Microsoft JDBC Driver 4.0 for SQL Server
http://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=49c554ca-41a0-472c-b728-75df5789369c

こちらから、sqljdbc_4.0.2206.100_jpn.tar.gzをダウンロードしました。

13_001_20120415180912.png


解凍したフォルダの中に、「sqljdbc4.jar」というファイルがありますので、
これをJavaの実行パスに含めておきます。

接続確認用のプログラムはこんな感じになりました。


  1. package com.fc2.blog68.symfoware;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.Statement;
  5. public class Sample {
  6.     public static void main(String[] args) {
  7.         
  8.         String jdbc_url = "jdbc:sqlserver://192.168.1.5\\SQLEXPRESS;databaseName=sample";
  9.         String user = "sa";
  10.         String password = "Passw0rd";
  11.         
  12.         try {
  13.             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
  14.             Connection con = DriverManager.getConnection(jdbc_url, user, password);
  15.             con.setAutoCommit(true);
  16.             Statement stmt = con.createStatement();
  17.             
  18.             stmt.close();
  19.             con.close();
  20.             
  21.         } catch (Exception e){
  22.             e.printStackTrace();
  23.         }
  24.     }
  25. }









ファイアウォールにUDP:1434許可とSQL Server Browserの起動



まず、ファイアウオールの設定でUDP1434を許可。
SQL Server Browser サービスを開始します。

これを行っていないと、こんなエラーが発生して接続できません。


ホスト 192.168.1.5、名前付きインスタンス sqlexpress への接続が失敗しました。
エラー: "java.net.SocketTimeoutException: Receive timed out"。
サーバーとインスタンスの名前を調べ、ポート 1434 への UDP トラフィックがファイアウォールにブ
ロックされていないことを確認してください。

SQL Server 2005 以降では、SQL Server Browser サービスがホスト上で実行されていることを確認してください。




まずは、UDP:1434を許可するルールをファイアウォールに追加。

13_002_20120415180911.png

※追加手順の詳細はこちらをご参考に。
Windows Server 2008 R2で通信ポートの開放を行う手順(Symfoware外部接続許可)



次に、[スタート]-[Microsoft SQL Server 2012]-[構成ツール]-[SQL Server 構成マネージャー]を選択。
SQL Server 構成マネージャーを起動します。

13_003_20120415180910.png



[SQL Server のサービス]を選択し、[SQL Server Browser]を右クリック。
プロパティを選択します。

13_004_20120415180910.png



[サービス]タブを選択し、[開始モード]を自動に変更してOK。

13_005_20120415180909.png


前の画面に戻るので、もう一度SQL Server Browserを右クリックして、開始を選択します。

13_006_20120415180907.png










TCP/IP接続の有効化



上記設定に引き続き、TCP/IPの有効化を行います。
ここまで設定した状態で、外部から接続しようとすると、こんなエラーになります。


サーバー sqlexpress は、TCP/IP をリッスンするように構成されていません。





SQL Server 構成マネージャーで[SQL Server ネットワークの構成] - [SQLEXPRESSのプロトコル]を選択。
TCP/IPの項目を選択して右クリックし、プロパティを選択します。

13_007_20120415181021.png



プロトコルタブの[有効]の項目が[いいえ]になっていると思います。
ここを[はい]に変更します。

13_008_20120415181020.png









静的ポート指定とファイアウォールへのTCP:1433許可を追加



最後に静的ポート接続への変更と、ファイアウォールへTCP許可ルールの追加を行います。

ここまでの設定しか行っていない状態で接続しようとすると、こんなエラーになります。


ホスト 192.168.1.5、ポート 40245 への TCP/IP 接続が失敗しました。
エラー: "connect timed out。

接続プロパティを調べて、SQL Server のインスタンスがホスト上で実行されていて、
ポートへの TCP/IP 接続が許可されており、そのポートへの TCP 接続が
ファイアウォールにブロックされていないことを確認してください。




先ほどと同じ、TCP/IPの設定画面で、[IPアドレス]タブを選択します。
一番下までスクロールして、IP Allの項目を確認。

TCP動的ポートに数値が指定され、TCPポートは空白になっていると思います。

13_009_20120415181020.png



これをTCPポートに1433、TCP動的ポートは空白に変更します。

13_010_20120415181019.png



設定が終わったら、SQL Server のサービスを再起動しておきます。

13_011_20120415181018.png



最後に、ファイアウォールの設定で、TCP:1433を許可するルールを追加します。

13_012.png



これで外部からの接続を受け付けるようになったかと思います。
長かった・・・





【参考URL】

SQL Server 2008 Express にリモート接続
http://awoni.net/fc/remote/




関連記事

テーマ:データベース - ジャンル:コンピュータ

  1. 2012/04/15(日) 18:12:01|
  2. SQL Server
  3. | トラックバック:0
  4. | コメント:0
<<Debianにapt-getでFirebird 2.5をインストールする | ホーム | UbuntuのEclipseで、コード補完のキーをCtrl + Spaceに変更する>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/920-ece15e12
この記事にトラックバックする(FC2ブログユーザー)