SQL Server 2014 Express に外部から接続するための設定

SQL Server に外部から接続するためにいつも調べてしまうので書いておきます。

SQL Server 構成マネージャー

[SQL Server ネットワークの構成]-[SQLEXPRESS のプロトコル]の[TCP/IP]を有効にします。 コマンドでするには次のようにします。 Windows PowerShell を使っています。 [管理者として開く]から Windows PowerShell を開きます。

#[reflection.assembly][reflection.assembly] に変更して実行します。 Markdown のコードブロックの中でリンクの記法になってしまうようで、うまくエスケープできませんでした・・

# Load the assemblies
#[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
#[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")

$smo = 'Microsoft.SqlServer.Management.Smo.'
$wmi = new-object ($smo + 'Wmi.ManagedComputer').

# List the object properties, including the instance names.
#$Wmi

# Enable the TCP protocol on the default instance.
$uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value + "']/ServerInstance[@Name='SQLEXPRESS']/ServerProtocol[@Name='Tcp']"
$Tcp = $wmi.GetSmoObject($uri)
$Tcp.IsEnabled = $true
$Tcp.Alter()
$Tcp

Windows ファイアウォール

Windows ファイアウォールから SQL Server の接続に使う TCP/IP のポートを許可します。 ここでは細かいことはせずに Windows ファイアウォールを無効にしています。 コマンドプロンプトか Windows PowerShell のウィンドウから次のコマンドを入力します。 こちらも[管理者として開く]必要があります。

netsh advfirewall set allprofiles state off

個別のポートを許可する設定にする場合は次のページを参考に設定すると良いと思います。

[SQL Server のアクセスを許可するための Windows ファイアウォールの構成](https://msdn.microsoft.com/ja-jp/library/cc646023(v=sql.120).aspx)

SQL Server Management Studio(SSMS) から接続する場合

SSMS から接続する場合は SQL Server Browser のサービスを起動します。

net start "SQL Server Browser"

SSMS の[サーバーへの接続]のところからサーバーのインスタンスが探せるようになっているはずです。

サービスが[無効]になっている場合は最初に[自動]か[手動]に変更しておきます。

設定を戻す場合のコマンド

設定を戻す場合のコマンドも書いておきます。

SQL Server 構成マネージャー

$Tcp.IsEnabled = $false のところが変わっているだけです。

#[reflection.assembly][reflection.assembly] に変更して実行します。 うまくエスケープできませんでした・・

# Load the assemblies
#[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
#[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")

$smo = 'Microsoft.SqlServer.Management.Smo.'
$wmi = new-object ($smo + 'Wmi.ManagedComputer').

# List the object properties, including the instance names.
#$Wmi

# Enable the TCP protocol on the default instance.
$uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value + "']/ServerInstance[@Name='SQLEXPRESS']/ServerProtocol[@Name='Tcp']"
$Tcp = $wmi.GetSmoObject($uri)
$Tcp.IsEnabled = $false
$Tcp.Alter()
$Tcp

Windows ファイアウォール

state on のところが変わっているだけです。

netsh advfirewall set allprofiles state on

参考