Microsoft SQL Serverに別のコンピューターから接続する

2021年6月28日

Microsoft SQL Server Express(Developer,Evaluation Editionも同様)をインストールしただけの状態では、別のコンピューターからデータベースに接続することができません。これは、セキュリティを強化するため、初期設定では
・SQL ServerのTCP/IPプロトコルが無効になっている
・ファイアウォールが有効になっている(必要なポートが開放されていない)
といったことが原因です。そこで、SQL Serverに接続するシナリオごとに、データベースに接続するために必要な設定を説明します。

【名前付きインスタンスの場合】

まずは、名前付きインスタンスのSQL Server(例:SQLEXPRESS)に接続する場合を考えます(SQL Server Expressのインストール時の既定の設定であるため)。全体を整理すると、下の表1の通りです。表中のシナリオ①~⑧と設定項目A~Eとは、後の説明文中のものと対応しています。

名前付きインスタンスのSQL Serverデータベースに接続するために必要な設定
表1:名前付きインスタンスのSQL Serverデータベースに接続するために必要な設定

アプリケーション開発の初期段階であれば、データベースサーバーと同じコンピューターからしか接続しないこともあるかもしれませんが、リリース後には別のコンピューターからも接続するケースが大多数を占めるでしょうから、
・ポート番号で接続するならA, C, Dの設定をする
・インスタンス名で接続するならA~Eすべての設定をする
ということになります。

【既定のインスタンスの場合】

次に、既定のインスタンスのSQL Server(MSSQLSERVER)に接続する場合ですが、インスタンス名またはポート番号を指定しないので、表2の通り、かなりシンプルになります。リリース後までを含めて考えたとしても、A, Dの設定だけ行えばよい、ということになります。

デフォルトインスタンスのSQL Serverデータベースに接続するために必要な設定
表2:既定のインスタンスのSQL Serverデータベースに接続するために必要な設定

なおこの記事の内容は、Microsoft SQL Server 2014 Express ~ Microsoft SQL Server 2019 Expressで動作確認しました。また画面キャプチャには、Windows 10,Microsoft SQL Server 2019 Expressを使っています。

[toc]

名前付きインスタンスの場合

① 同じコンピューターからコンピューター名とインスタンス名で名前付きインスタンスに接続する場合

シナリオ①に必要な設定

SQL Server Expressをインストールした同じコンピューターから、コンピューター名とインスタンス名で名前付きインスタンスのデータベースに接続する場合、SQL Server Expressをインストールした状態のままで、特に設定の変更は必要ありません。接続に使用されるプロトコルはTCP/IPではなく、共有メモリです。

接続確認

データベースサーバーのコンピューター名が “COMPUTERNAME"、名前付きインスタンスのインスタンス名が “SQLEXPRESS"、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=COMPUTERNAME\SQLEXPRESS

とすれば、接続することができます。

SQL Server Management Studioで別のコンピューターから接続するときも同様です。COMPUTERNAME\SQLEXPRESS で接続することができます。

③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合

シナリオ③に必要な設定

SQL Server Expressをインストールした同じコンピューターから、IPアドレスとインスタンス名で名前付きインスタンスのデータベースに接続する場合、
A. TCP/IPプロトコルを有効にする
B. SQL Server Browserサービスを実行する
と2つの設定変更をする必要があります。

A. TCP/IPプロトコルを有効にする

IPアドレスでデータベースに接続するため、初期設定ではTCP/IPプロトコルが無効になっているものを、有効にします。
後に説明するシナリオ②④⑤⑥⑦⑧で固定ポートの設定をする目的でも、この設定が必要になります。

「Microsoft SQL Server 2019」プログラムグループから「SQL Server 2019 構成マネージャー」を起動し、「SQL Server ネットワークの構成」⇒「SQLEXPRESS(※)のプロトコル」を選択すると、下図のように「TCP/IP」が「無効」になっていることが分かります。

SQL Server 構成マネージャーでTCP/IPプロトコルを有効にする
SQL Server 構成マネージャーでTCP/IPプロトコルを有効にする

ここで、「TCP/IP」の行でマウスを右クリックし、「有効にする」を選択します。

SQL Serverサービスの再起動が要求される

SQL Serverサービスの再起動が要求されるので、「OK」を押下します。

SQL Serverサービスを再起動する
SQL Serverサービスを再起動する

