SQL Server への接続エラーの解決

適用対象: Microsoft SQL Server

このガイドの内容
SQL Server への多くの接続問題は、シンプルなチェックリストを確認し、簡単な手順にしたうことで解決できます。 このガイドでは、SQL Server への接続の祭に発生する各種接続エラーについて同様に解決する手順について、順を追って提供します。

対象
SQL Server を操作していて接続問題が発生しているユーザーはいますか

内容
特定の接続エラーについての詳細なトラブルシューティングをする前に、前提要件のアイテムを収集してクイック チェックリストを実行することをお勧めします。 これを実行するためには、少し時間がかかりますが、解決を効率的に導くことができます。

推定完了時間:
シナリオによっては、15 分から 2 時間かかる場合があります。

前提条件

このトラブルシューティングを有効に行うには、次の情報を収集することをお勧めします。
  1. エラー コードとエラー メッセージの全文、断続的に発生するエラー (時々発生するのみ)、または継続的に発生するエラー (常時発生する) であるかどうか。
  2. SQL Server のエラー ログから次の情報を取得できます。
    1. SQL Server マシンの完全修飾ドメイン名 (FQDN)、クラスター化されたインストールの場合は FQDN 仮想名 名前付きインスタンスを使用している場合は、インスタンス名をメモします (注: この情報を取得するには、 エラー ログで「Server name is」という文字列を検索します)。
    2. SQL インスタンスがリッスンしているネットワーク ライブラリとポート
      メッセージの例:
      名前付きパイプ : サーバーのローカル接続プロバイダーは、[\\.\pipe\sql\query] で接続を受け入れることができる状態です。
      TCP/IPおよびポート番号: サーバーは [ ::1 1433] でリッスンしています。
  3. SQL Server とクライアント システムからのアプリケーションおよびシステム イベント ログ。
  4. アプリケーションから接続できない場合は、アプリから接続文字列を取得します。 この情報は通常、ASP.net アプリケーションの Web.config ファイルにあります。

チェックリスト

  • SQL Server が起動していることを確認し、SQL Server エラー ログで次のメッセージを確認します。
    SQL Serverは、クライアント接続の準備ができました。 このメッセージは情報提供だけを目的としています。ユーザーによる操作は不要です。
  • IP アドレスを介した基本的な接続を確認し、異常がないことを確認します。
    ping –a <SQL Server マシン>, ping –a <SQL Server の IP アドレス> 問題がある場合は、ネットワーク管理者と問題の解決に取り組んでください。 
  • エラー ログを確認し、SQL が適切なプロトコルで受信待ちしているかどうかをチェックします。
  • UDL ファイルを使用して SQL Server に接続できることを確認します。接続する場合は、接続文字列に問題がある可能性があります。 UDL テストに関する手順の説明については、ページ下部の [UDL ファイルを使用した SQL Server に接続する] オプションを選択します。
  • SQL Server に、他のクライアントシステムや別のユーザー ログインを使用して接続できるかどうかを確認します。接続できる場合は、問題が発生しているクライアントまたはユーザー ログインに原因があると考えられます。 問題が発生しているクライアントに他の原因がないかどうか、Windows イベント ログを確認します。 ネットワーク ドライバが最新の状態であることも確認します
  • ログインが失敗する場合は、ユーザーがサーバー レベルでログインを行っていて、接続しようとしているデータベースに接続するための適切なアクセス権限があることを確認します。

次に、発生する問題を選択して続行します。 

前提条件

