外部マシンからSQL Serverにリモート接続出来るようにスクリプトを書いてみた。
やることは以下。
- SQL ServerのTCP/IPを有効にする
- SQL Serverのポートをデフォルトの1433にする
- DBサーバーのファイアウォールを編集してSQL Serverで使用するポートを開放する
SQL ServerのTCP/IPを有効にする
SQL Server PowerShellモジュールを使ってSQL Serverの設定を編集する。
Alter()を呼び出して、SQL Serverを再起動しないと変更が反映されないので注意。
$dBServerName = "NEW"
$dBInstanceName = "TEST"
$sQLServerServiceName = "SQL Server (TEST)"
Import-Module 'sqlps'
$uri = "ManagedComputer[@Name='{0}']/ ServerInstance[@Name='{1}']/ServerProtocol[@Name='Tcp']" -f $dBServerName, $dBInstanceName
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'
# TCP/IPを有効にする
$tcp = $wmi.GetSmoObject($uri)
$tcp.IsEnabled = $true
$tcp.Alter()
# SQL Serverを再起動する
net stop $sQLServerServiceName /y
net start $sQLServerServiceName
SQL Serverのポートをデフォルトの1433にする
「SQL ServerのTCP/IPを有効にする」とほぼ同様。
こちらもAlter()を呼び出して、SQL Serverを再起動しないと変更が反映されないので注意。
$dBServerName = "NEW"
$dBInstanceName = "TEST"
$port = "1433"
$sQLServerServiceName = "SQL Server (TEST)"
Import-Module 'sqlps'
$uri = "ManagedComputer[@Name='{0}']/ ServerInstance[@Name='{1}']/ServerProtocol[@Name='Tcp']" -f $dBServerName, $dBInstanceName
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'
# ポートを1433に設定する
$tcp = $wmi.GetSmoObject($uri)
$wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value = $port
$tcp.Alter()
# SQL Serverを再起動する
net stop $sQLServerServiceName /y
net start $sQLServerServiceName
DBサーバーのファイアウォールを編集してSQL Serverで使用するポートを開放する
New-NetFirewallRuleでファイアウォールにルールを追加するだけ。
ちなみに「`」でコマンドを途中で改行することが出来る。
New-NetFirewallRule `
-Name "SQLServer(1433)" `
-DisplayName "SQLServer(1433)" `
-Description "SQL Serverで使用するポート(1433)を開放する。" `
-Enabled True `
-Profile Domain,Private `
-Direction Inbound `
-Action Allow `
-Program Any `
-LocalAddress Any `
-RemoteAddress Any `
-Protocol TCP `
-LocalPort 1433
まとめ
スクリプト書くのたのしくなってきた。
$dBServerName = "NEW"
$dBInstanceName = "TEST"
$port = "1433"
$sQLServerServiceName = "SQL Server (TEST)"
Import-Module 'sqlps'
$uri = "ManagedComputer[@Name='{0}']/ ServerInstance[@Name='{1}']/ServerProtocol[@Name='Tcp']" -f $dBServerName, $dBInstanceName
$wmi = New-Object 'Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer'
# TCP/IPを有効にする
$tcp = $wmi.GetSmoObject($uri)
$tcp.IsEnabled = $true
$tcp.Alter()
# ポートを1433に設定する
$wmi.GetSmoObject($uri + "/IPAddress[@Name='IPAll']").IPAddressProperties[1].Value = $port
$tcp.Alter()
# SQL Serverを再起動する
net stop $sQLServerServiceName /y
net start $sQLServerServiceName
# 1433開放!
New-NetFirewallRule `
-Name "SQLServer(1433)" `
-DisplayName "SQLServer(1433)" `
-Description "SQL Serverで使用するポート(1433)を開放する。" `
-Enabled True `
-Profile Domain,Private `
-Direction Inbound `
-Action Allow `
-Program Any `
-LocalAddress Any `
-RemoteAddress Any `
-Protocol TCP `
-LocalPort 1433