Udostępnij za pośrednictwem


Użytkownicy mogą nie mieć możliwości zdalnego nawiązywania połączenia z SQL Server przy użyciu protokołu TCP/IP

Ten artykuł pomaga rozwiązać problem polegający na tym, że nie można nawiązać zdalnego połączenia z SQL Server przy użyciu protokołu TCP/IP.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2018930

Symptomy

W przypadku korzystania z usługi Microsoft SQL Server może wystąpić co najmniej jeden z następujących objawów:

  • Tylko użytkownicy, którzy mają uprawnienia CONTROL SERVER (na przykład członkowie stałej roli serwera syadmin ) mogą łączyć się za pośrednictwem protokołu TCP/IP. Użytkownicy, którzy nie mają tego uprawnienia, nie mogą łączyć się zdalnie za pośrednictwem protokołu TCP/IP przy użyciu systemu Windows lub uwierzytelniania SQL Server.

    Uwaga

    Zauważysz, że połączenia użytkownika z podwyższonym poziomem uprawnień są wyświetlane tylko w widoku dynamicznego zarządzania sys.dm_exec_sessions (Transact-SQL), ale nie w widoku sys.dm_exec_connections (Transact-SQL ).

  • Połączenia lokalne i zdalne korzystające z protokołu Nazwane potoki oraz połączenia lokalne korzystające z protokołu pamięci współdzielonej nadal działają prawidłowo.

Ponadto następujące komunikaty są rejestrowane w pliku SQL Server Errorlog:

  • Po uruchomieniu SQL Server:

    Błąd: 26023, ważność: 16, stan: 1.
    Dostawca TCP serwera nie może nasłuchiwać na ['any'ipv6<> 1963]. Port Tcp jest już używany.
    Błąd: 9692, ważność: 16, stan: 1.
    Transport protokołu service brokera nie może nasłuchiwać na porcie 1963, ponieważ jest używany przez inny proces.

  • W przypadku nieudanych logowań:

    SQL Server wersje 2008 i nowsze:

    Błąd: 18456, ważność: 14, stan: 11.
    Logowanie użytkownika "MyDomain\TestAcc" nie powiodło się. Przyczyna: Weryfikacja dostępu do serwera opartego na tokenach nie powiodła się z powodu błędu infrastruktury. Sprawdź, czy nie występują poprzednie błędy.

Przyczyna

Błąd występuje podczas konfigurowania punktu końcowego TCP dla usługi Service Broker przy użyciu tego samego portu, do którego skonfigurowano wystąpienie SQL Server. Listę punktów końcowych można uzyskać, wykonując następujące zapytanie:

SELECT * FROM sys.tcp_endpoints

Uwaga

Jak wyjaśniono w temacie Books Online na temat sys.tcp_endpoints (Transact-SQL), ten widok nie zawiera informacji o portach i protokołach, które SQL Server wystąpienie jest obecnie skonfigurowane do użycia. Aby znaleźć te informacje, zobacz SQL Server Configuration Manager.

Rozwiązanie

  • Metoda 1. Upuść punkt końcowy, który powoduje problem, używając polecenia DROP ENDPOINT (Transact-SQL ).

    Aby na przykład usunąć punkt końcowy o nazwie TestEP , możesz użyć następującego polecenia:

    DROP ENDPOINT TestEP
    
  • Metoda 2. Zmień punkt końcowy, aby użyć innego portu przy użyciu polecenia ALTER ENDPOINT (Transact-SQL ).

    Aby na przykład zmienić punkt końcowy o nazwie TestEP , aby użyć innego portu, możesz użyć następującego polecenia:

    ALTER ENDPOINT TestEP as tcp (listener_port=1980)
    

Więcej informacji

Podobne problemy mogą również wystąpić w przypadku innych punktów końcowych protokołu TCP, takich jak te utworzone na potrzeby dublowania bazy danych, a komunikaty o błędach podczas uruchamiania SQL Server zostaną odpowiednio zmienione.