別紙「読み取り専用ログインの作成手順」の事前確認で「△」が出た場合のみ、この作業が必要です。
新しい生産管理システムが、TECHS のデータを毎晩1回だけ読み取ります。そのために ff_readonly という読み取り専用の SQL ログインを作成しますが、次の2つが揃っていないと、そのログインでは接続できません。
| 必要な設定 | 揃っていないと |
|---|---|
| 混在モード認証 (SQL Server 認証の有効化) |
SQL ログインがそもそも使えません。Windows 認証のみの構成では、パスワード付きログインを作成しても接続が拒否されます。 |
| TCP/IP プロトコル + ファイアウォール開放 |
他のパソコンからネットワーク経由で接続できません。サーバー機の上からは共有メモリ接続で繋がるため、ローカルでの確認だけでは気づけません。 |
SSMS でサーバーに接続し、左のツリーでサーバー名を右クリック → プロパティを開きます。左側の「セキュリティ」を選び、「SQL Server 認証モードと Windows 認証モード」を選択して OK を押します。
「変更を有効にするには SQL Server を再起動する必要があります」という確認が出ます。再起動は手順3でまとめて行いますので、ここでは OK を押すだけで結構です。
SQL Server 構成マネージャーを起動します(スタートボタンから SQL Server 構成マネージャー または SQLServerManager で検索)。
左のツリーで 「SQL Server ネットワークの構成」 を開き、対象インスタンスのプロトコルを選びます。右側の TCP/IP を右クリックして 「有効化」 を選択します。
MSSQLSERVER のプロトコル、名前付きインスタンスなら <インスタンス名> のプロトコル(例 TECHS のプロトコル)です。TCP/IP をダブルクリックし、「IP アドレス」タブを開いて、一番下の IPAll を確認します。
| 項目 | 意味と対応 |
|---|---|
| TCP ポート | ここに 1433 などの固定値が入っていれば、その番号を使います。 |
| TCP 動的ポート | 数字が入っている場合、起動のたびにポート番号が変わります。名前付きインスタンスの既定はこちらです。 推奨:「TCP 動的ポート」を空欄にし、「TCP ポート」に 1433(既に他が使用中なら 1435 等の空き番号)を設定して固定してください。同期プログラムの設定が安定します。 |
構成マネージャーの左ツリーで 「SQL Server のサービス」 を選び、対象の SQL Server (インスタンス名) を右クリックして 「再起動」 を選択します。
手順1(認証モード)と手順2(TCP/IP)の変更は、この1回の再起動でまとめて反映されます。
サーバー機の 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
-RemoteAddress 192.168.x.y を付けてその機械だけに限定するほうが安全です。
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)" |