Verbindung zur SQL Server Instanz nicht möglich – was tun?

Einer der schönen Aspekte einer SQL Server Instanz besteht darin, dass diese so konfiguriert werden kann, dass auch ein Zugriff außerhalb der Host-Umgebung auf diese möglich ist. So kann auch eine Verbindung mit einer SQL Server Instanz über das Verwaltungstool SSMS erfolgen, ohne dass der Benutzer zwingend auf der Umgebung, auf welcher die Instanz installiert ist, angemeldet sein muss. Die Instanz wird also von “außen” angesprochen.

Ein gutes Beispiel hierfür wäre eine Windows Server Umgebung, bestehend aus drei Servern. Wird nun auf einem dieser Server eine SQL Server Instanz installiert, kann diese mit Hilfe von SSMS von jedem Server aus erreicht und verwaltet werden.

Um nun eine SQL Server Instanz von “außen” ansprechbar zu machen, müssen nach der Installation gewisse Konfigurationen erfolgen. Diese sind meist nicht direkt ersichtlich und auch in den meisten Fällen der Grund für einen Verbindungsfehler. Darum wollen wir uns in diesem Beitrag etwas näher mit diesen Konfigurationen vertraut machen.

Aktivieren von TCP/IP

Der erste Schritt, um eine SQL Server Instanz für Andere sicht- und erreichbar zu machen, ist das Aktivieren von TCP/IP.

Der Zugriff vom Client auf eine SQL Server Instanz erfolgt immer über ein Netzwerk-Protokoll, auch wenn die Instanz auf dem Computer installiert ist, mit dem Sie sich verbinden. Das hier verwendete Netzwerk-Protokoll ist TCP/IP. Dieses ist allerdings standardmäßig ausgeschaltet und muss manuell aktiviert werden.

Die Aktivierung von TCP/IP erfolgt über den SQL Server Configuration Manager. Dieser wird automatisch mit einer SQL Server Instanz installiert und kann über die Windows-Suche auf dem lokalen Host der Instanz geöffnet werden.

  • Innerhalb des Configuration Managers gibt es den Reiter SQL Server Network Configuration. Öffnen Sie diesen mit einem Linksklick. Hier werden nun alle Protokolle der lokal installierten SQL Server Instanzen aufgelistet. In unserem Fall haben wir eine SQL Server 2019 Instanz mit dem Namen TEST_INSTANCE.

  • Mit einem Klick auf Protocols for TEST_INSTANCE erscheinen auf der rechten Seite nun drei Auswahlmöglichkeiten für ein Protokoll.
  • An unterster Stelle ist TCP/IP mit dem Status “disabled” zu finden. Mit einem Rechtsklick auf TCP/IP kann nun die Option “enable” ausgewählt werden.

Um diese Einstellung zu speichern, ist ein Neustart der Instanz erforderlich. Diese erfolgt ebenfalls über den Configuration Manger:

  • Für den Neustart wählen Sie zunächst mit einem Linksklick den Reiter SQL Server Services. Auf der rechten Seite werden nun alle Services aller lokal installierten Instanzen aufgelistet. Hier kann nun mit einem Rechtsklick die Option “restart” für die laufende Instanz ausgewählt werden.

(Achtung: nicht mit dem SQL Server Agent verwechseln)

Nach dem Neustart der Instanz wurde TCP/IP erfolgreich aktiviert.

Vergeben eines Ports

Der nächste wichtige Schritt, um eine Instanz nach außen hin sichtbar zu machen, ist die Vergabe eines Ports. Ein solcher Port hilft generell dabei, parallele Kommunikationsverbindungen einer oder mehrerer Anwendungen voneinander unterscheiden zu können. Ähnlich wie IP-Adressen zur Adressierung von Rechnern in Netzwerken dienen, adressieren Ports spezifische Anwendungen und ihre Verbindungen, die auf einem Rechner laufen.

