次の方法で共有


SQL Server での断続的または定期的な認証の問題

Note

トラブルシューティングを開始する前に、 前提条件 を確認し、チェックリストを確認することをお勧めします。 詳細については、 セルフ ヘルプ記事を参照してください。

この記事では、SQL Server 接続での断続的な認証の問題の一般的な原因について説明し、解決策を示します。

現象

SQL Server 接続の断続的または定期的な認証の問題は、ユーザーまたはアプリケーションが SQL Server データベースでの認証に散発的な困難に直面した場合に発生します。 これにより、データ アクセスとアプリケーション機能が中断されます。

最も一般的なエラー メッセージ

  • SSPI コンテキストを生成できません

  • ユーザーはログインできませんでした

    • ユーザー '' はログインできませんでした
    • ユーザー 'NT AUTHORITY\ANONYMOUS LOGON' はログインできませんでした。
    • ユーザー '<UserName>' のログインに失敗しました
    • ユーザー '<Domain>\<UserName>' のログインに失敗しました
    • ログインできませんでした。 ログインは信頼されていないドメインからのものであり、Windows 認証では使用できません。

原因

最も一般的な問題は、SQL Server のパフォーマンスまたはドメイン コントローラーの応答が遅い場合に発生します。 NT LAN Manager (NTLM)を使用している場合、ローカル セキュリティ機関サブシステム サービス (LSASS) にボトルネックがあり、一度に処理できる新しい接続の数が制限されます。 その他の要求はバックアップされ、タイムアウトになる可能性があります。ウイルス対策などの一部の原因は証明が難しい場合がありますが、それでも一般的であり、他の調査手段が効果的でない場合は、厳しい証拠がなくても調査する必要があります。

トラブルシューティング手順

問題は断続的であるため、Kerberos サービス プリンシパル名 (SPN) などの構成が正しい可能性があります。 この問題を解決するには、次のトラブルシューティング手順を試してください。

複数のドメインまたはデータ センター間の待機時間の違い

複数のドメインまたはデータ センターが関係している場合は、ローカル ドメインまたはデータ センターのユーザーに問題が発生していないかどうかを確認します。他のドメインまたはデータ センターのユーザーが問題を発生させないようにします。 その場合は、データ センターまたはドメイン コントローラー間の通信待ち時間を示している可能性があります。 次のコマンドを使用して問題を調査します。

  • ネットワーク待機時間を確認するには、 pingを使用します。 例えば次が挙げられます。

    1. コマンド ping <DatabaseServer>を実行します。

    2. 時間列を見て、その時刻を他のドメインまたはデータ センターの時刻と比較します。

      Pinging <DatabaseServer> [10.10.10.3] with 32 bytes of data:
      Reply from 10.10.10.3: bytes=32 time=68ms TTL=116
      Reply from 10.10.10.3: bytes=32 time=67ms TTL=116
      Reply from 10.10.10.3: bytes=32 time=67ms TTL=116
      
  • 資格情報検証の待機時間の問題をテストするには、さまざまなユーザーと共に Runas を使用します。 例えば次が挙げられます。

    1. runas /user:<DomainName>\<UserAccountName> cmd.exe を実行します。
    2. コマンド プロンプトが表示されたら、ユーザーのパスワードを入力します。

これらのコマンドを使用してテストしても問題が解決しない場合、問題は SQL Server ではなく、ネットワーク インフラストラクチャまたはドメイン コントローラーのパフォーマンスにあります。

SQL Server エラー ログでパフォーマンスの問題を探す

SQL Server エラー ログでは、I/O に 15 秒を超える時間がかかることを示すエントリなど、SQL Server のパフォーマンスの問題が表示される場合があります。 SQL パフォーマンス チームは、 PSSDIAG を実行して分析します。 ネットワーク トレースで SQL Server 応答の遅延が明らかになった場合は、これを行う必要がある場合があります。

エラー ログには、Active Directory のパフォーマンスの問題を示す次のエラー ログなど、ドメイン関連のその他のエラーも含まれる場合があります。

