PWDCOMPARE (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Хэширует пароль и сравнивает хэш с хэшем существующего пароля. PWDCOMPARE можно использовать для поиска пустых паролей для входа SQL Server или распространенных слабых паролей.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

' clear_text_password '
Незашифрованный пароль. Аргумент clear_text_password имеет тип sysname (nvarchar(128)).

password_hash
Хэш шифрования пароля. Аргумент password_hash имеет тип varbinary(128).

version
Устаревший параметр, который может быть задан в значение 1, если password_hash представляет значение из имени входа до SQL Server 2000 (8.x), перенесенного в SQL Server 2005 (9.x) или более поздней версии, но никогда не преобразован в систему SQL Server 2000 (8.x). Аргумент version имеет тип int.

Внимание

Этот параметр предназначен для обеспечения обратной совместимости, однако он пропускается, так как теперь большие двоичные объекты хэшей паролей содержат собственные описания версий. Эта функция будет удалена в будущей версии SQL Server. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

Типы возвращаемых данных

int

Возвращает значение 1, если хэш параметра clear_text_password совпадает со значением параметра password_hash, или значение 0 в противном случае.

Замечания

Функция PWDCOMPARE — это не угроза устойчивости хэшей паролей, потому что этот же самый тест можно было бы выполнить, если попытаться использовать для входа пароль, заданный как первый параметр.

PWDCOMPARE нельзя использовать с паролями пользователей автономных баз данных. Какой-либо эквивалент для автономной базы данных отсутствует.

Разрешения

Функция PWDENCRYPT общедоступна.

Для просмотра столбца password_hash column представления sys.sql_logins требуется разрешение CONTROL SERVER.

Примеры

А. Выявление имен входа, у которых нет паролей

В следующем примере определяются имена входа SQL Server, у которых нет паролей.

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

B. Поиск распространенных простых паролей

Для поиска распространенных простых паролей, которые требуется выявить и изменить, задайте пароль как первый параметр. Например, можно выполнить следующую инструкцию для поиска пароля, заданного как password.

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

См. также

PWDENCRYPT (Transact-SQL)
Функция безопасности (Transact-SQL)