「SQL Server 2019 構成マネージャー」で「SQL Server のサービス」を選択し、「SQL Server (SQLEXPRESS)」の行でマウスを右クリックし、「再起動」を選択します。サービスの再起動が完了すると、TCP/IPプロトコルが有効になります。

B. SQL Server Browserサービスを実行する

データベースにインスタンス名で接続するためには、SQL Server Browserサービスが実行されていることが必要です(同じコンピューターからコンピューター名とインスタンス名で接続する場合を除く)。しかし、SQL Server Expressを既定の設定のままでインストールすると、下の画面のように、SQL Server Browserサービスの「スタートアップの種類」は「無効」に設定されます。このため、SQL Server Browserサービスは実行されません。

SQL Server 2019 セットアップ | サーバーの構成
SQL Server 2019 セットアップ | サーバーの構成

この状態を「SQL Server 2019 構成マネージャー」でも確認してみます。下の画面のように、「SQL Server のサービス」を選択してください。
・「SQL Server Browser」サービスは「停止」の状態
・開始モードは「その他 (ブート、システム、無効または不明)」
になっています。この状態から、SQL Server Browserサービスが常に実行されるよう、設定を変更します。

SQL Server Expressインストール後のSQL Server Browserの状態
SQL Server Expressインストール後のSQL Server Browserの状態

「SQL Server Browser」の行でマウスの右ボタンをクリックし、「プロパティ」を選択します。

SQL Server Browserの開始モードを変更する
SQL Server Browserの開始モードを変更する

続いて、「SQL Server Browserのプロパティ」ウィンドウで「サービス」タブに移動し、「開始モード」を「無効」から「自動」(または「手動」)に変更し、「適用」ボタンを押下します。開始モードは自動または手動に設定しないと、次のステップでサービスを開始することができません。

SQL Server Browserサービスを開始する
SQL Server Browserサービスを開始する

更に、「ログオン」タブに移動し、「開始」ボタンを押下します。この結果、「SQL Server Browser」サービスは下の画面のような状態になります。これで、SQL Server Browserサービスが常に実行されるようになりました。

SQL Server Browserの開始モードを自動にし、サービスを実行した状態
SQL Server Browserの開始モードを自動にし、サービスを実行した状態

接続確認

以上の設定変更で、SQL Server Expressをインストールした同じコンピューターから、IPアドレスとインスタンス名で名前付きインスタンスのデータベースに接続することができるようになりました。

データベースサーバーのIPアドレスが 192.168.1.10、名前付きインスタンスのインスタンス名が “SQLEXPRESS"、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=192.168.1.10\SQLEXPRESS

とすれば、接続することができます。

SQL Server Management Studioで別のコンピューターから接続するときも同様です。192.168.1.10\SQLEXPRESS で接続することができます。

② 同じコンピューターからコンピューター名とポート番号で名前付きインスタンスに接続する場合

④ 同じコンピューターからIPアドレスとポート番号で名前付きインスタンスに接続する場合

シナリオ②,④に必要な設定

SQL Server Expressをインストールした同じコンピューターから、コンピューター名とポート番号で名前付きインスタンスのデータベースに接続する場合(シナリオ②)、または、IPアドレスとポート番号で名前付きインスタンスのデータベースに接続する場合(シナリオ④)、必要な設定は全く同じです。
A. TCP/IPプロトコルを有効にする
C. 固定ポートを割り当てる
という2つの設定をする必要があります。

A. TCP/IPプロトコルを有効にする

上の「③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合」の説明を見てください。

C. 固定ポートを割り当てる

SQL Server Expressを既定の設定のままでインストールすると、下の画面のように、インスタンス名「SQLEXPRESS」の名前付きインスタンスとしてインストールされます。名前付きインスタンスでは、SQL Serverデータベースエンジンは既定で動的ポートでリッスンしますが、そのポート番号は、データベースエンジンが起動する度に変わる可能性があります。
表1のシナリオ②④、⑤~⑧において、実は、動的ポートのままでもデータベースに接続することはできます(ただし⑤~⑧では、後述のDの手順で、そのポートをファイアウォールで開放する必要があります)。しかし、ある日ポートが変わったときに、ユーザーからの「接続できない」との連絡を受けてから、ファイアウォール設定を変更するのでは、運用に堪えません。そこで、初めから固定ポートを割り当てておきます。

SQL Server 2019 のセットアップ | インスタンスの構成
SQL Server 2019 のセットアップ | インスタンスの構成

