接続エラーを解決SQL Server

この記事は、サーバーに対するさまざまな接続の問題を解決SQLします。

注意

この記事のガイド付きエクスペリエンスについては、「接続エラーを解決してエラーを解決する」を参照SQL Server。

元の製品バージョン:  Microsoft SQL Server
元の KB 番号:   4009936

前提条件

このトラブルシューティング ツールを効果的に使用するには、次の情報を収集できます。

  1. エラー コードと共にエラー メッセージの完全なテキストと、エラーが断続的 (時々のみ発生する) か一貫性 (常に発生) のかどうか。

  2. エラー ログはSQL Serverに注意してください。

    1. ドメイン コンピューターの完全修飾ドメイン名 (FQDN) SQL Server、またはクラスター化されたインストールの場合は、FQDN 仮想名。 名前付きインスタンスを使用している場合は、インスタンス名をメモします。

      注意

      "Server name is" 文字列を検索すると、エラー ログでこの情報を取得できます。

    2. インスタンスがリッスンしているネットワーク SQLポート。 メッセージの例:

      名前付きパイプ: \ \ [.\pipe\sql\query ]でサーバー ローカル接続プロバイダーが接続を受け入れる準備ができました。 TCP/IP とポート番号: サーバーが [::1 1433] でリッスンしています。

  3. アプリケーションおよびクライアント システムからのアプリケーションおよびSQL Serverログ。

  4. アプリケーションから接続が失敗している場合は、アプリの接続文字列。 これらは通常、アプリケーションのWeb.config ファイル ASP.NET されます。

チェックリスト

  • サーバー SQLが開始され、エラー ログの次のメッセージSQL Server確認します。

    SQL Serverクライアント接続の準備ができました。 これは情報メッセージです。ユーザー操作は必要ありません。

  • IP アドレスに対する基本的な接続を確認し、異常を確認します ping -a <SQL Server machine>, ping -a <SQL Server IP address> 。 問題が発生した場合は、ネットワーク管理者と一緒に同じ問題を解決してください。

  • ErrorLog をSQLして、適切なプロトコルをリッスンしているユーザーを確認します。

  • UDL ファイルを使用して、SQLサーバーに接続できるのか確認します。 動作する場合は、接続文字列に問題がある可能性があります。 UDL テストに関する手順については、「UDL ファイル」セクションをConnect、SQLサーバーに移動します。

  • 他のクライアント システムと異なるユーザー ログインSQL Serverに接続できるのか確認します。 可能な場合は、問題が発生しているクライアントまたはログインに固有の問題である可能性があります。 問題のあるクライアントWindowsのイベント ログで、追加のポインターを確認します。 また、ネットワーク ドライバーが最新の情報を提供している場合も確認します。

  • ログインエラーが発生している場合は、ユーザーがサーバー レベルでログインし、ユーザーが接続しようとしているデータベースに接続するための適切なアクセス許可を持っている必要があります。

関連するエラーの詳細については、「接続エラーの確認 」セクションを参照 してください。

接続エラーの確認

ネットワーク 関連またはインスタンス 固有のエラーが発生し、SQL Server エラーへの接続を確立すると、次のエラー メッセージの 1 つ以上が表示されます。

  • ネットワークに関連するエラーまたはインスタンス固有のエラーが発生し、ネットワークへの接続を確立SQL Server。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しく、リモート接続を許可SQL Server構成されていることを確認します。

    provider: SQL ネットワーク インターフェイス、エラー: 26 - エラーの検索サーバー/インスタンスの指定

  • SQL Server Native Clientデータ リンク エラー

    [Microsoft SQL Server Native Client 10.0]: Login timeout expired
    [Microsoft SQL Server Native Client 10.0]: A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    [Microsoft SQL Server Native Client 10.0]: SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

  • ネットワークに関連するエラーまたはインスタンス固有のエラーが発生し、ネットワークへの接続を確立SQL Server。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しく、リモート接続を許可SQL Server構成されていることを確認します。

    プロバイダー: TCP プロバイダー、エラー: 0
    接続されたホストが応答できなかったため、接続側が一時後に正しく応答しなかったか、確立された接続が失敗したため、接続の試行に失敗しました。
    Microsoft SQL Serverエラー: 10060

  • ネットワークに関連するエラーまたはインスタンス固有のエラーが発生し、ネットワークへの接続を確立SQL Server。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しく、リモート接続を許可SQL Server構成されていることを確認します。

    provider: Named Pipes Provider, error:40 - プロバイダーへの接続を開SQL Server
    Microsoft SQL Serverエラー:53
    ネットワーク パスが見つかりませんでした

  • [Microsoft][SQL Server Native Client 11.0]TCP プロバイダー: ターゲット コンピューターが積極的に拒否したため、接続を行う必要はありません。
    [Microsoft][SQL Server Native Client 11.0]ログイン タイムアウトの有効期限が切れています
    [Microsoft][SQL Server Native Client 11.0]ネットワークに関連するエラーまたはインスタンス固有のエラーが発生し、ネットワークへの接続を確立SQL Server。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しいか、リモート接続SQL Server構成されている場合に確認します。 詳細については、「オンライン ブックSQL Server参照してください。

