Olá sobreviventes,
Assim como no post anterior “Casos do Dia a Dia – Login Failed x SQLTELEMETRY x local machine”, hoje também vou falar sobre mais um problema de Login Failed, mas dessa vez relacionado à um BUG do SQL Server no Maintenance Plan ou Plano de Manutenção.
Você já configurou algum Maintenance Plan e depois disso começou a aparecer as mensagens de erro abaixo?
“Login failed for user ‘sa’. Reason: Password did not match that for the login provided. [CLIENT: <local machine>]
Error: 18456, Severity: 14, State: 8.”
Nesse post, vou explicar o que gera esse erro e como resolvê-lo. #gogogo
Criação dos Maintenance Plans:
Se você nunca utilizou um Maintenance Plan ou Plano de Manutenção, ele pode ser muito útil para executar algumas tarefas, por exemplo: executar backup ou excluir arquivos.
No link abaixo eu utilizo os backups de log gerados por um plano de manutenção para fazer o RESTORE de uma database e ele é muito útil no meu dia a dia:
No exemplo de hoje, vou criar três Maintenance Plans para fazer um simples backup de log, mas vou utilizar três usuários diferentes para criá-los. Reparem que cada um deles terá um OWNER diferente e esse detalhe será MUITO IMPORTANTE!
- DBA – Backup – Windows (Windows
Authentication):
- Usuário: HPSPECTRE\Luiz Vitor
- DBA – Backup – SQL (SQL
Server Authentication):
- Usuário: sa
- DBA – Backup – SQL – Teste (SQL
Server Authentication):
- Usuário: testeBackup
Versão SQL Server:
Um outro detalhe MUITO IMPORTANTE é que vou utilizar inicialmente o SQL Server com a versão abaixo (SQL Server 2016 – SP1 apenas):
Microsoft SQL Server 2016 (SP1) (KB3182545) – 13.0.4001.0 (X64) Oct 28 2016 18:17:30 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows 10 Home 6.3 <X64> (Build 18362: )
BUG – Login Failed x Maintenance Plan x SQL Server Authentication!
“Beleza Luiz, mas cadê o problema que você falou no início do post???”
Certo, agora que os Maintenance Plans estão criados, nós vamos começar a executá-los.
DBA – Backup – Windows.Backup Log:
Usuário: HPSPECTRE\Luiz Vitor
Esse é o caso mais simples e que não gera nenhuma mensagem de falha de login, pois utiliza o usuário com WINDOWS AUTHENTICATION.
DBA – Backup – SQL.Backup Log:
Usuário: sa
Repare que dessa vez o Backup do Log é executado com sucesso, não gera nenhuma falha no History do JOB, mas mesmo assim aparecem várias mensagens de falha de login no Error Log. Isso aconteceu porque agora estamos utilizando um usuário com SQL SERVER AUTHENTICATION ou SQL Login Account, mesmo ele possuindo acesso sysadmin.
“Login failed for user ‘sa’. Reason: Password did not match that for the login provided. [CLIENT: <local machine>]
Error: 18456, Severity: 14, State: 8.”
DBA – Backup – SQL – Teste.Backup Log:
Usuário: testeBackup
Aqui também utilizei um usuário SQL SERVER AUTHENTICATION com acesso sysadmin e os erros também foram gerados. Isso foi apenas para reforçar que o problema acontece com mais de um usuário.
Os arquivos dos Backups de Log foram gerados normalmente na pasta, mesmo com essas mensagens de falha de login.
Visto isso, fiz algumas pesquisas e encontrei os links abaixo:
A Microsoft confirmou que esse comportamento é um BUG e ele foi “corrigido” a partir da versão abaixo:
Cumulative Update 5 for SQL Server 2016 SP2
Data: 23/01/2019
https://support.microsoft.com/en-us/help/4475776/cumulative-update-5-for-sql-server-2016-sp2
Repare que um dos itens desse Cumulative Update é exatamente o erro que mostrei anteriormente.
Atualizando o SQL Server:
Portanto, vamos atualizar o nosso SQL Server e verificar se o problema será resolvido. Aqui fiz os testes nas versões abaixo:
SQL Server 2016:
Microsoft SQL Server 2016 (SP1) (KB3182545) – 13.0.4001.0 (X64) – BUG!
Microsoft SQL Server 2016 (SP2) (KB4052908) – 13.0.5026.0 (X64) – BUG!
Microsoft SQL Server 2016 (SP2-CU5) (KB4475776) – 13.0.5264.1 (X64) – BUG – Agora com apenas uma mensagem de Login Failed, mas o erro ainda continua!
Microsoft SQL Server 2016 (SP2-CU12) (KB4536648) – 13.0.5698.0 (X64) – BUG – Agora com apenas uma mensagem de Login Failed, mas o erro ainda continua!
SQL Server 2017 e 2019:
Aparentemente o problema só foi resolvido de forma definitiva a partir da versão do SQL Server 2017! Fiz o mesmo teste com as duas versões abaixo (2017 e 2019) e não gerou mais a mensagem de falha de login!
Microsoft SQL Server 2017 (RTM-CU13) (KB4466404) – 14.0.3048.4 (X64) – CORRIGIDO!
Microsoft SQL Server 2019 (RTM) – 15.0.2000.5 (X64) – CORRIGIDO!
Site – Atualizações SQL Server:
Eu particularmente gosto bastante de consultar o site abaixo para validar as atualizações disponíveis para o SQL Server:
https://buildnumbers.wordpress.com/sqlserver/
Conclusão:
Segue alguns pontos resumidos ao utilizar o Maintenance Plan e o SQL Server Authentication:
- Versão anterior ao SQL Server 2016 SP2 CU5: irá aparecer algumas mensagens de Login Failed no Error Log a cada execução;
- Versão do SQL Server 2016 a partir do SP2 CU5: nesse Cumulative Update teve uma “correção” nesse BUG, mas ainda irá aparecer apenas uma mensagem de Login Failed no Error Log a cada execução. Ou seja, o problema ainda não foi resolvido, só foi amenizado;
- Versão do SQL Server 2017 em diante: você pode utilizar normalmente o SQL Server Authentication, pois nenhuma mensagem de Login Failed será exibida no Error Log.
Portanto, recomendo que você utilize sempre que possível um usuário com WINDOWS AUTHENTICATION se utilizar uma versão anterior ao SQL Server 2017, pois dessa forma não irá gerar nenhuma mensagem de Login Failed no Error Log.
Por fim, gostaria de ressaltar aqui também a importância de aplicar as atualizações do SQL Server constantemente no seu banco de dados, pois cada atualização possui diversas correções, sejam em coisas simples até alguma falha que pode ser mais grave!
Referências:
Segue abaixo mais dois links como referência:
https://dba.stackexchange.com/questions/167484/sql-server-agent-invokes-failed-sa-login
Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!
Me siga no LinkedIn e YouTube para ficar por dentro das novidades.
Abraço,
Luiz Vitor França Lima
Consultor SQL Server