Isso pode não ser popular entre seus usuários, mas acredito que a única maneira de saber com certeza é forçar uma alteração de senha para cada login SQL CHECK_POLICY = ON
. Isso gerará um conjunto de ALTER LOGIN
comandos com senhas em branco. Você pode atualizar a consulta, fornecendo a todos uma senha comum ou atualizar manualmente cada uma com senhas individuais - apenas verifique se elas atendem à sua política. Obviamente, você precisa ter certeza de que a política de senha é tão complexa quanto o esperado e ativada (Painel de Controle> Ferramentas Administrativas> Política de Segurança Local> Políticas de Conta> Políticas de Senha> Política de Senha> A senha deve atender aos requisitos de complexidade).
SELECT N'ALTER LOGIN ' + QUOTENAME(name)
+ N' WITH PASSWORD = N'''' MUST_CHANGE, CHECK_POLICY = ON;'
FROM sys.sql_logins
--WHERE is_policy_checked = 0;
Steve Jones escreveu sobre isso há um tempo. Observe que, devido ao que descobri abaixo, você não pode confiar is_policy_checked = 1
para que a senha realmente atenda à sua política atual, pois o login pode ter sido criado com uma senha com hash (nesse caso, a senha em texto sem formatação não pode ser marcado) ou enquanto a política de complexidade local estava desativada (o que ainda leva a is_policy_checked = 1
).
Outra abordagem que pensei que funcionaria seria tentar criar uma cópia de cada login com seu atual password_hash
e com CHECK_POLICY = ON
e anotar todos que falharem. No entanto, isso não pode funcionar - mesmo com CHECK_POLICY = ON
, ele não executa nenhuma validação de uma senha já com hash. Incluirei o código da posteridade - mas, por padrão, a política simplesmente não pode ser verificada.
SELECT N'BEGIN TRY
CREATE LOGIN ' + QUOTENAME(N'copy_of_' + name)
+ N' WITH PASSWORD = '
+ CONVERT(NVARCHAR(255), password_hash, 1)
+ ' HASHED, CHECK_POLICY = ON;
DROP LOGIN ' + QUOTENAME(N'copy_of_' + name) + ';
END TRY
BEGIN CATCH
IF ERROR_NUMBER() = 15118
PRINT N''' + REPLACE(name, '''', '''''')
+ N' was not complex enough.'';
END CATCH'
FROM sys.sql_logins;
Pessoalmente, acho que isso é um bug. Se a sintaxe permitir que eu crie um login usando uma senha com hash e eu possa estipular que essa senha deve atender à minha política de complexidade, ela deverá gerar um erro ou aviso de que a política não foi, de fato, verificada.
UPDATE : Eu registrei um bug contra esse comportamento.