Udostępnij za pośrednictwem


Użytkownicy mogą nie być w stanie połączyć się zdalnie z programem SQL Server przy użyciu protokołu TCP/IP

Ten artykuł pomaga rozwiązać problem polegający na tym, że nie można połączyć się zdalnie z programem SQL Server przy użyciu protokołu TCP/IP.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2018930

Symptomy

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

  • Tylko użytkownicy z uprawnieniami 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 uwierzytelniania systemu Windows lub programu SQL Server.

    Uwaga 16.

    Zauważysz, że podniesione połączenia użytkowników 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 przy użyciu protokołu nazwanych potoków, a także połączenia lokalne korzystające z protokołu pamięci współdzielonej nadal działają prawidłowo.

Ponadto w pliku dziennika błędów programu SQL Server są rejestrowane następujące komunikaty:

  • Po uruchomieniu programu SQL Server:

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

  • W przypadku nieudanych logowań:

    SQL Server 2008 i nowsze wersje:

    Błąd: 18456, Ważność: 14, Stan: 11.
    Logowanie użytkownika "MyDomain\TestAcc" nie powiodło się. Przyczyna: Sprawdzanie poprawności dostępu serwera opartego na tokenach nie powiodło się z powodu błędu infrastruktury. Sprawdź 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, z którego skonfigurowano wystąpienie programu SQL Server. Listę punktów końcowych można uzyskać, wykonując następujące zapytanie:

SELECT * FROM sys.tcp_endpoints

Uwaga 16.

Zgodnie z wyjaśnieniem w temacie Książki online na temat sys.tcp_endpoints (Transact-SQL) ten widok nie zawiera informacji na temat portów i protokołów, które jest obecnie skonfigurowane do użycia przez wystąpienie programu SQL Server. Aby znaleźć te informacje, zobacz SQL Server Configuration Manager.

Rozwiązanie

  • Metoda 1. Usunięcie punktu końcowego powodującego problem przy użyciu 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 TCP, takich jak te utworzone na potrzeby dublowania bazy danych, a komunikaty o błędach podczas uruchamiania programu SQL Server zostaną odpowiednio zmienione.