AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 189328
Accepted
Martin Surasky
Martin Surasky
Asked: 2017-10-26 12:50:13 +0800 CST2017-10-26 12:50:13 +0800 CST 2017-10-26 12:50:13 +0800 CST

Erro após aplicar a atualização do SQL Server 2008 R2 10.50.6542 (compilação mais recente)

  • 772

Primeiro o problema: desde que apliquei o patch mais recente ao SQL Server 2008 R2 (lançado em 3 de março de 2016) que deveria ter levado meu servidor para compilar 10.50.6542, não consigo mais me conectar. Este patch é para fornecer suporte a TLS 1.2.

O erro que estou recebendo (ao tentar conectar usando uma ferramenta cliente diretamente no servidor) é

"A connection was succesfully established with the server, but then an error occurred during the pre-login handshake"

insira a descrição da imagem aqui

O servidor é um Windows Server 2012 R2 e está executando o NET Framework 4.6.1 (alguns posts apontam para uma versão mais antiga do .NET framework causando esse problema, mas esse não é o meu caso).

Eu tentei executar os seguintes pacotes para ver se isso resolveria ...

  • SQL Server Native Client (x86 e x64)
  • Pacote cumulativo de hotfix 3106993 para o .NET Framework 2.0 SP2 no Windows Server 2012 R2 e Windows 8.1
  • Pacote cumulativo de hotfix 3106994 para o .NET Framework 4.0 no Windows
  • Pacote cumulativo de hotfix 3099845 para o .NET Framework 4.5.2, 4.5.1 e 4.5

... Nada disso foi necessário, e nada ajudou...

Alguém já experimentou isso? Alguma ideia ou sugestão?

Obrigado!

Uma atualização 24 horas depois , inspecionei o log de erros do SQL Server procurando entradas que incluíssem apenas um início, 5 tentativas de login com falha e uma parada. De todas as mensagens nesse período de tempo (107 entradas no total), a única mensagem que inclui algo como um erro é

 The SQL Server Network Interface library could not register the Service Principal Name (SPN) for the SQL Server service. Error: 0x2098, state: 15. Failure to register an SPN may cause integrated authentication to fall back to NTLM instead of Kerberos. This is an informational message. Further action is only required if Kerberos authentication is required by authentication policies.

Esta mensagem, no entanto, foi relatada na inicialização do servidor antes mesmo de eu aplicar o patch, então estou 100% confiante de que é um arenque vermelho. Nenhum log é inserido no log de erros do SQL Server como resultado das tentativas de logon com falha.

Outra atualização

Com base nas sugestões que recebi das pessoas aqui, baixei e instalei a versão mais recente do SSMS (17.3) no servidor. Quando tentei conectar desta vez, recebi um erro diferente, então parece que estou avançando, mas ainda não cheguei lá.

insira a descrição da imagem aqui

Portanto, parece que é verdade que as versões antigas do SSMS têm como alvo o .net 3.5 e mesmo se você tiver versões mais recentes do .net framework as conexões do cliente não funcionarão, a questão agora é por que ainda recebo este "Nenhum processo está do outro lado do canal", mesmo quando a maioria dos componentes do cliente foi atualizada.

Mais algumas coisas que investiguei (e descartei)

  • A ordem do “protocolo do cliente” no SQL Server Configuration Manager parece ser a correta, pois o TCP/IP está no topo. Isso foi sugerido como uma possível causa de problemas, mas no meu caso está tudo configurado adequadamente (aparentemente)

insira a descrição da imagem aqui

  • Tentei instalar o “Microsoft ODBC Driver for SQL Server” conforme sugerido no suporte TLS 1.2 para Microsoft SQL Server , mas isso também não fez diferença. Após a instalação, a mensagem de erro é a mesma

  • Tentei adicionar as chaves do registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2 (também como sugerido no mesmo artigo ). Mesmo erro…

sql-server patching
  • 2 2 respostas
  • 1745 Views