このセクションからトラブルシューティングを開始できます。さまざまな接続の問題の 一般的な原因です。

さまざまな接続の問題の一般的な原因

以下のインスタンスに適用される原因のそれぞれと、該当する原因ごとに、対応する解決策を試してください。

原因 1: 接続文字列またはサーバー名ダイアログ ボックスで正しくないサーバー名が指定されている

確認するには、次の操作を行います。

  • アプリケーションを指定するサーバー名が、エラー ログにあるサーバー名と一致する必要があります。

  • アプリケーションの[ASP.NET構成ファイルの編集] に移動し、[接続文字列] セクションが適切なサーバー名をポイントし、ASP.NET Webアプリケーションに適切な SQL Server 接続文字列を使用します。

    注意

    アプリケーションから接続文字列をプログラムで取得するには、「How to: Read Connection Strings from the Web.config File」のサンプルを参照してください

原因 2: クライアント コンピューターのエイリアスが正しくありません

エイリアスは、通常、別名を使用して SQL Serverに接続する必要がある場合や、ネットワークに名前解決の問題がある場合に使用されます。 クライアント コンピューターのエイリアスが正しくないと、アプリケーションからの接続が間違ったサーバーに移動し、エラーが発生する可能性があります。

次の方法を試してみてください。

  • [クライアント SQL Server ユーティリティ] を開き、[実行] cliconfg.exeを入力 します。

  • 接続しようとしているサーバーに対して定義されているエイリアスが何かあるかを確認します。

  • 存在する場合は、次の操作を行います。

    1. [編集] をクリック し、サーバー エイリアスの名前を変更します。 (たとえば、サーバー名が MySQL の場合は、サーバー名MySQL_test)、 接続を 再試行します。 接続が機能する場合は、おそらく不要になった古い構成から、エイリアスが正しくないことを示しています。 引き続きエラーが発生する場合は、エイリアスの名前を元の名前に戻し、次の手順に進みます。

    2. エイリアスの接続パラメーターを確認し、正しいか確認します。 接続に関する問題を引き起こす可能性のある一般的なシナリオの一部は次のとおりです。

      • サーバー名パラメーターの IP アドレスが正しくありません。 この IP アドレスが ErrorLog ファイルのエントリと一致SQL確認します。

      • Server name パラメーターのサーバー名が正しくありません。 たとえば、サーバーエイリアスが正しいサーバー名をポイントしている場合、Server name パラメーターの値が正しくない場合、接続は失敗します。

      • 名前付きパイプ エイリアスを使用している場合は、パイプ名の形式が正しいか確認してください。

        • Mydefaultinstance という名前の既定のインスタンスに接続する場合は、パイプ名を次に示す必要があります。\\Mydefaultinstance\pipe\sql\query
        • 名前付きインスタンス MySQL\Named に接続する 場合、パイプ名は \\MySQL\pipe\MSSQL$Named\sql\query

原因 3(Default instance): クライアントとサーバーの間のファイアウォールが、インスタンスがリッスンしているポートSQL Serverブロックする

既定のインスタンス: 通常、既定のインスタンスはポート 1433 で実行されます。 一部のインストールでは、インスタンスの実行に標準以外のポート (1433 以外) SQLがあります。 ファイアウォールがどちらかをブロックしている可能性があります。

次の方法を試してみてください。

  • インスタンスが実行されているポートSQLを確認します。 SQL サーバーの既定のインスタンスが標準以外のポートを使用している場合は、「既定以外の (または標準以外の) TCP ポートでSQL Server 'Default'インスタンスを実行する: : アプリケーション接続を機能するためのヒント」を参照してください。

  • 形式を使用してサーバー SQL Serverポート番号をサーバー名に追加し、それが機能 <servername> する必要がある場合は、ポート番号を追加してみてください。 たとえば、SQL インスタンス名が MySQLDefaultinstance で、ポート 2000 で実行されている場合は、サーバー名を MySQLServer、2000 として指定し、それが動作する場合を確認します。 動作する場合は、ファイアウォールがポートをブロックしているという指示です。

  • 確認済みである場合は、ファイアウォール除外リストにポートを追加します。 手順については、「ファイアウォールの 構成」セクションに移動 します。

原因 4(名前付きインスタンス): SQLブラウザーが開始されない

SQL Server の名前付きインスタンスに接続するクライアント アプリケーションは、SQL が実行されているシステム上の SQL Browser サービスを使用して、SQL がリッスンしているポートを列挙します。 ブラウザー サービスが開始されていない場合、接続は失敗します。

次の方法を試してみてください。

SQL Server インスタンスを実行しているシステムで、コントロール パネルで SQL Server Configuration Manager または Services アプレットを使用し、まだ開始されていない場合は SQL Browser Service を起動します。 詳細については、「How to: Start and Stop the browser Service」をSQL Serverしてください。

原因 5(名前付きインスタンス): ネットワーク上でブラウザーで使用SQL UDP ポート 1434 がブロックされる