固定ポートは、IANAで定められている動的・プライベートポート番号(49152~65535)の中から選びます。ポート番号を決めるにあたっては、同じネットワーク内で既に使われていないポートであることを確認してください。ここでは一例として、ポート49152を使うこととして話しを進めます。

「SQL Server 2019 構成マネージャー」を起動し、「SQL Server ネットワークの構成」⇒「SQLEXPRESS のプロトコル」を選択し、「TCP/IP」のプロパティを開いてください。「IP アドレス」タブに移動し、スクロールバーで一番下の「IPAll」のブロックまで移動してください。初期設定では、「TCPポート」は空白に、「TCP 動的ポート」には何等かのポート番号が入っています(画面では 53336 となっていますが、環境によって異なります)。

IP アドレスのIPAllの初期状態
IP アドレスのIPAllの初期状態
固定ポート(例:49152)を設定
固定ポート(例:49152)を設定

ここで、「TCP ポート」に先ほど決めたポート番号を入力し、「適用」ボタンを押下します。

SQL Serverサービスの再起動が要求される

SQL Serverサービスの再起動が要求されるので、「OK」を押下します。

SQL Serverサービスを再起動する
SQL Serverサービスを再起動する

「SQL Server 2019 構成マネージャー」で「SQL Server のサービス」を選択し、「SQL Server (SQLEXPRESS)」の行でマウスを右クリックし、「再起動」を選択します。サービスの再起動が完了すると、SQL Serverサービスが固定ポート 49152 でリッスンされるようになります。

なおここで、「TCP 動的ポート」は初期設定のままで、空白にする必要はありません。また下の画面のように、SQL ServerをインストールしたサーバーのIPアドレス(画面の例では 192.168.1.10)のブロックも、初期設定(「TCP ポート」が空白、「TCP 動的ポート」が0、「有効」がいいえ)のままで変える必要はありません。

SQL ServerのIPアドレス(例:192.168.1.10)のブロックは初期設定のままにする
SQL ServerのIPアドレス(例:192.168.1.10)のブロックは初期設定のままにする

接続確認

以上の設定変更で、SQL Server Expressをインストールした同じコンピューターから、コンピューター名またはIPアドレスと、ポート番号で名前付きインスタンスのデータベースに接続することができるようになりました。

データベースサーバーのコンピューター名が “COMPUTERNAME"、IPアドレスが 192.168.1.10、名前付きインスタンスのインスタンス名が “SQLEXPRESS"、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=COMPUTERNAME,49152
Data Source=192.168.1.10,49152

とすれば、接続することができます。

SQL Server Management Studioで別のコンピューターから接続するときも同様です。COMPUTERNAME,49152 や 192.168.1.10,49152 で接続することができます。

⑥ 別のコンピューターからコンピューター名とポート番号で名前付きインスタンスに接続する場合

⑧ 別のコンピューターからIPアドレスとポート番号で名前付きインスタンスに接続する場合

シナリオ⑥,⑧に必要な設定

SQL Server Expressをインストールしたとは別のコンピューターから、コンピューター名とポート番号で名前付きインスタンスのデータベースに接続する場合(シナリオ⑥)、または、IPアドレスとポート番号で名前付きインスタンスのデータベースに接続する場合(シナリオ⑧)、必要な設定は全く同じです。
A. TCP/IPプロトコルを有効にする
C. 固定ポートを割り当てる
D. ファイアウォールでTCPポートを開く
という3つの設定をする必要があります。

A. TCP/IPプロトコルを有効にする

上の「③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合」の説明を見てください。

C. 固定ポートを割り当てる

上の「④ 同じコンピューターからIPアドレスとポート番号で名前付きインスタンスに接続する場合」の説明を見てください。

D. ファイアウォールでTCPポートを開く

Cの手順で、SQL Serverサービスが固定ポート49152でリッスンするようになりましたが、Windowsファイアウォールの既定の設定では、別のコンピューターからポート49152で接続することはできないので、プロトコルとポートを限定してファイアウォールを開放します。

「コントロールパネル」⇒「システムとセキュリティ」⇒「Windows Defender ファイアウォール」⇒「詳細設定」とクリックします。

「セキュリティが強化された Windows Defender ファイアウォール」画面
「セキュリティが強化された Windows Defender ファイアウォール」画面

「セキュリティが強化された Windows Defender ファイアウォール」ウィンドウで「受信の規則」をクリックし、画面右にある「新しい規則…」をクリックします。

規則の種類を選択
規則の種類を選択

「ポート」を選択して「次へ」ボタンを押下します。