このトラブルシューティングを有効に行うには、次の情報を収集することをお勧めします。
  1. エラー コードとエラー メッセージの全文、断続的に発生するエラー (時々発生するのみ)、または継続的に発生するエラー (常時発生する) であるかどうか。
  2. SQL Server のエラー ログから次の情報を取得できます。
    1. SQL Server マシンの完全修飾ドメイン名 (FQDN)、クラスター化されたインストールの場合は FQDN 仮想名 名前付きインスタンスを使用している場合は、インスタンス名をメモします (注: この情報を取得するには、 エラー ログで「Server name is」という文字列を検索します)。
    2. SQL インスタンスがリッスンしているネットワーク ライブラリとポート
      メッセージの例:
      名前付きパイプ : サーバーのローカル接続プロバイダーは、[\\.\pipe\sql\query] で接続を受け入れることができる状態です。
      TCP/IPおよびポート番号: サーバーは [ ::1 1433] でリッスンしています。
  3. SQL Server とクライアント システムからのアプリケーションおよびシステム イベント ログ。
  4. アプリケーションから接続できない場合は、アプリから接続文字列を取得します。 この情報は通常、ASP.net アプリケーションの Web.config ファイルにあります。

チェックリスト

  • SQL Server が起動していることを確認し、SQL Server エラー ログで次のメッセージを確認します。
    SQL Serverは、クライアント接続の準備ができました。 このメッセージは情報提供だけを目的としています。ユーザーによる操作は不要です。
  • IP アドレスを介した基本的な接続を確認し、異常がないことを確認します。
    ping –a <SQL Server マシン>, ping –a <SQL Server の IP アドレス> 問題がある場合は、ネットワーク管理者と問題の解決に取り組んでください。 
  • エラー ログを確認し、SQL が適切なプロトコルで受信待ちしているかどうかをチェックします。
  • UDL ファイルを使用して SQL Server に接続できることを確認します。接続する場合は、接続文字列に問題がある可能性があります。 UDL テストに関する手順の説明については、ページ下部の [UDL ファイルを使用した SQL Server に接続する] オプションを選択します。
  • SQL Server に、他のクライアントシステムや別のユーザー ログインを使用して接続できるかどうかを確認します。接続できる場合は、問題が発生しているクライアントまたはユーザー ログインに原因があると考えられます。 問題が発生しているクライアントに他の原因がないかどうか、Windows イベント ログを確認します。 ネットワーク ドライバが最新の状態であることも確認します
  • ログインが失敗する場合は、ユーザーがサーバー レベルでログインを行っていて、接続しようとしているデータベースに接続するための適切なアクセス権限があることを確認します。

