Wann ist ein dynamischer Port "dynamisch"?

23

Ich hatte heute eine Diskussion Dynamic Portsmit einem meiner Kollegen und könnte Hilfe gebrauchen, um zu klären, wie sie funktionieren.

Erste Frage: Wenn es sich bei der IPALL TCP Dynmaic PortsEinstellung um eine bestimmte Zahl handelt (z. B. 1971), bedeutet dies, dass Sie einen statischen Anschluss von 1971 oder einen dynamischen Anschluss von 1971 haben, der sich zu einem späteren Zeitpunkt möglicherweise ändert.

Bildbeschreibung hier eingeben

Zweite Frage: Dies ist die, auf die ich am meisten neugierig bin. Wir haben eine Instanz, die über IPALL TCP Dynmaic Portsmehrere Jahre hinweg denselben Port (den Wert in der Einstellung) durch Dutzende von Instanzneustarts hatte. Was bewirkt, dass sich der dynamische Port nach einem Neustart der Instanz tatsächlich ändert?

Kenneth Fisher
quelle

Antworten:

22

In diesem KB-Artikel wird erläutert, wie Sie SQL Server so konfigurieren, dass es einen bestimmten Port überwacht:

Dynamische Portzuweisung

Wenn Sie eine Instanz von SQL Server für die Verwendung der dynamischen Portzuordnung konfigurieren und die Instanz von SQL Server noch nicht neu gestartet haben, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Leer

TCPPort = 0

Wenn Sie jedoch eine Instanz von SQL Server für die Verwendung der dynamischen Portzuordnung konfigurieren und die Instanz von SQL Server neu starten, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Aktueller Port, der verwendet wird

TCPPort = Aktueller Port, der verwendet wird

Statische Portzuordnung:

Wenn Sie eine Instanz von SQL Server für die Verwendung eines statischen Ports konfigurieren und die Instanz von SQL Server noch nicht neu gestartet haben, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Letzter verwendeter Port

TCPPort = Neuer statischer Port, der nach dem nächsten Neustart verwendet werden soll; neuer statischer Port, den Sie mithilfe des Server-Netzwerkdienstprogramms festgelegt haben

Wenn Sie jedoch eine Instanz von SQL Server für die Verwendung eines statischen Ports konfigurieren und die Instanz von SQL Server neu starten, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Leer

TCPPort = Neuer statischer Port, den Sie mit dem Server-Netzwerkdienstprogramm festgelegt haben

für Ihre zweite Frage -

Bei jedem Start des genannten SQLServers wird der zugewiesene Port verwendet. Wenn der Port von einem anderen Programm verwendet wird , wählt SQL Server zum Zeitpunkt des Neustarts einen anderen Port aus, dh der dynamische Port wird beim ersten Start ausgewählt und bleibt im Allgemeinen bei zukünftigen Neustarts (in der Registrierung gespeichert) unverändert Es wird von einem anderen Programm als SQL Server verwendet und wählt einen neuen Port. Hinweis: Für Prod-Server verwende ich nur statische Ports - aus Gründen der Sicherheit und der einfachen Verwaltbarkeit.

Hinweis: Weitere coole Sache, um herauszufinden:

Überprüfen Sie, ob der dynamische Port mit T-SQL verwendet wird oder nicht:

SELECT NAME
    ,protocol_desc
    ,type_desc
    ,state_desc
    ,is_admin_endpoint
    ,port
    ,is_dynamic_port
    ,ip_address
FROM sys.tcp_endpoints

Bildbeschreibung hier eingeben

Mit können netstat -anoSie mit cmdline prüfen.

Darüber hinaus können Sie überprüfen, was in der Registrierung auf der Clientseite zuvor zwischengespeichert wurde, um festzustellen, über welchen Port die Verbindung zum SQL-Server hergestellt wird:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect

Bildbeschreibung hier eingeben

Kin Shah
quelle
Danke und das ist ein sehr nützlicher Link! Wissen Sie, warum ein dynamischer Port die Ports ändert? Siehe Second questionin meiner Frage oben.
Kenneth Fisher
@KennethFisher für Ihre second question- Jedes Mal, wenn Sie den genannten SQLServer starten, wird der zugewiesene Port verwendet. Wenn der Port von einem anderen Programm verwendet wird, wählt SQL Server zum Zeitpunkt des Neustarts einen anderen Port aus. Der dynamische Port wird beim ersten Start ausgewählt und bleibt im Allgemeinen bei zukünftigen Neustarts (in der Registrierung gespeichert) unverändert. Wenn er jedoch von einem anderen Programm verwendet wird, wählt der SQL Server einen neuen Port aus. Hinweis : Für Prod-Server verwende ich nur statische Ports - aus Gründen der Sicherheit und der einfachen Verwaltbarkeit.
Kin Shah
Würden Sie so freundlich erklären, warum es sich Ihrer Meinung nach lohnt, einen komplett neuen Dienst (SQL Server-Browser) zu implementieren, der an einem statischen Port arbeitet, sodass er möglicherweise nicht gestartet wird, wenn dieser Port verwendet wird, nur weil Sie SQL Server in starten möchten? In einem Fall, in dem einige andere Dienste Ports verwenden, sind Sie zu ungeschickt, um eine Verbindung zu der wahrscheinlich teuersten Software herzustellen, die Sie verwenden?
Kakaz