TECHS の SQL Server
ネットワーク設定手順

別紙「読み取り専用ログインの作成手順」の事前確認で「△」が出た場合のみ、この作業が必要です。

対象:情報システム担当者・保守業者さま 所要 15〜30分 SQL Server の再起動を伴います
この作業は TECHS を一時的に停止させます 認証モードの変更と TCP/IP の有効化は、どちらも SQL Server サービスの再起動が必要です。再起動中(通常10〜30秒、環境により数分)は全利用者が TECHS を使えなくなります
必ず業務時間外に、事前告知のうえ実施してください。

背景

新しい生産管理システムが、TECHS のデータを毎晩1回だけ読み取ります。そのために ff_readonly という読み取り専用の SQL ログインを作成しますが、次の2つが揃っていないと、そのログインでは接続できません。

必要な設定揃っていないと
混在モード認証
(SQL Server 認証の有効化)
SQL ログインがそもそも使えません。Windows 認証のみの構成では、パスワード付きログインを作成しても接続が拒否されます。
TCP/IP プロトコル
+ ファイアウォール開放
他のパソコンからネットワーク経由で接続できません。サーバー機の上からは共有メモリ接続で繋がるため、ローカルでの確認だけでは気づけません。
まず現状を確認してください 別紙の手順4に、変更を伴わない確認スクリプトがあります。すでに両方とも有効な環境も多く、その場合この作業は不要です。

1混在モード認証を有効にする

SSMS でサーバーに接続し、左のツリーでサーバー名を右クリック → プロパティを開きます。左側の「セキュリティ」を選び、「SQL Server 認証モードと Windows 認証モード」を選択して OK を押します。

サーバーのプロパティ 全般 セキュリティ メモリ 接続 サーバー認証 Windows 認証モード SQL Server 認証モードと Windows 認証モード ↑ こちらを選択します OK キャンセル
図1:サーバーのプロパティ → セキュリティ(イメージ図)

「変更を有効にするには SQL Server を再起動する必要があります」という確認が出ます。再起動は手順3でまとめて行いますので、ここでは OK を押すだけで結構です。

2TCP/IP を有効にする

SQL Server 構成マネージャーを起動します(スタートボタンから SQL Server 構成マネージャー または SQLServerManager で検索)。

左のツリーで 「SQL Server ネットワークの構成」 を開き、対象インスタンスのプロトコルを選びます。右側の TCP/IP を右クリックして 「有効化」 を選択します。

インスタンス名の確認(ここを間違えやすい) ツリーに表示される名前は、既定インスタンスなら MSSQLSERVER のプロトコル、名前付きインスタンスなら <インスタンス名> のプロトコル(例 TECHS のプロトコル)です。
別紙 手順4の「5_インスタンス名」の値と一致するノードを選んでください。1台に複数の SQL Server が入っている場合、別のインスタンスを設定しても効果がありません。
SQL Server 構成マネージャー SQL Server のサービス SQL Server ネットワークの構成 MSSQLSERVER のプロトコル ※名前付きの場合は 「TECHS のプロトコル」等 プロトコル名 状態 Shared Memory 有効 Named Pipes 無効 TCP/IP 無効 → 有効へ 右クリック →「有効化」
図2:TCP/IP を右クリックして「有効化」(イメージ図)

ポート番号の確認

TCP/IP をダブルクリックし、「IP アドレス」タブを開いて、一番下の IPAll を確認します。

項目意味と対応
TCP ポート ここに 1433 などの固定値が入っていれば、その番号を使います。
TCP 動的ポート 数字が入っている場合、起動のたびにポート番号が変わります。名前付きインスタンスの既定はこちらです。
推奨:「TCP 動的ポート」を空欄にし、「TCP ポート」に 1433(既に他が使用中なら 1435 等の空き番号)を設定して固定してください。同期プログラムの設定が安定します。
ポートを固定しない場合 名前付きインスタンスで動的ポートのままにするなら、SQL Server Browser サービスを「自動」で起動しておき、ファイアウォールで UDP 1434 も開放してください。クライアントはこの経路でポート番号を問い合わせます。
運用上は、ポート固定のほうが事故が少なくおすすめです。

3SQL Server を再起動する

ここで TECHS が停止します 再起動を実行する前に、TECHS の利用者全員がログアウトしていることを確認してください。

構成マネージャーの左ツリーで 「SQL Server のサービス」 を選び、対象の SQL Server (インスタンス名) を右クリックして 「再起動」 を選択します。

手順1(認証モード)と手順2(TCP/IP)の変更は、この1回の再起動でまとめて反映されます

SQL Server Agent も動いている場合 SQL Server 本体を再起動すると Agent も停止することがあります。再起動後、Agent が「実行中」に戻っているか確認してください。

4ファイアウォールを開放する

サーバー機の Windows ファイアウォールで、受信規則を追加します。PowerShell を管理者として実行し、次を貼り付けてください。

# ポートを 1433 以外にした場合は、下の数字を合わせてください
New-NetFirewallRule -DisplayName "SQL Server (TCP 1433)" `
  -Direction Inbound -Protocol TCP -LocalPort 1433 -Action Allow

# 名前付きインスタンスで動的ポートのままにする場合のみ、あわせて実行
New-NetFirewallRule -DisplayName "SQL Server Browser (UDP 1434)" `
  -Direction Inbound -Protocol UDP -LocalPort 1434 -Action Allow
社内ネットワークに限定することを推奨します 上記は全接続元に対して開放します。同期プログラムを動かすパソコンの IP が固定であれば、 -RemoteAddress 192.168.x.y を付けてその機械だけに限定するほうが安全です。

5確認

SSMS で次を実行し、両方とも「○」になることを確認してください。別紙 手順4と同じ内容です。

SELECT CASE SERVERPROPERTY('IsIntegratedSecurityOnly')
         WHEN 1 THEN N'△ まだ Windows認証のみです'
         ELSE N'○ 混在モードになりました' END AS [認証モード];
GO
SELECT CASE WHEN EXISTS (SELECT 1 FROM sys.dm_tcp_listener_states)
         THEN N'○ TCP 有効' ELSE N'△ まだ TCP が無効です' END AS [TCP接続],
       (SELECT TOP 1 CAST(port AS nvarchar(10))
          FROM sys.dm_tcp_listener_states WHERE type_desc = 'TSQL') AS [ポート番号];
GO

両方「○」になったら、別紙「読み取り専用ログインの作成手順」の手順5から作業を再開してください。

元に戻す方法

変更戻し方
認証モードサーバーのプロパティ → セキュリティ で「Windows 認証モード」に戻し、SQL Server を再起動
TCP/IP構成マネージャーで TCP/IP を「無効」に戻し、SQL Server を再起動
ファイアウォールRemove-NetFirewallRule -DisplayName "SQL Server (TCP 1433)"
元に戻す前にご相談ください これらを元に戻すと、新システムへのデータ同期が停止します。移行期間中は有効のままにしていただく必要があります。