次に、発生する問題を選択して続行します。 

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

  • SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからないかアクセスできません。 インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください (プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 – 指定された Server/Instance の位置を特定しているときにエラーが発生しました)
  • SQL Server Native Client Data Link エラー
    ---------------------------
    [Microsoft SQL Server Native Client 10.0]: ログイン タイムアウトが時間切れになりました
    [Microsoft SQL Server Native Client 10.0]: SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからないかアクセスできません。 インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 詳細については、SQL Server オンライン ブックを参照してください。
    [Microsoft SQL Server Native Client 10.0]: SQL Server ネットワーク インターフェイス: 指定された Server/Instance の位置を特定しているときにエラーが発生しました [xFFFFFFFF]。
  • SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからないかアクセスできません。 インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください (プロバイダー: TCP プロバイダー、エラー: 0 - 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。または接続済みのホストが応答しなかったため、確立された接続は失敗しました。) (Microsoft SQL Server、エラー: 10060)
  • SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからないかアクセスできません。 インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください (プロバイダー: 名前付きパイプのプロバイダー、エラー: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 つまたは複数のエラー メッセージが表示されます。

  • タイムアウトが発生しました。 処理が完了する前にタイムアウトの期間が経過したか、サーバーが応答していません。
  • System.Data.SqlClient.SqlException (0x80131904): 接続がタイムアウトしました。 ログイン前のハンドシェイクの確認を実行しようとしている間にタイムアウト期間が過ぎました。 ログイン前のハンドシェイクに失敗したか、サーバーが時間内に応答できなかった可能性があります。 このサーバーへの接続の試行に費やされた時間 - [ログイン前] 初期化 = 23; ハンドシェイク = 14979; ---> System.ComponentModel.Win32Exception (0x80004005): 待ち操作がタイムアウトになりました
  • System.Data.SqlClient.SqlException (0x80131904): タイムアウトが発生しました。 処理が完了する前にタイムアウトの期間が経過したか、サーバーが応答していません。 ---> System.ComponentModel.Win32Exception (0x80004005): 待ち操作がタイムアウトになりました
  • 接続がタイムアウトしました。 ログイン前のハンドシェイクの確認を実行しようとしている間にタイムアウト期間が過ぎました。 ログイン前のハンドシェイクに失敗したか、サーバーが時間内に応答できなかった可能性があります。 このサーバーへの接続の試行に費やされた時間 - [ログイン前] 初期化 = 21036; ハンドシェイク = 0; (Microsoft SQL Server, Error: -2)

次のようなエラーが表示される場合があります:[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: 接続文字列またはサーバー名のダイアログ ボックスに指定したサーバー名が正しくない

問題が解決しない場合は、このセクションの他の原因を確認します。
 

原因 2: クライアント マシンのエイリアスが正しくない

エイリアスは通常、代替名で SQL Server に接続する必要がある場合、またはネットワーク内に名前解決の問題がある場合に使われます。 クライアント マシン上のエイリアスが正しくない場合、アプリケーションから誤ったサーバーに接続する原因となり、処理が失敗します。
 
引き続き問題が発生する場合は、お使いのインスタンス タイプ (既定または名前付きインスタンス) に応じ、このセクション内のその他の原因を確認してください。

原因 3 (既定のインスタンス): SQL Server インスタンスのポートをブロックするクライアントとサーバー間のファイアウォールは次で受信待ちしています。

既定のインスタンス: 既定のインスタンスは通常、ポート 1433 で実行します。 一部のインストールでは、SQL インスタンスの実行に非標準ポート (1433 以外) も使用します。 ファイアウォールによって、このいずれかのポートがブロックされている場合があります。

原因 4 (名前付きインスタンス): SQL Browser が開始されていない

SQL Server の名前付きインスタンスに接続されているクライアント アプリケーションは、SQL が実行しているシステムで SQL Browser サービスを使用して、SQL が受信待ちしているポートを列挙します。 この Browser サービスが開始されていないと、接続は失敗する可能性があります。 
SQL Browser サービスがすでに開始されている場合は、次の手順にしたがって、UDP ポート 1434 がファイアウォールによってブロックされていないかどうか確認します。

原因 5 (名前付きインスタンス): SQL Browser によって使われる UDP ポート 1434 がネットワーク上でブロックされている

SQL インスタンスが名前付けインスタンスの場合は、動的ポートまたは静的ポートのいずれかを使用するように設定されています。 いずれの場合でも、基になるネットワーク ライブラリは、UDP ポート 1434 から、SQL Server マシンで SQL Browser サービスのクエリを実行し、名前付きインスタンスのポート番号を列挙します。 クライアントとサーバー間のファイアウォールによって UDP ポートがブロックされると、クライアント ライブラリは接続の要件であるポートを判断できないため、接続は失敗します。 
問題は解決しましたか?
 
 
 
次に、既定のインスタンスおよび名前付きインスタンスへ正常に接続するための Windows ファイアウォールの必要な構成を示す簡単なスクリーンショットを示します。
  • Windows 2012 R2 サーバーの既定のポート 1433 で受信待ちしている SQL Server の既定のインスタンス このシナリオでは、Windows ファイアウォールの TCP ポート 1433 に例外が追加されていることを確認する必要があります。
    1. SQL Server の既定のインスタンスをホストするシステムで、Windows ファイアウォール を開き、[受信の規則]の下の [新しい規則] をクリックします。
      Inound rules
       
    2. ポート オプションを選択し、[次へ] をクリックします。
      InboundRulePort
       
    3. 次の画面での操作:
      • プロトコルに [TCP] を選択します。
      • [特定のローカル ポート] を選択し、値に 1433 を指定し、[次へ] をクリックします。
        TCP1433
         
    4. 次の画面で、[接続を許可する]を選択し、Next[次へ] をクリックします。
      
      AllowConnection
       
    5. 次の画面で、お使いの環境に最適なオプションを選択し、[次へ] をクリックします。
      NewInboundRule
       
    6. 次の画面で、規則に名前を付け、今後の参照用にわかりやすい説明を記載して、[完了] をクリックします。
       
      NewInboundRuleName
       

    7. 終了したら、作成した規則が表示され、既定で有効になります。
      EnableInboundRule
       
  • UDP ポート 1434 の例外を追加して、SQL Server の名前付きインスタンスへの接続を有効にする
    1. SQL Server の既定のインスタンスをホストするシステムで、Windows ファイアウォール を開き、受信の規則] の下の [新しい規則]をクリックします。
      Inound rules
       
    2. [ポート] オプションを選択し、[次へ] をクリックします。
      InboundRulePort
       
    3.  次の画面での操作:
      • プロトコルに [UDP] を選択します。
      • [特定のローカルポート]を選択し、値に 1434 を指定し、[次へ]をクリックします。
        NewInboundUDP
         
    4. 次の画面で、[接続を許可する]を選択し、[次へ] をクリックします。
      AllowConnection
       
    5. 次の画面で、お使いの環境に最適なオプションを選択し、[次へ] をクリックします。
      NewInboundRule
       
    6. 次の画面で、規則に名前を付け、今後の参照用にわかりやすい説明を記載して、[完了]をクリックします。
      NewInboundName2
       
    7. 終了したら、作成した規則が表示され、既定で有効になります。
      EnableInboundRule2
       
問題は解決しましたか?

  1. SQL Server 構成マネージャーのコンソール ペインで、[SQL Server ネットワーク構成]、[<インスタンス名> のプロトコル] を順に展開し、[TCP/IP] をダブルクリックします。
  2. [IP アドレス] タブの [TCP/IP プロパティ] ダイアログ ボックスに、IP1IP2 という形式で IPAll までの複数の IP アドレスが表示されます。 このうちの 1 つが、ループバック アダプターの IP アドレス 127.0.0.1 です。 追加の IP アドレスがコンピューターの各 IP アドレスとして表示されます (おそらく IP バージョン 4 と IP バージョン 6 の両方のアドレスが表示されます)。 各アドレスを右クリックし、[プロパティ] をクリックして、構成する IP アドレスを識別します。
  3. [TCP 動的ポート] ダイアログ ボックスに 0 が表示されている場合、データベース エンジンが動的ポートで受信待ちしていることを意味します。 特定の番号が含まれる場合は、データベース インスタンスが静的ポートで受信待ちしていることを意味します。
    TCPDynamicPorts
     
詳細については、以下を参照してください。

問題は解決しましたか?
ダウンロードの場所PortqryUI
  1. クライアント マシンで PortqryUI ツールを起動します (接続問題が発生しているマシンで、Web アプリの場合は IIS サーバー)。
  2. SQL Server インスタンスのサーバー名または SQL 仮想サーバー名を [Destination IP or FQDN to query] (クエリを実行する宛先 IP または FQDN) に指定します
  3. [Query predefined service] (定義済みサービスのクエリ) を選択して、ドロップダウン リストから [SQL Service] を選択します。
  4. [Query] (クエリ) をクリックし、出力を確認して追加のポイントとして次の表を使用します。 
 インスタンスの種類 Portqry からの出力 接続問題についての考えられる原因 対処方法
 既定のインスタンス TCP ポート 1433 (ms-sql-s サービス): 受信待ちしていない  次のいずれかを選択します。
  • SQL が開始されていない
  • TCP/IP が SQL Server プロトコル リストで有効にされていない
  • SQL が既定以外のポートで受信待ちしている (エラー ログを確認)
  • クライアントとサーバー間のファイアウォールがポートをブロックしている 
  •  SQL が開始していることを確認する
  • SQL エラー ログでポート番号を確認し、<servername>, portnumber の形式で、お使いの接続文字列に使用します。
  • ネットワーク / Windows の管理者と一緒に、TCP ポート 1433 がネットワークのファイアウォールでブロックされているか、SQL Server システムの Windows ファイアウォールでブロックされているかを確認します。 
    : ファイアウォールの問題を解決する場合は、ページ下部の [ファイアウォールの問題の解決] オプションを選択してください。 
 既定のインスタンス TCP ポート 1433 (ms-sql-s サービス): 受信待ち
  •  クライアント ライブラリは SQL Server マシンに正常に接続できますが、アプリケーション層内に何らかの原因があり、問題が発生している可能性があります。
 次を確認します。
  • サーバー名が接続文字列に正しく指定されている
  • 接続文字列がポート番号を使用している場合は、接続文字列で正しく指定されていること
  • ボックスに古いエイリアスが定義されていないかどうか 
 名前付きインスタンス UDP ポート 1434 (ms-sql-m サービス): フィルター適用済み 次のいずれかを選択します。
  • SQL 名前付きインスタンスが開始されていません。
  • SQL Browser が、SQL インスタンスをホストしているシステムで開始されていません。
  • UDP ポート 1434 が、SQL Server上またはクライアントとサーバー間のネットワーク上でブロックされています。 
  •  サービスが開始されています。
  • SQL Browser が開始されていない
  • ネットワーク / Windows の管理者と一緒に、UDP ポート 1434 がネットワークのファイアウォールでブロックされているか、SQL Server システムの Windows ファイアウォールでブロックされているかを確認します。 
    注: ファイアウォールの問題を解決する場合は、ページ下部の [ファイアウォールの問題の解決] オプションを選択してください。
 名前付きインスタンス UDP ポート 1434 が受信待ちしています
  •  クライアント ライブラリは SQL Server マシンに正常に接続できますが、アプリケーション層内に何らかの原因があり、問題が発生している可能性があります。
  •  サーバー名が接続文字列に正しく指定されている
  • ポート番号が接続文字列に誤って指定されている
  • ボックスに古いエイリアスが定義されていないかどうか 

出力例:
 

問題は解決しましたか?


SSPI (Security Support Provider Interface) は、TCP/IP ソケットなどの任意の汎用データ トランスポート層経由で委任と相互認証を可能にする Windows API のセットです。 したがって、Windows オペレーティング システムを実行するコンピューターは、SSPI を使用することにより、未加工のデータ バイトを送信できる任意のトランスポート層経由で、あるコンピューターから別のコンピューターにユーザー セキュリティ トークンを安全に委任できます。
"SSPI コンテキストを生成できません" というエラーが発生するのは、SSPI が Kerberos 認証 を使用して TCP/IP 経由で委任をする際に、SQL Server を実行している委任先のコンピューターに、ユーザー セキュリティ トークンを正しく委任するために、Kerberos 認証が必要な操作を完了できない場合です。
Kerberos の操作を完了できない場合の追加の情報については、ページ下部の [Kerberos 問題による認証が失敗する問題のトラブルシューティング] オプションを選択して、手順を確認および実行してください。


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

 考えられる原因  推奨される解決方法
 同じマシンでのダブルホップ シナリオ: ダブルホップを実行しようとしても、Kerberos ではなく NTLM 資格情報が使用されています。  同じマシンでのダブルホップ シナリオについては、次の手順に沿って DisableLoopbackCheck または BackConnectionHostNames レジストリ エントリを追加します。
 複数マシンでのダブルホップ シナリオ: SPN 問題によって Kerberos 接続が失敗すると、エラーが発生する場合があります。 ページ下部の [Kerberos 問題によって認証が失敗する問題のトラブルシューティング] オプションを選択し、詳細を参照します。
 ダブルホップの関連がない場合  ダブルホップの関連がない場合は、重複した SPN があり、クライアントが LocalSystem またはその他のマシン アカウントとして実行しており、Kerberos 資格情報の代わりに、NTLM 資格情報を取得していることも意味する可能性があります。

オプション「Kerberos の問題による認証エラーのトラブルシューティング」を選択し、SPN の問題を診断して解決します。
 Windows ローカル セキュリティ ポリシーは、既定の設定のローカル アカウントでのマシン アカウントの使用を防ぐように設定されている場合があります。 Windows 2008 R2/Windows 7 以降では、ローカル セキュリティ ポリシー | セキュリティ オプション | ネットワーク セキュリティが、既定の設定のローカル アカウントでのマシン アカウントの使用を防ぐように設定できます。 この場合、代わりに匿名の資格情報を使用します。

 

問題は解決しましたか?

LSASS は SQL Server サービス アカウントの資格情報を使用して、セキュリティ トークンを復号化できなかったことを意味します。 主な理由は、SPN が誤ったアカウントに関連付けられていることです。

SPN 問題を診断および解決するには、[Kerberos 問題による認証が失敗する問題のトラブルシューティング] オプションを選択して、続行します。

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

ソース: NETLOGON
日付: 2012/08/12 20:22:16
イベント ID: 5719
タスクのカテゴリ: なし
レベル: エラー
キーワード: クラシック
ユーザー: なし
コンピューター: <コンピューターの名前>
詳細: 次の理由のため、このコンピューターはドメイン内のドメイン コントローラーとのセキュリティで保護されたセッションをセットアップできませんでした。 リモート プロシージャ コールはキャンセルされました。 これにより、認証の問題が発生する可能性があります このコン ピュータがネットワークに接続されていることを確認してください。 問題が解決されない場合は、ドメイン管理者に問い合わせてください。 
空の文字列は、SQL が資格情報を LSASS に渡そうとしたが、何らかの問題があったことを意味します。 LSASS を利用できなかったか、ドメイン コントローラーに通信できませんでした。 
クライアントおよびサーバー マシンのイベント ログを確認し、問題の発生した時間帯のネットワークまたは Active Directory の関連メッセージに問題がないかどうかを確認します。問題が確認された場合は、ドメイン管理者と解決を図ります。

 

問題は解決しましたか?

 

ドメイン名が指定されていない場合は、SQL ログインが失敗します。 ドメイン名が指定されている場合は、Windows 統合ログインの失敗になります。 原因と考えられる解決策について、次の表を参照してください。


 原因  解決手順
要求されたデータベースがオフラインか、利用できません SQL Server Management Studio で、データベースの許可と可用性を確認します。
ユーザーに、要求されたデータベースへのアクセス権限がありません。 システム管理権限を持つ別のユーザーで接続を試行します

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

問題は解決しましたか?

このエラー メッセージは、偽装されていないユーザー アカウントによる匿名ログインやフォームのログインを使用する IIS アプリケーションで表示されることもあります。 代わりに、IIS 匿名 (IUSR) アカウントまたは、アプリ プール アカウントでは、偽装を使用します。 IUSR アカウントはローカル アカウントですが、アプリ プール アカウントもローカル アカウントの場合があります。

このエラーは通常、ユーザーがドメイン アカウントではなく、ローカル アカウントにログインしている場合に発生します。 既定の設定のサービスへ接続している場合は、資格情報を満たしている場合があります。 一部のケースでは、このアカウントをログイン用としてバックエンド サーバーに追加することができます。 他のケースでは、ドメイン アカウントでログインして、リモート サービスにアセスできる適切な許可をプロビジョニングすることも可能です。

問題は解決しましたか?

Kerberos 認証の失敗は、さまざまな原因によって引き起こされます。 主要の原因およびそれに対応する解決方法は次のとおりです。

 問題の種類  推奨される解決方法
 SPN 問題:
  • SPN が欠損している: SPN が Active Directory で登録されていない
  • SPN エントリが誤っている: SPN は存在しているが、ポート番号に誤りがあるか、SQL Server アカウント以外の別のアカウントに存在している。
  • SPN の重複: SPN が Active Directory の複数のアカウントに存在している 
次の段落の「Kerberos 構成マネージャーを使用して SPN および委任問題を診断および修復するを確認し、SPN の問題を診断および解決します。

注: SPN、Kerberos、およびその他関連する概要については、次の KB 文書の情報を参照してください。
"SSPI コンテキストを生成できません" エラー メッセージのトラブルシューティング方法
 SQL Service アカウントが委任を実行するために信頼されていない。 ローカル システム アカウントを使用している場合、中間サーバーは Active Directory で信頼されている必要があります。 Kerberos 構成マネージャーの委任タブを使用して、Active Directory 管理者と、アカウントの委任を有効にするよう取り組みます。 詳細については、次の段落の「Kerberos 構成マネージャーを使用して SPN および委任問題を診断および修復する」を確認してください。 
正しくない名前解決: サーバー名は、ネットワークの DNS サーバーに登録された IP アドレスではなく、別の IP アドレスで解決される場合があります。 ping -a <your_target_machine> (つまり、IPv 4 および IPv 6 では -4 と -6 を使用)
ping -a <Your_remote_IPAddress> nslookup (ローカル、コンピューター名および IP アドレスを複数回入力する)

返された結果に対する矛盾と不一致を探します。 SQL 接続では、ネットワーク上の DNS 設定の正確性が非常に重要です。 DNS に誤りがあると、あらゆる種類の接続問題が発生する可能性があります。 例として、「"Cannot Generate SSPI Context” error message, Poisoned DNS ("SSPI コンテキストを生成できない」 エラー メッセージ、DNS ポイズニング)」を参照してください。
ファイアウォールまたは他のネットワーク デバイスによって、クライアントからドメイン コントローラーへの接続がブロックされている。 SPN は Active Directory に保存されています。クライアントが AD と通信できない場合、接続は続行できなくなります。  追加情報については、次のリンクを参照してください。