このインスタンスSQL名前付きインスタンスである場合は、動的ポートまたは静的ポートを使用するように構成されている可能性があります。 どちらの場合も、基になるネットワーク ライブラリは、udp ポート 1434 を介して SQL Server コンピューターで実行されている SQL Browser サービスを照会して、名前付きインスタンスのポート番号を列挙します。 クライアントとサーバーの間のファイアウォールでこの UDP ポートがブロックされている場合、クライアント ライブラリはポート (接続の要件) を特定できないので、接続が失敗します。

確認するには、次の操作を行います。

  • 方法 1:

    1. エラー ログからインスタンスSQLリッスンしているポートSQL Serverしてください。
    2. <servername\instancename>、 portnumber という形式を使用して、サーバー名に追加されたポート番号を使用して、名前付きインスタンスに接続してみてください。 動作する場合は、ファイアウォールがポート UDP ポート 1434 をブロックしているという指示です。 たとえば、SQL インスタンス名が MySQL\Namedinstance で、ポート 3000 で実行されている場合は、サーバー名を MySQL\Namedinstance、3000 として指定し、それが動作する場合を確認します。 動作する場合は、UDP ポート 1434 がブロックされるか、静的ポートがブロックされるか、その両方がブロックされる可能性があります。 以下の方法 2 の Portqry を使用して UDP ポートか静的ポートか確認します。
  • 方法 2:

    1. 名前付きインスタンスで PortqryUI ツールを使用し、結果の出力を確認します。 UDP ポート 1434 がフィルター処理されているというメッセージが表示される場合は、ネットワーク上でポートがブロックされているというメッセージが表示されます。 ツールの使い方については、「PortqryUI ツールを使用してツールを使用する」セクションSQL Serverしてください。

次の方法を試してみてください。

最初に、SQL Serverインスタンスが動的ポートと静的ポートをリッスンしているかどうかを判断し、シナリオに関連する手順を使用します。 動的ポートと静的ポートSQLをリッスンしている場合は、「動的ポートと静的ポートをリッスンSQLを確認する」セクションに移動します。

  • ケース 1: 動的ポート。 この場合、SQL ブラウザー サービスが実際に開始され、クライアントとサーバーの間のファイアウォールで UDP ポート 1434 がブロックされていないか確認する必要があります。 どちらのポートも実行できない場合は、SQL Server インスタンスを切り替えて静的ポートを使用し、「特定の TCP ポートでリッスンするサーバーを構成する」に記載されている手順を使用する必要があります

  • ケース 2: 静的ポートSQLブラウザーが実行されていないか、UDP 1434 をファイアウォールで開くことができません。 この場合、接続文字列で静的ポートが指定され、そのポートがファイアウォールによってブロックされていないことを確認する必要があります。 手順については、「ファイアウォールの 構成」セクションに移動 します。

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

ファイアウォールの構成

以下に、既定のインスタンスと名前付きインスタンスへの接続を成功Windowsファイアウォールの必要な構成を示す簡単なスクリーンショットを示します。

  • 2012 R2 SQL Serverの既定のポート 1433 でリッスンWindowsインスタンス。 このシナリオでは、ファイアウォールの TCP ポート 1433 に例外が追加Windowsがあります。

    1. サーバー WindowsをホストしているシステムでファイアウォールSQL開き、[受信ルール] の下の [新しい ルール]をクリックします

      Inound ルール

    2. [ポート] オプション を選択 し、[次へ] を クリックします

      InboundRulePort

    3. 次の画面で次の手順を実行します。

      • プロトコル として [TCP] を選択します。

      • [ 特定のローカル ポート] を 選択し、値を 1433 として指定し、[ 次へ] を クリックします

        TCP1433

    4. 次の画面で、[接続を許可 する] を選択し、[ 次へ] を クリックします

      AllowConnection

    5. 次の画面で、環境に最適なオプションを選択し、[次へ] を クリックします

      NewInboundRule

    6. 次の画面で、ルールに名前を付け、将来の参照に関する明確な説明を入力し、[完了] をクリック します

      NewInboundRuleName

    7. 完了すると、ルールが作成され、既定で有効になっているのが表示されます。

      EnableInboundRule

  • UDP ポート 1434 の例外を追加して、サーバーの名前付きインスタンスSQLします。

    1. サーバー WindowsをホストしているシステムでファイアウォールSQL開き、[受信ルール] の下の [新しい ルール]をクリックします

      Inound ルール

    2. [ポート] オプション を選択 し、[次へ] を クリックします

      InboundRulePort

    3. 次の画面で次の手順を実行します。

      • プロトコル として [UDP] を選択します。

      • [ 特定のローカル ポート] を 選択し、値を 1434 として指定し、[次へ] を クリックします

        NewInboundUDP

    4. 次の画面で、[接続を許可 する] を選択し、[ 次へ] を クリックします

      AllowConnection

    5. 次の画面で、環境に最適なオプションを選択し、[次へ] を クリックします

      NewInboundRule

    6. 次の画面で、ルールに名前を付け、将来の参照に関する明確な説明を入力し、[完了] をクリック します

      NewInboundName2

    7. 完了すると、ルールが作成され、既定で有効になっているのが表示されます。

      EnableInboundRule2

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

PortqryUI ツールを使用したツールのSQL Server

