PWDCOMPARE (Transact-SQL)
Hache un mot de passe et compare le hachage au hachage d'un mot de passe existant. PWDCOMPARE peut être utilisé pour rechercher les mots de passe de connexion SQL Server vides ou les mots de passe faibles courants.
Syntaxe
PWDCOMPARE ( 'clear_text_password'
, 'password_hash'
[ , version ] )
Arguments
'clear_text_password'
Mot de passe non chiffré. L'argument clear_text_password est de type sysname (nvarchar(128)).'password_hash'
Hachage de chiffrement d'un mot de passe. L'argument password_hash est de type varbinary(128).version
Paramètre facultatif auquel la valeur 1 peut être affectée si password_hash représente une valeur d'une connexion antérieure à SQL Server 2000 qui a été migrée vers SQL Server 2005 ou SQL Server 2008 mais n'a jamais été convertie vers le système SQL Server 2000. version est de type int.Important
Ce paramètre est désapprouvé et pourra être supprimé dans une future version de SQL Server.
Types de retour
int
Retourne 1 si le hachage de clear_text_password correspond au paramètre password_hash et 0 dans le cas contraire.
Notes
Lorsque vous migrez une instance de SQL Server 7.0 vers SQL Server 2000 ou une version ultérieure, le hachage de mot de passe n'est pas modifié et vous devez utiliser le paramètre version pour tester le mot de passe. Après la migration, lors de la première utilisation de la connexion, le hachage de mot de passe est mis à jour vers le format utilisé pour la première fois dans SQL Server 2000. À compter de ce moment, PWDCOMPARE ne requiert plus le paramètre version pour cette connexion.
La fonction PWDCOMPARE ne constitue pas une menace pour la force des hachages de mot de passe car le même test pourrait être effectué en essayant de se connecter à l'aide du mot de passe fourni en tant que premier paramètre.
Autorisations
PWDENCRYPT est accessible publiquement.
L'autorisation CONTROL SERVER est requise pour examiner la colonne password_hash de sys.sql_logins.
Exemples
A. Identification des connexions qui n'ont pas de mots de passe sur SQL Server 2005 ou SQL Server 2008
L'exemple suivant identifie les connexions SQL Server qui n'ont pas de mots de passe. La première clause WHERE vérifie le hachage de mot de passe à la recherche de valeurs stockées au format utilisé par SQL Server 2000 et versions ultérieures. La deuxième clause WHERE inclut le paramètre version afin de vérifier le hachage de mot de passe à la recherche de valeurs encore stockées au format utilisé par des versions de SQL Server antérieures à SQL Server 2000.
SELECT name FROM sys.sql_logins
WHERE PWDCOMPARE('', password_hash) = 1
OR PWDCOMPARE('', password_hash, 1) = 1 ;
B. Identification des connexions qui n'ont pas de mots de passe sur SQL Server 2000
La table sys.sql_logins n'existe pas dans SQL Server 2000. Vous pouvez exécuter l'instruction suivante sur une instance de SQL Server 2000 pour identifier les connexions SQL Server qui n'ont pas de mots de passe.
SELECT name FROM syslogins
WHERE PWDCOMPARE ('', password) = 1
OR PWDCOMPARE('', password, 1) = 1 ;
C. Recherche de mots de passe communs
Pour rechercher les mots de passe communs que vous souhaitez identifier et modifier, spécifiez le mot de passe en tant que premier paramètre. Par exemple, exécutez l'instruction suivante pour rechercher un mot de passe spécifié comme password.
SELECT name FROM sys.sql_logins
WHERE PWDCOMPARE('password', password_hash) = 1
OR PWDCOMPARE('password', password_hash, 1) = 1 ;