PWDCOMPARE (Transact-SQL)

Esegue l'hashing di una password e confronta l'hash con l'hash di una password esistente. È possibile utilizzare PWDCOMPARE per eseguire la ricerca di password di accesso di SQL Server vuote o di password comuni vulnerabili.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • 'clear_text_password'
    Password non crittografata. clear_text_password è di tipo sysname (nvarchar(128))

  • 'password_hash'
    Hash di crittografia di una password. password_hash è di tipo varbinary(128).

  • version
    Parametro facoltativo che può essere impostato su 1 se password_hash rappresenta un valore relativo a un account di accesso di una versione precedente a SQL Server 2000 di cui è stata eseguita la migrazione a SQL Server 2005 o SQL Server 2008 ma che non è stato mai convertito nel sistema SQL Server 2000. version è di tipo int.

    Nota importanteImportante

    Questo parametro è obsoleto e potrebbe venire rimosso in una delle prossime versioni di SQL Server.

Tipi restituiti

int

Restituisce 1 se l'hash di clear_text_password corrisponde al parametro password_hash. In caso contrario, restituisce 0.

Osservazioni

Quando si esegue la migrazione di un'istanza di SQL Server 7.0 a SQL Server 2000 o versione successiva, l'hash della password non viene modificato ed è necessario utilizzare il parametro version per testare la password. Dopo la migrazione, al primo utilizzo dell'account di accesso, l'hash della password viene aggiornato al formato utilizzato inizialmente in SQL Server 2000. Da quel momento in poi, PWDCOMPARE non richiederà più l'utilizzo del parametro version per l'account di accesso specifico.

La funzione PWDCOMPARE non costituisce un rischio per la sicurezza degli hash delle password, in quanto lo stesso test può essere eseguito tentando di accedere con la password fornita come primo parametro.

Autorizzazioni

PWDENCRYPT è disponibile per il ruolo public.

Per esaminare la colonna password_hash di sys.sql_logins, è richiesta l'autorizzazione CONTROL SERVER.

Esempi

A. Identificazione degli account di accesso che non dispongono di password in SQL Server 2005 o SQL Server 2008

Nell'esempio seguente vengono identificati gli account di accesso di SQL Server che non dispongono di password. La prima clausola WHERE controlla la presenza nell'hash della password di valori archiviati nel formato utilizzato da SQL Server 2000 e versioni successive. La seconda clausola WHERE include il parametro version per controllare la presenza nell'hash della password di valori ancora archiviati nel formato utilizzato dalle versioni di SQL Server precedenti a SQL Server 2000.

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

B. Identificazione degli account di accesso che non dispongono di password in SQL 2000

La tabella sys.sql_logins non esiste in SQL Server 2000. È possibile eseguire l'istruzione seguente su un'istanza di SQL Server 2000 per identificare gli account di accesso di SQL Server che non dispongono di password.

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

C. Ricerca di password comuni

Per eseguire la ricerca di password comuni che si desidera identificare e cambiare, specificare la password come primo parametro. Eseguire ad esempio l'istruzione seguente per eseguire la ricerca di una password specificata come password.

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