ダウンロード場所: PortqryUI

  1. クライアント コンピューターで PortqryUI ツールを起動します。 (接続の問題が発生しているコンピューター、Web アプリの場合、これは IIS サーバーである可能性があります)
  2. クエリを実行する宛先 IP または FQDN SQL Serverインスタンスのサーバー名SQL vitutalサーバー名を指定します。
  3. [定義済みのサービスのクエリ] を選択しSQLで [サービス] を選択します。
  4. [ クエリ] を クリックし、出力を調べて、追加のポインターに次の表を使用します。
インスタンスの種類 Portqry からの出力 接続の問題の潜在的な原因 何を試しますか?
既定のインスタンス TCP ポート 1433 (ms-sql-s サービス): リッスンしない 次のいずれかを示します。
  • SQLは開始されない。
  • TCP/IP は、サーバー プロトコル リストSQL有効になっていません。
  • SQL既定以外のポートでリッスンしている場合。 (エラーログを確認する)
  • クライアントとサーバーの間のファイアウォールがポートをブロックしています。
  • 開始SQL確認します。
  • ポートSQLエラー ログを確認し、形式 、ポート番号を使用して接続文字列 <servername> で使用します
  • ネットワーク/windows 管理者と一緒に作業して、ネットワーク上のファイアウォールまたは SQL Server システム上の Windows ファイアウォールによって TCP ポート 1433 がブロックされていないことを確認します。
メモ ファイアウォールの問題を解決する場合は、ファイアウォールの構成 [] セクションに移動 します。
既定のインスタンス TCP ポート 1433 (ms-sql-s サービス): LISTENING
  • クライアント ライブラリは、サーバー コンピューターに適切SQL接続できますが、アプリケーション層の他の何かが問題を引き起こしている可能性があります。
  • 接続文字列でサーバー名が正しく指定されていることを確認します。
  • 接続文字列がポート番号を使用している場合は、接続文字列で正しく指定されます。
  • ボックスに定義されている古いエイリアス。
名前付きインスタンス UDP ポート 1434 (ms-sql-m サービス): FILTERED 次のいずれかを示します。
  • SQLインスタンスが開始されていない場合。
  • SQLインスタンスをホストしているシステムでブラウザーがSQLされません。
  • UDP ポート 1434 は、クライアント サーバーまたはクライアントとサーバー SQLネットワーク上のファイアウォールによってブロックされます。
  • サービスが開始されます。
  • SQLブラウザー サービスが開始されます。
  • ネットワーク/windows 管理者と一緒に作業して、ネットワーク上のファイアウォールまたは SQL Server システム上の Windows ファイアウォールによって UDP ポート 1434 がブロックされていないことを確認します。
メモ ファイアウォールの問題を解決する場合は、ファイアウォールの構成 [] セクションに移動 します。
名前付きインスタンス UDP ポート 1434 が リッスンしている
  • クライアント ライブラリは、サーバー コンピューターに適切SQL接続できますが、アプリケーション層の他の何かが問題を引き起こしている可能性があります。
  • 接続文字列でサーバー名が正しく指定されています。
  • 接続文字列でポート番号が正しく指定されていません。
  • ボックスに定義されている古いエイリアス。

出力例:

  • 既定のポートの既定のインスタンス: 作業シナリオ

    DeaultInstanceDefaultPort_Working

  • 既定のポートの既定のインスタンス: 非動作シナリオ

    DeaultInstanceDefaultPort_NonWorking

  • 名前付きインスタンス: 作業シナリオ: (インスタンス名: SQL 2014、ホスト名: SQLCONNVM)

    WorkingNameInstance

  • 名前付きインスタンス: 非 - 作業シナリオ: (インスタンス名: SQL 2014、ホスト名: SQLCONNVM)

    NonWorkingNameInstance

詳細については、「ファイアウォールの構成 」セクションに移動 します。

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

動的ポートと静的SQLをリッスンしているユーザーを確認する

  1. コンソール SQL Server 構成マネージャー <instance name> で、[ネットワーク構成] を展開し、[プロトコルSQL Server] を展開し 、[TCP/IP] をダブルクリックします

  2. [TCP/IP プロパティ] ダイアログ ボックスの [IP アドレス] タブで、IP1 、IP2、最大 IPAll の形式で複数の IP アドレス が表示されます。 これらの 1 つは、ループバック アダプターの IP アドレス 127.0.0.1 です。 コンピューター上の各 IP アドレスに追加の IP アドレスが表示されます。 (おそらく、IP バージョン 4 アドレスと IP バージョン 6 アドレスの両方が表示されます)。各アドレスを右クリックし、[プロパティ] をクリック して、構成する IP アドレスを識別します。

  3. [TCP 動的ポート] ダイアログ ボックスに 0 が含まれている場合は、動的ポートデータベース エンジンをリッスンしているメッセージを示します。 特定の番号が含まれている場合は、データベース インスタンスが静的ポートでリッスンしているという意味です。

    TCPDynamicPorts

詳細については、「特定の TCP ポートでリッスンするサーバーを構成する」を参照してください

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

ターゲット コンピューターがアクティブに拒否したため、接続を行う必要はありません。

接続エラーの詳細については、「完全なエラー メッセージ 」セクションに移動 します。