プロトコルおよびポートを設定
プロトコルおよびポートを設定

「特定のローカル ポート」を選択し、上のCの手順で決めた固定ポート番号(例では49152)を入力し、「次へ」ボタンを押下します。

※デフォルトインスタンスのSQL Serverに接続したいとき(表2のシナリオ⑪⑫)は、ポート番号には1433を入力します。ただし、セキュリティを考慮して、ポート番号が既定の1433から変えられている可能性がありますので、ポート番号は確認してください。

接続が条件を満たしたときに実行される操作の設定
接続が条件を満たしたときに実行される操作の設定

ここでは何も設定を変えず、「次へ」ボタンを押下します。

規則が適用されるネットワーク接続のプロファイルを設定
規則が適用されるネットワーク接続のプロファイルを設定

ネットワーク設定のポリシーに応じて、「パブリック」のチェックを外すなどして、「次へ」ボタンを押下します。

規則の名前を設定
規則の名前を設定

受信の規則に自由に名前を付けて、「完了」ボタンを押下します。

接続確認

以上の設定変更で、SQL Server Expressをインストールしたとは別のコンピューターから、コンピューター名またはIPアドレスと、ポート番号で名前付きインスタンスのデータベースに接続することができるようになりました。

データベースサーバーのコンピューター名が “COMPUTERNAME"、IPアドレスが 192.168.1.10、名前付きインスタンスのインスタンス名が “SQLEXPRESS"、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=COMPUTERNAME,49152
Data Source=192.168.1.10,49152

とすれば、接続することができます。接続できることを確認してみましょう。

IPアドレスとポート番号でSQL Serverに接続
別のコンピューターからIPアドレスとポート番号でSQL Serverに接続する

SQL Server Management Studioで別のコンピューターから接続するときも同様です。COMPUTERNAME,49152 や 192.168.1.10,49152 で接続することができます。

⑤ 別のコンピューターからコンピューター名とインスタンス名で名前付きインスタンスに接続する場合

⑦ 別のコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合

シナリオ⑤,⑦に必要な設定

SQL Server Expressをインストールしたとは別のコンピューターから、コンピューター名とインスタンス名で名前付きインスタンスのデータベースに接続する場合(シナリオ⑤)、または、IPアドレスとインスタンス名で名前付きインスタンスのデータベースに接続する場合(シナリオ⑦)、必要な設定は全く同じです。
A. TCP/IPプロトコルを有効にする
B. SQL Server Browserサービスを実行する
C. 固定ポートを割り当てる
D. ファイアウォールでTCPポートを開く
E. ファイアウォールでUDPプロトコルのポート1434番を開く
という5つの設定をする必要があります。

A. TCP/IPプロトコルを有効にする

上の「③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合」の説明を見てください。

B. SQL Server Browserサービスを実行する

上の「③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合」の説明を見てください。

C. 固定ポートを割り当てる

上の「④ 同じコンピューターからIPアドレスとポート番号で名前付きインスタンスに接続する場合」の説明を見てください。

D. ファイアウォールでTCPポートを開く

上の「⑧ 別のコンピューターからIPアドレスとポート番号で名前付きインスタンスに接続する場合」の説明を見てください。

E. ファイアウォールでUDPプロトコルのポート1434番を開く

Bの手順で実行したSQL Server Browserサービスは、UDPのポート1434番を使います。Windowsファイアウォールの既定の設定では、別のコンピューターからUDPのポート1434に接続することはできないので、プロトコルとポートを限定してファイアウォールを開放します。

「セキュリティが強化された Windows Defender ファイアウォール」ウィンドウで「受信の規則」をクリックし、画面右にある「新しい規則…」をクリックします。

規則の種類を選択
規則の種類を選択

「ポート」を選択して「次へ」ボタンを押下します。

プロトコルおよびポートを設定
プロトコルおよびポートを設定

「UDP」と「特定のローカル ポート」を選択し、ポート番号 1434 を入力し、「次へ」ボタンを押下します。ここで選択するのは「TCP」ではなく「UDP」であることに注意してください。またCのステップでTCPのポート番号を選択できたのとは違い、ここでのポート番号は「1434」と決まっています。他のポート番号にすることはできません。

接続が条件を満たしたときに実行される操作の設定
接続が条件を満たしたときに実行される操作の設定

ここでは何も設定を変えず、「次へ」ボタンを押下します。

