Compartir a través de


PWDCOMPARE (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Obtiene el valor hash de una contraseña y lo compara con el de otra existente. PWDCOMPARE se puede usar para buscar contraseñas de inicio de sesión de SQL Server en blanco o contraseñas poco seguras comunes.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

' clear_text_password '
Es la contraseña sin cifrar. clear_text_password es sysname (nvarchar(128)).

password_hash
Es el valor hash de cifrado de una contraseña. password_hash es varbinary(128).

version
Parámetro desusado que se puede establecer en 1 si password_hash representa un valor de un inicio de sesión anterior a SQL Server 2000 (8.x) que se migró a SQL Server 2005 (9.x) o posterior, pero que nunca se convirtió al sistema de SQL Server 2000 (8.x). version es int.

Precaución

Este parámetro se proporciona por compatibilidad con las versiones anteriores, pero se omite porque los blobs de hash de contraseña contienen ahora su propia descripción de versión. Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

Tipos de valor devuelto

int

Devuelve 1 si el valor hash de clear_text_password coincide con el parámetro password_hash y 0 si no coincide.

Comentarios

La función PWDCOMPARE no es una amenaza contra la seguridad de los valores hash de las contraseñas porque podría realizarse la misma prueba intentando iniciar sesión con la contraseña proporcionada como primer parámetro.

PWDCOMPARE no se puede usar con las contraseñas de usuarios de base de datos independiente. No hay una base de datos independiente equivalente.

Permisos

PWDENCRYPT está disponible al público.

Para examinar la columna password_hash de sys.sql_logins:

  • Para SQL Server 2019 (15.x) y versiones anteriores, se requiere el permiso CONTROL SERVER .
  • Para SQL Server 2022 (16.x) y versiones posteriores, se requiere el permiso VIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION .

Ejemplos

A. Identificar los inicios de sesión que no tienen contraseñas

El ejemplo siguiente identifica los inicios de sesión de SQL Server que no tienen contraseñas.

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

B. Buscar contraseñas comunes

Para buscar contraseñas comunes que desee identificar y cambiar, especifique la contraseña como primer parámetro. Por ejemplo, ejecute la instrucción siguiente para buscar una contraseña especificada como password.

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

PWDENCRYPT (Transact-SQL)
Funciones de seguridad (Transact-SQL)
sys.sql_logins (Transact-SQL)