ユーザーは、TCP/IP プロトコルを使用してリモートからSQL Serverに接続できない可能性があります

この記事は、TCP/IP プロトコルを使用してリモートからSQL Serverに接続できない問題を解決するのに役立ちます。

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

現象

Microsoft SQL Serverを使用すると、次の 1 つ以上の現象が表示される場合があります。

  • TCP/IP 経由で接続できるのは、 CONTROL SERVER アクセス許可を持つユーザー ( たとえば、syadmin 固定サーバー ロールのメンバー) のみです。 このアクセス許可を持っていないユーザーは、Windows または SQL Server 認証を使用して TCP/IP プロトコル経由でリモート接続することはできません。

    注:

    昇格されたユーザー接続は 、sys.dm_exec_sessions (Transact-SQL) 動的管理ビュー (DMV) にのみ表示されますが、 sys.dm_exec_connections (Transact-SQL) ビューには表示されません。

  • 名前付きパイプ プロトコルを使用したローカル接続とリモート接続と、共有メモリ プロトコルを使用したローカル接続の両方が引き続き正常に動作します。

さらに、次のメッセージは、SQL Server Errorlog ファイルに記録されます。

  • 起動時SQL Server:

    エラー: 26023、重大度: 16、状態: 1。
    サーバー TCP プロバイダーが ['any'ipv6< 1963> ] でリッスンできませんでした。 Tcp ポートは既に使用されています。
    エラー: 9692、重大度: 16、状態: 1。
    Service Broker プロトコル トランスポートは、別のプロセスで使用されているため、ポート 1963 でリッスンできません。

  • 失敗したログインの場合:

    SQL Server 2008 以降のバージョン:

    エラー: 18456、重大度: 14、状態: 11。
    ユーザー 'MyDomain\TestAcc' のログインに失敗しました。 理由: トークンベースのサーバー アクセス検証がインフラストラクチャ エラーで失敗しました。 以前のエラーを確認します。

原因

このエラーは、SQL Server インスタンスが使用するように構成されているのと同じポートを使用して Service Broker の TCP エンドポイントを構成するときに発生します。 エンドポイントの一覧を取得するには、次のクエリを実行します。

SELECT * FROM sys.tcp_endpoints

注:

sys.tcp_endpoints (Transact-SQL) に関するオンライン ブックトピックで説明されているように、このビューには、SQL Server インスタンスが現在使用するように構成されているポートとプロトコルに関する情報は含まれません。 その情報を見つけるには、「SQL Server 構成マネージャー」を参照してください。

解決方法

  • 方法 1: DROP ENDPOINT (Transact-SQL) コマンドを使用して、問題の原因となっているエンドポイントを削除します。

    たとえば、という名前 TestEP のエンドポイントを削除するには、次のコマンドを使用できます。

    DROP ENDPOINT TestEP
    
  • 方法 2: ALTER ENDPOINT (Transact-SQL) コマンドを使用して別のポートを使用するようにエンドポイントを変更します。

    たとえば、別のポートを使用するようにという名前 TestEP のエンドポイントを変更するには、次のコマンドを使用できます。

    ALTER ENDPOINT TestEP as tcp (listener_port=1980)
    

詳細

同様の問題は、データベース ミラーリング用に作成された TCP エンドポイントなど、他の TCP エンドポイントでも発生する可能性があり、起動時SQL Serverエラー メッセージはそれに応じて変更されます。