完全なエラー メッセージ

次のようなエラーが表示される場合があります。

[Microsoft][SQL Server Native Client 11.0]TCP プロバイダー: ターゲット コンピューターが積極的に拒否したため、接続を行う必要はありません。
[Microsoft][SQL Server Native Client 11.0]ログイン タイムアウトの有効期限が切れています。
[Microsoft][SQL Server Native Client 11.0]ネットワークに関連するエラーまたはインスタンス固有のエラーが発生し、ネットワークへの接続を確立SQL Server。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しいか、リモート接続SQL Server構成されている場合に確認します。 詳細については、「オンライン ブックSQL Server参照してください。

このセクションからトラブルシューティングを開始できます。さまざまな接続の問題の 一般的な原因です。

SQL Server存在しないか、アクセスが拒否されました

このセクションからトラブルシューティングを開始できます。さまざまな接続の問題の 一般的な原因です。

ピボットテーブル操作に失敗しました: ブックのデータ モデルを読み込むサーバーを見つけ出す必要があります

このセクションからトラブルシューティングを開始できます。さまざまな接続の問題の 一般的な原因です。

SSPI コンテキスト エラー メッセージを生成できません

セキュリティ サポート プロバイダー インターフェイス (SSPI) は、TCP/IP ソケットなどの汎用データ トランスポート層上での委任と相互認証を可能にする一連の Windows API です。 したがって、SSPI を使用すると、Windows オペレーティング システムを実行しているコンピューターが、生のバイトデータを送信できるトランスポート層を通して、あるコンピューターから別のコンピューターにユーザー セキュリティ トークンを安全に委任できます。
SSPI が Kerberos 認証を使用して TCP/IP を委任し、Kerberos 認証でユーザー セキュリティ トークンを正常に SQL Server を実行している宛先コンピューターに委任するために必要な操作を完了できない場合は 、SSPI コンテキスト エラーを生成できません。

Kerberos 操作を完了できない理由の詳細については 、「Kerberos の問題による認証エラーのトラブルシューティング」セクションに移動して、手順を確認して実装します。

Kerberos の問題による認証エラーのトラブルシューティング

Kerberos 認証の失敗は、さまざまな理由で発生する可能性があります。 主な原因と対応する解決策を以下に示します。

案件の種類 推奨される解決方法
SPN の問題:
  • SPN が見つからない: SPN は Active ディレクトリに登録されていません。
  • SPN エントリが正しくありません: SPN は存在しますが、ポート番号が正しくないか、または SQL サービス アカウント以外の別のアカウントに存在します。
  • 重複する SPN: アクティブ ディレクトリ内の複数のアカウントに同じ SPN が存在します。
[Kerberos 構成マネージャーを使用して SPNと委任の問題を診断および修正する] セクションを確認して、SPN の問題を診断および解決します。

メモ SPN、Kerberos、その他の関連する概念について詳しくは、次の KB 記事の情報をご覧ください。
"SSPI コンテキストを生成できません" というエラー メッセージのトラブルシューティング方法
SQL委任に対して信頼されていないサービス アカウント。 ローカル システム アカウントを使用している場合は、中央サーバーがアクティブ ディレクトリの委任に対して信頼されている必要があります。 Kerberos 構成マネージャーの [委任] タブを使用して、Active Directory 管理者を確認して操作して、アカウントの委任を有効にします。 次 の段落の詳細については、「Kerberos Configuration manager を 使用して SPN と委任の問題を診断および修正する」を参照してください。
名前の解決が正しくない: サーバー名が、ネットワークの DNS サーバーによって登録されている IP アドレスとは異なる IP アドレスに解決されている可能性があります。 ping -a <your_target_machine> (IPv4 および IPv6 には -4 と -6 を使用します)
ping -a <Your_remote_IPAddress> nslookup (ローカル コンピューター名とリモート コンピューター名と IP アドレスを複数回入力する)

返される結果の不一致と不一致を探します。 ネットワーク上の DNS 構成の正しさは、接続を確立SQL重要です。 DNS エントリが間違っていると、後ですべての種類の接続の問題が発生する可能性があります。
クライアントからドメイン コントローラーへの接続を妨げているファイアウォールや他のネットワーク デバイス:SPN はアクティブ ディレクトリに格納され、クライアントが AD と通信できない場合は、接続を続行できません。 追加情報については、次のリンクを確認してください。

注意

  1. アプリケーションのインスタンスが開始SQL Server データベース エンジン、SQL Serverサービスの SPN の登録SQL Serverされます。 インスタンスが停止すると、SQL SERVER SPN の登録を解除します。 これを行う場合、SQL サービス アカウントには、アクティブ ディレクトリに ReadServicePrincipalName 権限と WriteServicePrincipalName 権限が必要です。 ただし、サービス アカウントにこれらの権限が設定されていない場合は、SPN の自動登録は行ななされません。Kerberos 認証を有効にするには、Active Directory 管理者と一緒に SQL インスタンスに登録する必要があります。 このシナリオでは、名前付きインスタンスを使用している場合は、そのインスタンスに静的ポートを使用する方が便利です。 動的ポートを使用する場合、サービスが再起動されるごとにポート番号が変更され、インスタンスの手動で登録された SPN が無効になります。 詳細については 、「Kerberos 接続のサービス プリンシパル名を登録する」を参照してください

  2. SQL がクラスター化されている環境では、SPN の登録を解除し、SQL がオンラインになるのに要する時間よりも SPN を Active ディレクトリに r-register するのに時間がかかる可能性があります。 SPN 登録が時間内に発生しない場合、クラスター管理者がサーバーに接続できないので、SQL がオンラインになるのをSQLがあります。