2 respostas

  • Voted
  1. Best Answer
    Martin Surasky
    2017-10-28T13:15:11+08:002017-10-28T13:15:11+08:00

    Finalmente! depois de 3 dias tentando de tudo sob o sol, encontrei a causa raiz do meu problema.

    O ah! momento foi quando me juntei a um grupo tentando entender por que esse patch estava sendo implantado bem em outros servidores e não neste em particular.

    Percebemos que algo diferente (entre outras coisas... que listamos em um bloco de notas bem organizado) foi que esse SQL Server 2008 R2 foi configurado para criptografia em trânsito (também conhecido como criptografia SSL) por meio de certificados e algumas configurações no gerenciador de configuração do SQL Server, a saber :

    1. Em Protocols for [Instance_Name] e depois em Properties (aba certificados) tivemos que selecionar o certificado que criamos para fins de comunicações criptografadas.

    2. Nessa mesma janela (guia de sinalizadores), definimos a opção ForceEncryption para o Mecanismo de Banco de Dados como Sim

    Então começamos a pensar... e se o problema for o próprio certificado?. Então fomos em frente e removemos a configuração de criptografia (o patch para o SQL Server Build 10.50.6542 ainda aplicado) e a conexão começou a funcionar, confirmando que a combinação do patch com nossa configuração SSL estava maluca.

    Após mais investigações e por meio de um processo de eliminação, reduzimos o problema aos certificados que estávamos usando. O certificado foi criado naquela época com makecert (para criar um certificado autoassinado) e NÃO estava usando o parâmetro -a. Este parâmetro informa ao makecert qual algoritmo de Hash deve ser usado. Se não for fornecido, o makecert usará o algoritmo de hash de assinatura MD5 padrão que não é compatível com o TLS 1.2.

    Também no TLS 1.2 RFC você pode ver isso explicitamente…

    MD5
      MD5 [MD5] is a hashing function that converts an arbitrarily long
      data stream into a hash of fixed size (16 bytes).  Due to
      significant progress in cryptanalysis, at the time of publication
      of this document, MD5 no longer can be considered a 'secure'
      hashing function.
    

    Portanto, para corrigir esse problema, a solução é adicionar o parâmetro -a SHA256 ao makecert (certifique-se de usar o makecert versão 6.3.9600.17298 e não o antigo 5.1313790.0 porque esse não suporta SHA256 como parâmetro ).

    Estou escrevendo tudo isso já que todo o enigma me levou 3 dias para descobrir e espero que algum dia alguém se beneficie disso. Se apenas a Microsoft tivesse incluído em letras BIG BOLD que o MD5 não é mais suportado no artigo em que o patch é descrito!

    Obrigado a @Mr.Brownstone e @sepupic por toda a ajuda!

    • 2
  2. World Wide DBA
    2017-10-27T12:31:55+08:002017-10-27T12:31:55+08:00

    O TLS 1.2 não se tornou o protocolo de segurança padrão até o .NET 4.6 e nem era uma opção com suporte até o .NET 4.5, portanto, se você estiver usando um cliente direcionado a um tempo de execução do .NET inferior a 4.5, ele não poderá comunicar usando TLS 1.2 por padrão.

    Em seu cenário específico, o cliente é o SQL Server Management Studio. As versões do estúdio de gerenciamento até 2014, inclusive, usavam o .NET 3.5 SP1 como o tempo de execução de destino - o que, infelizmente, impedirá que você se conecte usando o TLS 1.2 como está.

    Para solucionar seu problema, atualize sua instalação do estúdio de gerenciamento para a versão mais recente, pois isso é direcionado ao .NET 4.6.1 e usará o TLS 1.2 como o protocolo de segurança padrão.

    Página de download do SSMS

    Uma segunda solução, se você não conseguir atualizar para a versão mais recente do SSMS, é fazer algumas alterações no registro que forçarão o Windows Server a ignorar o protocolo especificado pelo .NET 3.5 e usar o TLS 1.2. Eu não recomendaria isso (e se você não puder atualizar o SSMS, provavelmente não terá permissão para alterar as configurações do registro), mas incluí as informações para ser completa.

    Detalhes sobre como forçar o .NET 3.5 a usar o TLS 1.2 e quais chaves de registro precisam ser alteradas podem ser encontrados abaixo:

    Suporte para versões padrão do sistema TLS incluídas no .NET Framework 3.5 no Windows Server 2012

    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve