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:
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:
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:
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 🙂

Comentários (0)
Carregando comentários…