Kerberos Configuration Manager を使用した SPN と委任の問題の診断と修正

  1. Microsoft ® Kerberos Configuration Manager をダウンロード ® して、SQL Serverコンピューターにインストールします。

  2. アクティブ ディレクトリに SPN を作成するのに十分な権限を持つアカウントが必要な場合は、ドメイン アカウントを使用してツールを起動します。 次の図を参照してください。

    KerberosConfigManager

  3. Connectエラー SQL Server情報を収集する場合は、次の手順を実行します。

    ConnectKerberosConfigManager

  4. 接続すると、以下のようにさまざまなタブが表示されます。

    • System: 基本的なシステム情報を持っています。

      KerConfigManager_System

    • SPN: ターゲット サーバー上の各インスタンスに関する SPN SQL情報を提供し、以下に示すさまざまなオプションを提供します。 このタブを使用して、不足している SPN または正しく構成されていない SPN、およびこれらの問題を解決するための [ 生成 ] または [ 修正 ] ボタンを見つける。

      KerConfigManager_SPN

      • [生成 ] オプションを使用すると、SPN 生成スクリプトを作成できます。 [生成] ボタン をクリック すると、次のダイアログボックスが開きます。

        KerConfigManager_GenerateSPN

        このオプションは、コマンド プロンプトから実行して SPN を生成できる cmd ファイルを作成します。

        generateSPN の内容は、次のようになります。

        :: This script is generated by the Microsoft(c) SQL Server(c) Kerberos Configuration Manager tool.
        :: The script may update the system information, SPN settings and Delegation configurations of a given server.
        :: SPN and Delegation configuration updates require Windows Domain Administrator permission to execute.
        :: A Domain Admin should review the configurations recommended by this tool and take appropriate actions to enable Kerberos authentication.
        :: Please contact Microsoft Support if Kerberos connection problem persists.
        :: The file is intended to be run in domain "<DomainName>.com"
        :: Corrections for MSSQLSvc/<HostName>.<DomainName>.com **SetSPN -s MSSQLSvc/<HostName>.<DomainName>.com UserName**
        

        SetSPN オプション を使用して、サービス アカウントの下に SPN を作成SQL Server。

      • Fix オプションは、SPN を追加する権利を持っている限り SPN を追加し、次のツール ヒントを表示KerbConfigManager_Fix

        注意

        このツールは、静的 ポートを持 つ既定のインスタンスと名前付きインスタンスに対する Fix and Generate オプションのみを提供します。 動的ポートを使用する名前付きインスタンスの場合は、動的ポートから静的ポートに切り替えるか、サービス アカウントがサービスを開始する度に SPN を登録および登録解除するために必要なアクセス許可を付与します。 それ以外の場合は、サービスを開始する度に対応する SPN の登録を手動で登録SQLする必要があります。

      • [委任] タブ: このタブは、委任のサービス アカウントの構成に関する問題を識別します。 これは、リンクされたサーバーの問題のトラブルシューティングに特に役立ちます。 たとえば、SPN で問題が解決しない場合でも、リンク サーバー クエリで問題が発生した場合は、サービス アカウントが資格情報を委任するように構成されていない可能性があります。 詳細については、「オンライン ブック」のトピック「委任用のリンク サーバーの構成」を参照してください

        KerbConfigManger_Delegation

  5. SPN を修正したら、Kerberos Configuration Manager ツールを再実行し、[SPN] タブと [委任] タブでエラー メッセージが報告されなくなったら、アプリケーションからの接続を再試行してください。

詳細については、次のリンクを参照してください。

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

ユーザーのログインに失敗しました

より具体的なエラーが発生する可能性があります。 表示される正確なエラーを選択します。

ユーザー 'NT AUTHORITY\ANONYMOUS LOGON' のログインに失敗しました

この問題には、少なくとも 3 つのシナリオがあります。 次の表を使用して、該当する各シナリオを実行し、適切な解決手順を実行します。

潜在的な原因 推奨される解決方法
同じコンピューターでのダブル ホップのシナリオ - ダブル ホップを実行しようとしているが、Kerberos の代わりに NTLM 資格情報が使用されている。 同じコンピューター上のダブル ホップ シナリオの場合は、次のように DisableLoopbackCheck または BackConnectionHostNames レジストリ エントリを追加します。
複数のコンピューターでダブル ホップのシナリオ - SPN の問題により Kerberos 接続が失敗した場合にエラーが発生する可能性があります。 [移動] セクション: 下部にある Kerberos の問題による認証エラーのトラブルシューティングを行い、詳細を確認します。
ダブル ホップは関係なし。 ダブルホップが関係ない場合は、重複する SPN が含まれる場合、クライアントが Kerberos 資格情報の代わりに NTLM 資格情報を取得する LocalSystem または他のコンピューター アカウントとして実行されている可能性もあります。