Datenpakete, die über eine IP ihr Ziel erreichen, werden von TCP zusammengesetzt und an eine Anwendung übergeben. Da nun mehrere Anwendungen, oder in diesem Fall, SQL Server Instanzen, gleichzeitig eine TCP-Verbindung aufbauen können, muss eine Zuordnung zwischen Datenpaket und Anwendung erfolgen. Zu diesem Zweck wird eine Kennung zwischen Daten und Anwendung definiert, die als Port bezeichnet wird.

Will nun eine Anwendung oder eine SQL Server Instanz zu einem Server Kontakt aufnehmen, dann vergibt TCP den Standard Port für den Empfänger-Port und vergibt einen freien Port für den Sender-Port. Hat der Server nun die Daten erhalten und eine Antwort zurückgeschickt, werden die Portnummern vertauscht. Damit kann sicher gestellt werden, dass die Daten nicht an eine falsche Anwendung übergeben werden.

Um nun also einen Port zu vergeben, auf den unsere SQL Server Instanz reagiert, verwenden wir erneut den SQL Server Configuration Manager.

  • Hierfür klappen Sie zunächst den Reiter SQL Server Network Configuration auf und wählen die Protokolle der gewünschten Instanz aus.
  • Anschließend klicken Sie auf TCP/IP und Eigenschaften. Hier wird der obere Reiter IP Addresses ausgewählt und anschließend bis zu dem Punkt IPAll gescrollt.
  • Unter TCP Port kann nun ein Port vergeben werden. Standardmäßig wird für eine Datenbankengine der Port 1433 vergeben.

Konfiguration der Firewall

Ein Schritt, der oft vergessen wird und meistens die Ursache für ein Verbindungsproblem ist, ist die Freigabe des zuvor konfigurierten Ports innerhalb der Firewall.

Eine Firewall überprüft eingehende Pakete und vergleicht diese mit einer Gruppe von Regeln. Entspricht dieses Paket den vorgeschriebenen, durch die Regel definierten Standards, wird es an das TCP/IP Protokoll zur zusätzlichen Verarbeitung weitergegeben. Andernfalls verwirft die Firewall das Paket.

Damit nun eine Verbindung mit einer SQL Server Instanz von außen möglich ist, muss der Port, der der Instanz zugeordnet ist, manuell freigegeben werden, damit er “geöffnet” wird. Das bedeutet, dass die Firewall Verbindungen über diesen Port zulässt.

  • Wählen Sie hierfür unter Systemsteuerung/System und Sicherheit/Windows “Defender Firewall” aus oder geben Sie in der Windows-Suche “Windows Firewall” ein.
  • Anschließend wählen Sie Erweiterte Einstellungen.
  • Innerhalb der erweiterten Einstellungen wählen Sie auf der rechten Seite “Neue Regel…” aus. Im darauf folgenden Assistenten kann nun eine neue Regel konfiguriert werden.
  • Als Regeltyp sollte hier Port und als Protokoll TCP gewählt werden.
  • Unter “Aktion” wählen Sie anschließend “Verbindung zulassen”.

Nun kann ein Name für die neu erstellte Regel festgelegt und anschließend der Assistent fertiggestellt werden. Die neue Regel tritt nun in Kraft und der Port ist freigegeben. Jetzt ist eine Verbindung zur SQL Server Instanz ist möglich.

Wenn bereits ein Port für die gewünschte SQL Instanz konfiguriert wurde, Ihnen dieser aber unbekannt ist, kann über die T-SQL Abfrage

USE MASTER
GO
xp_readerrorlog 0, 1, N'Server is listening on'
GO

der zugewiesene Port ausgelesen werden.

Fazit

Sollten Sie also Probleme damit haben, sich mit einer SQL Server Instanz zu verbinden, gehen Sie in Ruhe diese Checkliste durch:

  • Ist TCP/IP aktiviert?
  • Ist die Instanz einem Port zugeordnet? Wenn ja, wie lautet dieser und wird er richtig verwendet?
  • Erlaubt die Firewall eine Verbindung über diesen Port?

Schreibe einen Kommentar