Fala pessoal!
Nesse artigo eu queria compartilhar com vocês uma solução simples para desbloquear um usuário sem precisar trocar/resetar a senha, o que às vezes pode ser muito incômodo em ter que alterar a senha de um usuário para que ele volte a logar no banco.
Para saber mais sobre Políticas, Bloqueio e Expiração automáticas, dê uma lida no artigo SQL Server – Políticas de Senhas, Expiração de Senha, Troca de Senha Obrigatória e Bloqueio de Login após N tentativas.
Quando você cria um login utilizando uma política de senha (CHECK_POLICY) para garantir que as senhas sejam complexas o suficiente e não sejam aceitas senhas curtas e fracas, dependendo das configurações do Windows/AD, o recurso de bloqueio automático após N tentativas incorretas pode estar ativado.
Para testar esse cenário, criaremos um usuário com a política de senha ativada:
1 2 3 4 5 6 7 |
USE [master] GO CREATE LOGIN [teste_politica_senha] WITH PASSWORD = 'BdP@BPptxENu', CHECK_POLICY = ON |
Agora garanto que as propriedades de bloqueio automático estejam habilitadas na tela do “Local Security Policy” (secpol.msc)
Bloquearemos esse usuário tentando me conectar mais de 5 vezes (parâmetro que eu defini na tela anterior) com a senha errada
Para verificar se o usuário está bloqueado, você pode utilizar a consulta abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
SELECT A.[name], A.[type_desc], A.is_disabled, A.create_date, A.modify_date, A.is_policy_checked, A.is_expiration_checked, LOGINPROPERTY(A.[name],'BadPasswordCount') AS [BadPasswordCount], LOGINPROPERTY(A.[name],'BadPasswordTime') AS [BadPasswordTime], LOGINPROPERTY(A.[name],'DaysUntilExpiration') AS [DaysUntilExpiration], LOGINPROPERTY(A.[name],'HistoryLength') AS [HistoryLength], LOGINPROPERTY(A.[name],'IsExpired') AS [IsExpired], LOGINPROPERTY(A.[name],'IsLocked') AS [IsLocked], LOGINPROPERTY(A.[name],'IsMustChange') AS [IsMustChange], LOGINPROPERTY(A.[name],'LockoutTime') AS [LockoutTime], LOGINPROPERTY(A.[name],'PasswordLastSetTime') AS [PasswordLastSetTime], LOGINPROPERTY(A.[name],'PasswordHashAlgorithm') AS [PasswordHashAlgorithm] FROM sys.sql_logins A JOIN sys.server_principals B ON A.[sid] = B.[sid] WHERE A.is_disabled = 0 AND B.is_fixed_role = 0 AND LOGINPROPERTY(A.[name],'IsLocked') = 1 |
Também posso verificar se o Login SQL está bloqueado pela interface do SSMS
Agora vem a dica desse post. Como posso desbloquear esse login sem precisar alterar a senha?
Se você tentar simplesmente desmarcar essa opção na interface do SSMS, irá ver essa mensagem de erro:
Para isso funcionar, desmarque a opção de “Enforce password policy”
Pronto! O usuário já foi desbloqueado. Você já pode marcar essa opção de novo, caso queira manter do jeito que estava antes.
Você também pode utilizar esse comando SQL para desbloquear o usuário sem precisar alterar a senha:
1 2 3 4 5 6 7 8 9 10 |
USE [master]; GO ALTER LOGIN [teste_politica_senha] WITH CHECK_POLICY = OFF; GO ALTER LOGIN [teste_politica_senha] WITH CHECK_POLICY = ON; GO |
E é isso aí!
Post curto e rápido com essa dica útil do dia a dia.
Agora você não precisará trocar a senha do usuário de uma aplicação porque um dev configurou o ambiente errado 🙂