Quando uma porta dinâmica é "dinâmica"?

23

Hoje eu estava discutindo Dynamic Portscom um de meus colegas de trabalho e poderia ajudar a esclarecer como eles funcionam.

Primeira pergunta: se a IPALL TCP Dynmaic Portsconfiguração for um número específico (por exemplo, 1971), isso significa que você tem uma porta estática de 1971 ou uma porta dinâmica que atualmente é 1971 e pode mudar em algum momento no futuro.

insira a descrição da imagem aqui

Segunda pergunta: Essa é a que mais me interessa. Temos uma instância que teve a mesma porta (o valor na IPALL TCP Dynmaic Portsconfiguração) por vários anos através de dezenas de reinicializações. O que realmente faz com que a porta dinâmica realmente mude após a reinicialização da instância?

Kenneth Fisher
fonte

Respostas:

22

Este artigo da Base de dados: Como configurar o SQL Server para escutar em uma porta específica esclarecerá as coisas para você:

Alocação dinâmica de porta

Se você configurar uma instância do SQL Server para usar a alocação dinâmica de porta e ainda não tiver reiniciado a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:

TCPDynamicPorts = Em branco

TCPPort = 0

No entanto, se você configurar uma instância do SQL Server para usar a alocação de porta dinâmica e reiniciar a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:

TCPDynamicPorts = Porta atual usada

TCPPort = Porta atual usada

Alocação de porta estática:

Se você configurar uma instância do SQL Server para usar uma porta estática e ainda não tiver reiniciado a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:

TCPDynamicPorts = Última porta usada

TCPPort = Nova porta estática a ser usada após a próxima reinicialização; nova porta estática que você definiu usando o Server Network Utility

No entanto, se você configurar uma instância do SQL Server para usar uma porta estática e reiniciar a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:

TCPDynamicPorts = Em branco

TCPPort = Nova porta estática que você define usando o Server Network Utility

para sua segunda pergunta -

Sempre que você inicia o SQLServer nomeado, ele usa a porta que está alocada. Caso a porta seja usada por outro programa , o SQL Server escolherá outra porta no momento da reinicialização, ou seja, a porta dinâmica será escolhida na primeira inicialização e geralmente permanecerá a mesma em futuras reinicializações (armazenadas no Registro) - mas se usado por outro programa, o SQL Server escolherá uma nova porta. Nota: Para Servidores Prod, eu uso apenas portas estáticas - motivos de segurança e facilidade de gerenciamento.

Nota: Mais coisas para descobrir:

Verifique se a porta dinâmica está sendo usada ou não usando o T-SQL:

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

insira a descrição da imagem aqui

Você pode usar netstat -anopara verificar usando o cmdline.

Além disso, você pode verificar o que foi armazenado em cache anteriormente no registro no lado do cliente e qual porta está usando para conectar-se ao servidor sql:

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

insira a descrição da imagem aqui

Kin Shah
fonte
Obrigado e esse é um link muito útil! Você sabe o que faz com que uma porta dinâmica mude de porta? Veja Second questionna minha pergunta acima.
9139 Kenneth Fisher
@KennethFisher for your second question- Toda vez que você inicia o SQLServer nomeado, ele usa a porta que está alocada. Caso a porta seja usada por outro programa , o SQL Server escolherá outra porta no momento da reinicialização. A porta dinâmica é escolhida na primeira inicialização e geralmente permanecerá a mesma em futuras reinicializações (armazenadas no Registro) - mas se for usada por outro programa, o SQL Server escolherá uma nova porta. Nota : Para Servidores Prod, eu uso apenas portas estáticas - motivos de segurança e facilidade de gerenciamento.
Kin Shah
Você gostaria de explicar por que você acha que vale a pena implementar um serviço completamente novo (navegador do servidor SQL) que está trabalhando na porta estática, para que não seja iniciado se essa porta for usada, apenas porque você deseja iniciar o SQL Server em um caso em que alguns outros serviços estão usando portas que você é muito desajeitado para conectar provavelmente ao software mais caro que você está usando?
kakaz