SSPI handshake failed with error code 0x80090311 while establishing a connection with integrated security; the connection has been closed.
SSPI handshake failed with error code 0x80090304 while establishing a connection with integrated security; the connection has been closed.

次のオペレーティング システムのエラー コードは、エラーの原因を示しています。

  • エラー -2146893039 (0x80090311): 認証に対して機関に接続できませんでした。

  • エラー -2146893052 (0x80090304): ローカル セキュリティ機関に接続できません。

クライアント システムのイベント ログでネットワーク エラーを確認する

システム イベント ログには、Kerberos、ローカル セキュリティ機関 (LSA)、Netlogon イベントなど、さまざまなイベントがあります。 これらのイベントは、コンピューターがしばらくの間ドメイン コントローラーに接続できないことを示します。 見つけやすくするには、 Error、Warning、および Critical イベントのみをフィルター処理します。 イベント時間は、停止の時間の前後である必要があります。 一致するものがある場合は、Active Directory の問題である可能性があります。

場合によっては、この問題が SQL Server で発生する可能性があります。 そのマシンのログも確認します。

Source: NETLOGON
Date: <DateTime>
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: SQLPROD01
Description:
This computer was not able to set up a secure session with a ___domain controller in ___domain CONTOSO 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.

セキュリティ イベント ログで、 Event ID 4625 をフィルター処理します。 このイベントには、ログインエラーに関する詳細情報が表示されます。

SQL 接続リング バッファーを収集して確認する

リング バッファーは、SQL Server 上の接続イベントの履歴ログです。これは、障害が発生した後に取得できることを意味します。 多くのイベントには、時間が費やされた場所を示すログイン タイマーが含まれます。

  • ネットワークに費やされた時間は、ネットワークまたはクライアントの待機時間の可能性を示します。
  • Secure Sockets Layer (SSL) またはセキュリティ サポート プロバイダー インターフェイス (SSPI) API に費やされた時間は、Windows セキュリティ サブシステムに関する潜在的な問題を示します。
  • エンキュー時間は、SQL Server のパフォーマンスの問題を示します。

詳細については、「 接続リング バッファーを収集するを参照してください。

接続プール

接続プールがないと、断続的なログイン エラーが発生する可能性があります。

Note

接続プールが不足すると、確立された接続と比較して、NETSTAT出力に多数のTIME_WAIT状態コードが表示されます。

接続プールが有効になっていない場合、クライアントが送信ポートを使い果たしたり、サーバーをオーバーロードしたりすることがあります。 このオーバーロードにより、サーバーは受信接続要求を拒否したり、パフォーマンスの低いドメイン コントローラーをあふれさせたりする可能性があります。

最善の方法は、アプリケーション開発者にアプリケーションで接続プールを使用してもらうことです。 .NET および インターネット インフォメーション サービス (IIS) アプリケーションでは、接続プールは既定で ON になっていますが、何らかの理由でオフになっている可能性があります。

アプリケーションでカスタム プーリング コードを使用することは強くお勧めします。 発生したすべてのカスタム プールの実装に問題がありました。 組み込みの接続プール メカニズムを使用することをお勧めします。

一時的なポートの不足は、断続的な接続タイムアウトの比較的一般的な原因です。

問題: SQL Server マシンのカーネル メモリが不足しています。

解決策: SQL Server Management Studio の Properties ペインで、max サーバー メモリ (MB) を調整します。 max サーバー メモリ (MB) をマシン上の物理メモリより約 4 GB から 8 GB 小さく設定することをお勧めします。 マシン上で複数のインスタンス、IIS、またはその他のアプリケーション サーバーが実行されている場合は、この値を小さくする必要があります。 max サーバー メモリ (MB) の設定に関する推奨事項については、「サーバー メモリ構成オプションを参照してください。

Note

既定値は 2147483647 MB です。つまり、サーバーがオペレーティング システム (OS) のメモリ不足を引き起こす可能性があります。