Kereberos 構成マネージャーを使用して、SPN と委任の問題について、診断および修正します

  1. Microsoft® Kerberos Configuration Manager for SQL Server® をダウンロードして、クライアント コンピュータにインストールします。
  2. お使いの Active Directory で SPN を作成するために十分な権限のあるドメイン アカウントをできるだけ使用して、ツールを起動します。 次の画像を参照してください。

    KerberosConfigManager

  3. Kerberos エラーに関連する情報を収集する SQL Server に接続します。

    ConnectKerberosConfigManager

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

    システム: 基本的なシステム情報があります。

    KerConfigManager_System

    SPN: ターゲット サーバーで見つかったそれぞれの SQL インスタンスに関する SPN 情報を示し、次に記載の各種オプションを提供します。 このタブを使用して、不足している SPN や間違った構成の SPN を検索し、[生成] ボタンまたは [修正] ボタンを使用して、これらの問題を修正します。

    KerConfigManager_SPN

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

      KerConfigManager_GenerateSPN

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

      generateSPNs の内容は、次に類似しています。

      :: 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>.comSetSPN -s MSSQLSvc/<HostName>.<DomainName>.com UserName

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

    • [Fix] (修正) オプションは、SPN を追加する権限がある場合に SPN を追加し、次のツール ヒントを表示します。

      KerbConfigManager_Fix
       
    • [Delegation] (委任) タブ: このタブは、委任に関するサービス アカウントの構成の問題を示します。 リンクしたサーバー問題のトラブルシューティングをする場合などに便利です。 たとえば、SPN が正常にチェック アウトしても、リンクしたサーバー クエリでの問題が引き続き発生する場合、サービス アカウントが資格情報を委任するよう設定されていないことを示します。 詳細については、SQL Server オンライン ブックに記載の「リンク サーバーの委任用の構成」のトピックを参照してください。

      KerbConfigManger_Delegation
       

  5. SPN を修正後、Kerberos 構成マネージャー ツールに戻り、[SPN] と [Delegation] (委任) タブにエラー メッセージが表示されていないことを確認し、アプリケーションから接続を再試行します。

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