[移動] セクション: SPN の問題を診断および解決するために Kerberos の問題による認証エラーのトラブルシューティングを行います。
Windowsセキュリティ ポリシーが構成されている場合は、ローカル アカウントのコンピューター アカウントの使用がボックスから外されるのを防ぐ必要があります。 Windows 2008 R2/Windows 7 以降では、ローカル セキュリティ ポリシー セキュリティ オプション ネットワーク セキュリティは、オフボックスになるローカル アカウントにコンピューター アカウントを使用しない構成にできます。代わりに匿名資格情報を使用します。 | |

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

ユーザー '(null)' メッセージのログインに失敗しました

つまり、LSASS はサービス アカウントの資格情報を使用してセキュリティ トークンSQL Server解読できません。 この主な理由は、SPN が間違ったアカウントに関連付けられている場合です。

これらの SPN の問題を診断して解決するには、「Kerberos の問題による認証エラーのトラブルシューティング 」セクションに移動 します。

ユーザーが空のログインに失敗しました

たとえば、次のようなエラーが表示される場合があります。

Source: NETLOGON
Date: 8/12/2012 8:22:16 PM
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <computer name>
Description:This computer was not able to set up a secure session with a domain controller in domain due to the following: The remote procedure call was cancelled. This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your domain administrator.
Empty string means that SQL tried to hand-off the credentials to LSASS but there was some problem. Either LSASS was not available or the domain controller could not be contacted.
Check the event logs on the client and the server machines to see if there are any network or Active Directory related messages around the time of failure and if you do, work with your domain administrator to fix the issues.

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

ユーザー ' ' またはユーザー ' のログインが失敗した場合は <username> ログインに失敗 <domain> \ <username> しました。

ドメイン名を指定しない場合は、ログインに失敗SQLされます。 指定すると、ログインに失敗Windows-Integratedされます。 原因と潜在的な解決策については、次の表を参照してください。

原因 解決手順
要求されたデータベースがオフラインか、それ以外の場合は使用できません。 アクセス許可とデータベースの可用性をSQL Server Management Studio。
ユーザーには、要求されたデータベースへのアクセス許可が付与されません。 sysadmin 権限を持つ別のユーザーとして接続してみてください。

その他のヒントについては、「 トラブルシューティング: User 'x' のログインに失敗しました」を参照してください

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

ユーザー '<\computername$ のログイン>'

匿名ログインまたはユーザー アカウントが偽装されていないフォームのログインを使用する IIS アプリケーションでも確認できます。 代わりに、IIS 匿名 (IUSR) アカウントまたはアプリ プール アカウントが偽装されます。 IUSR アカウントはローカル アカウントであり、アプリ プール アカウントはローカル アカウントである場合もあります。

通常、このエラーは、ユーザーがドメイン アカウントではなくローカル アカウントでログインしている場合に発生します。 オフボックスのサービスに接続する場合は、コンピューターの資格情報が渡される可能性があります。 場合によっては、このアカウントをバック エンド サーバーのログインとして追加できます。 その他の場合は、ドメイン アカウントでログインし、そのアカウントに適切なアクセス許可をプロビジョニングしてリモート サービスにアクセスできます。

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

タイムアウトの有効期限が切れたエラーを確認する

タイムアウトの有効期限が切れたエラーは、次のエラー メッセージの 1 つ以上を表します。

タイムアウトの有効期限が切れています。 The timeout period elapsed prior to completion of the operation or the server is not responding.

System.Data.SqlClient.SqlException (0x80131904): 接続タイムアウトが期限切れです。
ログイン前のハンドシェイク確認を使用しようとしてタイムアウト期間が経過しました。
これは、ログイン前のハンドシェイクが失敗した、またはサーバーが時間内に応答できなかったためです。
このサーバーへの接続に費やされた時間は、[Pre-Login] 初期化=23 でした。handshake=14979;---> System.ComponentModel.Win32Exception (0x80004005): 待機操作がタイム アウトしました。

System.Data.SqlClient.SqlException (0x80131904): タイムアウトが期限切れです。
The timeout period elapsed prior to completion of the operation or the server is not responding.
System.ComponentModel.Win32Exception (0x80004005): 待機操作がタイム アウトしました。

接続タイムアウトの有効期限が切れています。
ログイン前のハンドシェイク確認を使用しようとしてタイムアウト期間が経過しました。
これは、ログイン前のハンドシェイクが失敗した、またはサーバーが時間内に応答できなかったためです。
このサーバーへの接続に費やされた時間は、[Pre-Login] 初期化=21036 でした。handshake=0;(Microsoft SQL Serverエラー: -2)。

注意

2 番目と 3 番目のエラー メッセージは、.Net Framework 4.5 以上がインストールされている場合に発生します。

トラブルシューティングは、次のセクションから開始できます。 タイムアウトの有効期限が切れたメッセージのトラブルシューティングを行います

タイムアウトの有効期限が切れたメッセージのトラブルシューティング