規則が適用されるネットワーク接続のプロファイルを設定
規則が適用されるネットワーク接続のプロファイルを設定

ネットワーク設定のポリシーに応じて、「パブリック」のチェックを外すなどして、「次へ」ボタンを押下します。

規則の名前を設定
規則の名前を設定

受信の規則に自由に名前を付けて、「完了」ボタンを押下します。これで、別のコンピューターからSQL Server Browserサービスに接続できるようになりました。

接続確認

以上の設定変更で、SQL Server Expressをインストールしたとは別のコンピューターから、コンピューター名またはIPアドレスと、インスタンス名で名前付きインスタンスのデータベースに接続することができるようになりました。

データベースサーバーのコンピューター名が “COMPUTERNAME"、IPアドレスが 192.168.1.10、名前付きインスタンスのインスタンス名が “SQLEXPRESS"、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=COMPUTERNAME\SQLEXPRESS
Data Source=192.168.1.10\SQLEXPRESS

とすれば、接続することができます。接続できることを確認してみましょう。

インスタンス名でSQL Serverに接続
別のコンピューターからIPアドレスとインスタンス名でSQL Serverに接続する

SQL Server Management Studioで別のコンピューターから接続するときも同様です。COMPUTERNAME\SQLEXPRESS や 192.168.1.10\SQLEXPRESS で接続することができます。

既定のインスタンスの場合

⑨ 同じコンピューターからコンピューター名で既定のインスタンスに接続する場合

シナリオ⑨に必要な設定

SQL Server Expressをインストールした同じコンピューターから、コンピューター名で既定のインスタンスのデータベースに接続する場合、SQL Server Expressをインストールした状態のままで、特に設定の変更は必要ありません。接続に使用されるプロトコルはTCP/IPではなく、共有メモリです。

接続確認

データベースサーバーのコンピューター名が “COMPUTERNAME"、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=COMPUTERNAME

とすれば、接続することができます。

SQL Server Management Studioで別のコンピューターから接続するときも同様です。COMPUTERNAME で接続することができます。

⑩ 同じコンピューターからIPアドレスで既定のインスタンスに接続する場合

シナリオ⑩に必要な設定

SQL Server Expressをインストールした同じコンピューターから、IPアドレスで既定のインスタンスのデータベースに接続する場合、
A. TCP/IPプロトコルを有効にする
と、1つだけ設定変更をする必要があります。

A. TCP/IPプロトコルを有効にする

上の「③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合」の説明を見てください。

接続確認

以上の設定変更で、SQL Server Expressをインストールした同じコンピューターから、IPアドレスで既定のインスタンスのデータベースに接続することができるようになりました。

データベースサーバーのIPアドレスが 192.168.1.10、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=192.168.1.10

とすれば、接続することができます。

SQL Server Management Studioで別のコンピューターから接続するときも同様です。192.168.1.10 で接続することができます。

⑪ 別のコンピューターからコンピューター名で既定のインスタンスに接続する場合

⑫ 別のコンピューターからIPアドレスで既定のインスタンスに接続する場合

シナリオ⑪,⑫に必要な設定

SQL Server Expressをインストールしたとは別のコンピューターから、コンピューター名で既定のインスタンスのデータベースに接続する場合(シナリオ⑪)、または、IPアドレスで既定のインスタンスのデータベースに接続する場合(シナリオ⑫)、必要な設定は全く同じです。
A. TCP/IPプロトコルを有効にする
D. ファイアウォールでTCPポートを開く
という2つの設定をする必要があります。

A. TCP/IPプロトコルを有効にする

上の「③ 同じコンピューターからIPアドレスとインスタンス名で名前付きインスタンスに接続する場合」の説明を見てください。

D. ファイアウォールでTCPポートを開く

上の「⑧ 別のコンピューターからIPアドレスとポート番号で名前付きインスタンスに接続する場合」の説明を見てください。

接続確認

以上の設定変更で、SQL Server Expressをインストールしたとは別のコンピューターから、コンピューター名、またはIPアドレスで既定のインスタンスのデータベースに接続することができるようになりました。

データベースサーバーのコンピューター名が “COMPUTERNAME"、IPアドレスが 192.168.1.10、接続に使用しているデータプロバイダーが System.Data.SqlClient のとき、

Data Source=COMPUTERNAME
Data Source=192.168.1.10

とすれば、接続することができます。

SQL Server Management Studioで別のコンピューターから接続するときも同様です。COMPUTERNAME や 192.168.1.10 で接続することができます。