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