タイムアウトとは、許可されている時間よりも長い時間がかかる場合です。 基本的に、無期限に待機しないようにし、他の処理をブロックしてアプリケーションをハングアップさせようとしていたことを中止しています。 接続の観点から、基本的な形式では、これを 2 つの方法で確認できます。 1 つは接続タイムアウト、もう 1 つはクエリ タイムアウトです。 そのため、最初にエラー メッセージの完全な呼び出し履歴を確認して、接続タイムアウトまたはコマンド タイムアウトかどうかを判断する必要があります。

注意

コード、接続文字列、その他のメソッドを使用して設定できるこれらのパラメーターの既定値は次のとおりです。

  • 接続タイムアウト - 15 秒
  • クエリまたはコマンドのタイムアウト - 30 秒
  • 接続タイムアウト呼び出し履歴は、次のように見えます。

    System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
    at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
    at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert, Boolean& marsCapable)
    at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject)
    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)  
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
    at System.Data.SqlClient.SqlConnection.Open() <-- SqlConnection along with Open tells us that we are trying to open a connection. So, this is not related to a query.  
    
  • .NET 2.0 Framework のコマンド タイムアウトは、次のように見えます。

    System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
    at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
    at System.Data.SqlClient.SqlDataReader.get_MetaData()
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
    at System.Data.SqlClient.SqlCommand.ExecuteScalar() <-- SqlCommand is used to work with a query, not a connection. ExecuteScalar is used to actually execute a query. You could also see other items like an ExecuteReader or ExecuteNonQuery for example.
    

解決手順: これらの問題はどちらも環境または関連SQL Serverがあります。 たとえば、ネットワークが遅い場合や、クエリのパフォーマンスの問題が発生している可能性があります。 ここで実行できる難しいルールや高速なルールはありません。問題の原因となる可能性があるものについては、より多くの調査が必要な場合があります。 クエリ タイムアウトを増やす方が、接続タイムアウトを増やすよりもはるかに一般的です。 これは、データ ソースに接続しようとするときに、通常、接続が迅速に行なう (通常は数ミリ秒以内) ためです。

試すべきこと
接続タイムアウト
1. アプリケーションで ConnectionTimout を増やします。
2. Portqry のようなツールを使用して、SQLによって使用されるポートがネットワーク上で ブロックされるのを確認します。 [PortqryUI ツールの使用] セクションに移動SQL Serverの手順については、「PortqryUIツールを使用する」セクションを参照してください。
コマンド タイムアウト
アプリケーションの CommandTimeout 値を増やし、バックエンドで実行されるクエリも微調整します。

その他のヒントと提案の確認: トラブルシューティング: タイムアウトの有効期限が切れています

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

プールから接続を取得するまでのタイムアウト期間

通常、接続が正しく閉じらされていない場合に発生し、完全なエラーは次のようになります。

System.InvalidOperationException: タイムアウトの有効期限が切れています。 プールから接続を取得するまでのタイムアウト期間。

これは、すべてのプールされた接続が使用され、最大プール サイズに達したため発生している可能性があります。 これは通常、タイムアウトの有効期限が切 れた場合に回避できます。プールから接続を取得する前にタイムアウト期間が経過しました

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

Connect UDL SQLを使用してサーバーを開く方法

ユニバーサル データ リンク ファイルを使用して SQL Server への接続をテストする方法の詳細については、「ユニバーサル データ リンク ファイルを使用して SQL Server への接続をテストする」セクションを参照してください。

UDL ファイルを使用すると、クライアントや他のシステムからSQL接続を簡単かつ効果的にテストできます。

  1. エクスプローラーでファイル拡張子を表示するオプションWindowsします。 これを行うには、次の手順を実行します。

    1. [Windows 8以降のシステムの場合: [コントロールパネル] の [エクスプローラー オプション] に移動するか、Windows 検索で [非表示] と入力し、[表示] タブで、[既知のファイルの種類の拡張子を非表示にする] のチェックを外 します。

    2. Windows 7 以前のバージョン:

      Win7ViewExtFile

  2. ユニバーサル データ リンク (.udl) ファイルを作成するフォルダー (c:\temp など) に移動します。

  3. 新しいテキスト ファイル (sqlconn.txt) を作成し、拡張子の名前.txt .udl に変更します。 (ファイル名 の拡張子 の変更に関する警告メッセージが表示される場合は、[はい] をクリックします)

  4. 手順 3 で .udl ファイルをダブルクリックし、次の操作を行います。

    1. [プロバイダー ] タブ で、アプリケーションで使用しているプロバイダーを選択します (たとえば、SQL Server Native Client)
    2. [接続 ] タブ で、アプリケーションに関連SQL Server他のパラメーターを選択または入力します。
  5. 次に、[ 接続のテスト] をクリックします

詳細とスクリーンショットについては、MSDN の次のブログ投稿を参照してください。
最初の基本 : "UDL Test"

これで問題が解決しない場合は、[問題が解決しない] セクションに移動 します。

問題が解決しない

このガイドで問題を解決できず、申し訳ありません。 Microsoft のヘルプを参照SQL Community勧めします。 以下に、有用である可能性がある追加リソースを示します。