Compartilhar via


PWDCOMPARE (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Obtém o valor hash de uma senha e compara-o com o de uma senha existente. PWDCOMPARE pode ser usado para procurar senhas de logon em branco do SQL Server ou senhas fracas comuns.

Convenções de sintaxe de Transact-SQL

Sintaxe

PWDCOMPARE ( 'clear_text_password'  
   , password_hash   
   [ , version ] )  

Argumentos

' clear_text_password '
É a senha não criptografada. clear_text_password é sysname (nvarchar(128)).

password_hash
É o hash de criptografia de uma senha. password_hash é varbinary(128).

version
Parâmetro obsoleto que poderá ser definido como 1 se password_hash representar um valor de um logon anterior a SQL Server 2000 (8.x) que foi migrado para SQL Server 2005 (9.x) ou posterior, mas nunca convertido no sistema SQL Server 2000 (8.x). version é int.

Cuidado

Esse parâmetro é fornecido para fins de compatibilidade com versões anteriores, mas é ignorado, pois os blobs de hash de senha agora contêm suas próprias descrições de versão. Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

Tipos de retorno

int

Retorna 1 se o hash da clear_text_password corresponde ao parâmetro password_hash, e 0 se ele não existe.

Comentários

A função PWDCOMPARE não é uma ameaça contra a força de hashes de senha porque o mesmo teste pode ser executado por meio de tentativa de logon usando a senha fornecida como o primeiro parâmetro.

Não é possível usar PWDCOMPARE com as senhas de usuários de bancos de dados independentes. Não há banco de dados independente equivalente.

Permissões

PWDENCRYPT está disponível para o público.

Para examinar a coluna password_hash de sys.sql_logins:

  • Para o SQL Server 2019 (15.x) e versões anteriores, a permissão CONTROL SERVER é necessária.
  • Para SQL Server 2022 (16.x) e versões posteriores, a permissão VIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION é necessária.

Exemplos

a. Identificando logons que não têm nenhuma senha

O exemplo a seguir identifica logons do SQL Server que não têm nenhuma senha.

SELECT name FROM sys.sql_logins   
WHERE PWDCOMPARE('', password_hash) = 1 ;  

B. Procurando senhas comuns

Para procurar senhas comuns que você deseja identificar e alterar, especifique a senha como o primeiro parâmetro. Por exemplo, execute a instrução a seguir para procurar uma senha especificada como password.

SELECT name FROM sys.sql_logins   
WHERE PWDCOMPARE('password', password_hash) = 1 ;  

PWDENCRYPT (Transact-SQL)
Funções de segurança (Transact-SQL)
sys.sql_logins (Transact-SQL)