問題は解決しましたか?

タイムアウトは処理にかかる時間が、許可されている時間以上かかる場合に発生します。 基本的には、長時間待ち続けることがないよう処理を中止して、他の問題をブロックしてアプリケーションをハングさせることができます。 接続性の観点からみると、基本的に次の 2 つが考えられます。 1 つは接続のタイムアウト、もう 1 つはクエリのタイムアウトです。 エラー メッセージの完全なコール スタックを最初に確認し、この問題が接続のタイムアウトか、コマンドのタイムアウトかを判断します。

解決手順
このような問題は、環境または SQL Server に関連します。 たとえば、ネットワークの速度が遅い可能性や、クエリ パフォーマンスの問題が原因である場合があります。 ここでは厳密な規則はありませんが、問題の原因を特定するためには詳細な調査が必要な場合があります。 クエリタイムアウトを引き上げる方法は、接続タイムアウトを引き上げるよりも非常に一般的です。 これは、データベースに接続を試みる場合、接続は一般的に、非常に高速になります (通常は数ミリ秒の範囲)。



 種類  対処方法:
接続タイムアウト
  1. お使いのアプリケーションで、ConnectionTimout を引き上げます。
  2. Portqry といったツールを使用して、SQL で使用されるポートがネットワークでブロックされているかどうかを確認します。  使用方法の手順の下にある [SQL Server で PortqryUI ツールを使用する] オプションを選択します。 
