次の方法で共有


ユーザーが 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 プロトコル経由でリモート接続することはできません。

    Note

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

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

さらに、次のメッセージが SQL Server エラー ログ ファイルに記録されます。

  • 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

Note

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 の起動時のエラー メッセージは適宜変更されます。