PWDCOMPARE (Transact-SQL)

Führt Hashing für ein Kennwort aus und vergleicht den Hash mit dem Hash eines vorhandenen Kennworts. PWDCOMPARE kann verwendet werden, um nach leeren SQL Server-Anmeldekennwörtern oder allgemeinen unsicheren Kennwörtern zu suchen.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

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

Argumente

  • 'clear_text_password'
    Das unverschlüsselte Kennwort. clear_text_password ist sysname (nvarchar(128)).

  • 'password_hash'
    Der Verschlüsselungshash eines Kennworts. password_hash ist varbinary(128).

  • version
    Optionaler Parameter, der auf 1 festgelegt werden kann, wenn password_hash den Wert einer Anmeldung von einer Version vor SQL Server 2000 darstellt, der zu SQL Server 2005 oder SQL Server 2008 migriert wurde, aber nie in das SQL Server 2000-System konvertiert wurde. version ist int.

    Wichtiger HinweisWichtig

    Dieser Parameter ist als veraltet markiert und wird unter Umständen in einer zukünftigen Version von SQL Server entfernt.

Rückgabetypen

int

Gibt 1 zurück, wenn der Hash von clear_text_password und der password_hash-Parameter zusammenpassen, und anderenfalls 0.

Hinweise

Wenn Sie eine Instanz von SQL Server 7.0 zu SQL Server 2000 oder einer höheren Version migrieren, wird der Kennworthash nicht geändert, und Sie müssen das Kennwort mithilfe des version-Parameters testen. Wenn die Anmeldung nach der Migration zum ersten Mal verwendet wird, wird der Kennworthash auf das Format aktualisiert, das als Erstes in SQL Server 2000 verwendet wurde. Ab diesem Zeitpunkt erfordert PWDCOMPARE den version-Parameter für diese Anmeldung nicht mehr.

Die PWDCOMPARE-Funktion stellt keine Bedrohung der Sicherheit von Kennworthashs dar, da der gleiche Test ausgeführt werden könnte, indem sich ein Benutzer mit dem als erster Parameter bereitgestellten Kennwort anmeldet.

Berechtigungen

PWDENCRYPT steht für die Öffentlichkeit zur Verfügung.

Die CONTROL SERVER-Berechtigung ist erforderlich, um die Spalte password_hash von sys.sql_logins zu untersuchen.

Beispiele

A. Identifizieren von Anmeldungen, die keine Kennwörter für SQL Server 2005 oder SQL Server 2008 aufweisen

Im folgenden Beispiel werden SQL Server-Anmeldungen identifiziert, die keine Kennwörter aufweisen. Die erste WHERE-Klausel überprüft den Kennworthash auf Werte, die im von SQL Server 2000 und höheren Versionen verwendeten Format gespeichert werden. Die zweite WHERE-Klausel schließt den version-Parameter ein, um den Kennworthash auf Werte zu überprüfen, die noch im Format von SQL Server 2000-Versionen vor SQL Server gespeichert sind.

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

B. Identifizieren von Anmeldungen, die keine Kennwörter für SQL Server 2000 aufweisen

Die Tabelle sys.sql_logins ist in SQL Server 2000 nicht vorhanden. Sie können die folgende Anweisung für eine Instanz von SQL Server 2000 ausführen, um SQL Server-Anmeldungen zu identifizieren, die keine Kennwörter aufweisen.

SELECT name FROM syslogins 
WHERE PWDCOMPARE ('', password) = 1 
OR PWDCOMPARE('', password, 1) = 1  ;

C. Suchen nach allgemeinen Kennwörtern

Um nach allgemeinen Kennwörtern zu suchen, geben Sie das Kennwort als ersten Parameter an. Führen Sie z. B. die folgende Anweisung aus, um nach einem mit password angegebenen Kennwort zu suchen.

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