コマンドのタイムアウト
  1.  お使いのアプリケーションで、CommandTimeout 値を引き上げて、バックエンドで実行されているクエリも微調整します。

その他のヒントおよび推奨: トラブルシューティング タイムアウトが発生しました

問題は解決しましたか?

接続が適切にクローズされていない場合に通常発生し、完全なエラーは次のように表示されることがあります。

System.InvalidOperationException: タイムアウトが発生しました。 プールから接続を取得する前にタイムアウトになりました。

 

プールされた接続がすべて使用中で、プール サイズの制限値に達した可能性があります。

この問題は通常、次の MSDN のブログ記事に記載されているベスト プラクティスにしたがうことで回避できます。 タイムアウトが発生しました。 プールから接続を取得する前にタイムアウト期間が経過しました

問題は解決しましたか?

UDL ファイルを使用すると、クライアントまたはその他のシステムから SQL Server に簡単で有効な方法でテスト接続できます。

  1. オプションを有効にすると、Windows エクスプローラーでファイル拡張子を表示できます。 方法:
    1. Windows 8 以降のシステム: [コントロール パネル] の [エクスプローラー] オプションを開くか、Windows 検索で「非表示」と入力し、既知のファイル タイプについては [表示] タブで [登録されている拡張子は表示しない] をオフにします。
    2. Windows 7 以前のバージョン: この KB を参照してください。
      Win7ViewExtFile
       
  2. .udl ファイルを作成するフォルダーを開きます (例: c:\temp)
  3. 新しいテキスト ファイルを作成し、拡張子を .txt から .udl に変更します (ファイル名拡張子を変更する際に警告メッセージが表示されたら [はい] をクリック)
  4. 手順 3 で取得した .udl ファイルをダブル クリックして、次の手順を実行します。
    1. [プロバイダー] タブで、アプリケーションを使用しているプロバイダーを選択します (例: SQL Server Native Client)
    2. [接続] タブで、お使いのアプリケーションに関連する SQL Server と残りのパラメーターを選択するか入力します。
  5. テスト接続 をクリックします。

追加情報やスクリーンショットについては、次の MSDN の投稿を参照してください。

Basics first (基本的な手順): "UDL Test"

問題は解決しましたか?

おめでとうございます。 このガイドのヘルプが問題解決のお役に立てば光栄です。

このガイドで問題を解決できず、申し訳ありません。 Microsoft SQL Community でサポートを受けることをお勧めします。

以下に、有用である可能性がある追加リソースを示します。