[SQL Connectivity] 名前付きパイプでの接続時トラブルシューティング
佐藤美菜
SQL Developer Support Engineer
SQL Server へのアクセスは各種プロトコル( TCP/IP、名前付きパイプ、共有メモリ) で行えます。 SQL Server 2000 以降、既定のプロトコルは TCP/IP となっており、TCP/IP での接続がメインとなっているのが昨今です。 TCP/IP に比べ、名前付きパイプは古いテクノロジーで忘れがちですが、忘れがちだからこそ、ということで、今回は、名前付きパイプでの接続時のトラブルシューティング方法を紹介します。接続できなかった場合にはチェックしてみてください。
問題箇所特定のための切り分け接続テスト
名前付きパイプでのトラブルシューティングに入る前に、まずは、問題箇所を特定するために、以下で案内している 「2-2. 再現性がある場合に、切り分けのために実施いただきたい接続テスト」を試してみてください。
Troubleshooting Connectivity #4 - 接続エラーの調査方法
名前付きパイプの接続時の問題かどうかを切り分けるには、接続テスト時のサーバー名に使用するプロトコルを指定して確認します。
TCP/IP での接続 : | tcp:接続先SQLServerホスト名 |
名前付きパイプでの接続 : | np:接続先SQLServerホスト名 |
共有メモリでの接続 : | lpc:接続先SQLServerホスト名 |
接続テストの結果、名前付きパイプでの接続に問題があることが特定できたら、次に進みます。
名前付きパイプでの接続トラブルシューティング
はじめに : 名前付きパイプでの接続時の動作について
名前付きパイプ プロトコルによる通信では、サーバー側の IPC$ という共有名に対して接続要求を行います。ユーザー情報を渡し、適切である場合に接続が確立されます。クライアント上で動作しているアプリケーションの実行ユーザーが、このサーバーの共有にアクセスする権限を持っていないと名前付きパイプの接続が失敗します。
※ SQL Server 認証の場合でも、名前付きパイプを使用する場合は、Windows ユーザーの認証処理がプロトコル レベルで必要となります。
Windows Server 2003 以降の環境では、セキュリティの観点から IPC$ 共有へのアクセスを含め各種制限が行われていることにも注意が必要です。
トラブルシューティング ステップ
基本的に必要となるトラブルシューティングのステップは以下の 2 つです。
- IPC$ 共有への接続確認
- SQL Server の待ち受けプロトコルの確認
ただし、Workgroup 環境の場合、または SQL Server 2005 環境の場合には追加の作業が必要となります。
該当する場合には、上記 2 つの作業に加えて、トラブルシューティングの作業を行いましょう。
トラブルシューティング
<基本確認事項>
IPC$ 共有への接続確認
アプリケーションを実行しているユーザーで、IPC$ 共有へ接続ができるかどうか、クライアント上のコマンドプロンプトから以下を実行して確認します。
net view \\接続先SQLServerホスト名
net use \\接続先SQLServerホスト名\IPC$
失敗する場合は、アプリケーションを実行しているユーザーがサーバー上で権限を持っているかどうかを確認してください。
※ 接続確認が終わりましたら、以下コマンドで IPC$ への共有を解除しておいてください。
net use \\接続先SQLServerホスト名\IPC$ /delete
(確認例: 失敗時)
C:\>net view \\sqlhost01 /all システム エラー 5 が発生しました。 アクセスが拒否されました。 C:\>net use \\sqlhost01\IPC$ /all \\sqlhost01\IPC$ のパスワードまたはユーザー名が無効です。 'sqlhost01' のユーザー名を入力してください: test sqlhost01 のパスワードを入力してください: システム エラー 1326 が発生しました。 ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。 |
(確認例: 成功時)
c:\>net view \\sqlhost01 /all \\sqlhost01 の共有リソース
共有名 タイプ 使用 コメント ------------------------------------------------------------------------------- ADMIN$ Disk Remote Admin C$ Disk Default share CCMLOGS$ Disk Public Share ccmsetup$ Disk Public Share Dump Disk IPC$ IPC Remote IPC MCP Disk print$ Disk プリンター ドライバー Users Disk コマンドは正常に終了しました。 C:\>net use \\sqlhost01\IPC$ コマンドは正常に終了しました。 |
SQL Server の待ち受けプロトコルの確認
SQL Server の付属ツールである “SQL Server 構成マネージャー” (SQL Server Configuration Manager) で待ち受けプロトコルの状態が確認できます。該当のインスタンスのプロトコルの「名前付きパイプ」が有効になっていることを確認します。
有効になっていない場合は、状態を “有効” に変更します。設定を変更後は、SQL Server サービスの再起動が必要です。
<Workgroup 環境の場合のみ必要となる確認作業>
パススルー認証を使用した接続確認
クライアントとサーバーの両マシンに、同じ名前、パスワードの Windows ローカル ユーザーを用意し、サーバー側のファイル共有 IPC$ に接続できるようにし、接続確認をします。
ローカル ポリシーの設定確認
WORKGROUP 環境の場合は、クライアント ローカルにしか存在しないユーザーでアクセスする場合、匿名や GUEST ユーザーとしてサーバーにアクセスします。ローカル ポリシーの設定で IPC$ 共有へのアクセスが拒否される場合があります。
クライアントのどのユーザーも IPC$ 共有へアクセスできるようにするには、以下の手順でサーバーのローカル ポリシーの設定を有効化することが有効な場合もあります。この方法で接続できるようになるか試してみてください。
<手順>
- サーバー側の管理ツールで、[ローカル セキュリティ ポリシー] を選択する。
- セキュリティの設定のツリーで、[ローカル ポリシー] - [セキュリティ オプション] を選択する。
- 「ネットワーク アクセス : Everyone のアクセス許可を匿名ユーザーに適用する」は既定で [無効] になっていることを確認する。
- 「ネットワーク アクセス : Everyone のアクセス許可を匿名ユーザーに適用する」を右クリックし、[プロパティ] を選択する。
- [有効] に変更し、[OK] を選択する。
<SQL Server 2005 を利用している場合のみ必要となる確認作業>
SQL Server 2005 の場合は、セキュリティ構成の設定で名前付きパイプでの接続待ち受けができていることを確認します。
<手順>
- SQL Server セキュリティ構成を起動し、[サービスと接続のセキュリティ構成] をクリックします。
- [サービスと接続のセキュリティ構成] ボックスの [インスタンス別に表示] ボックスに、コンピュータにインストールされているデータベース エンジン インスタンスの一覧が表示されます。[インスタンス別に表示] ボックスで、構成するインスタンスを展開し、[データベース エンジン] を展開して、[リモート接続] をクリックします。
- [ローカル接続およびリモート接続] において名前付きパイプが有効になっていることを確認します。
※ SQL Server 2008 以降では、リモート接続は既定で許可されています。この設定は、SQL Server Management Studio より、[サーバーのプロパティ] – [接続] – [リモート サーバー接続] で確認できま��(下画面参照)。また、待ち受けプロトコルの設定は、 “SQL Server 構成マネージャー” から設定します。そのため、上記に該当する確認作業は必要ありません。
以上です。
お役に立てていただけますと幸いです。