Поделиться через


PWDCOMPARE (Transact-SQL)

Хэширует пароль и сравнивает хэш с хэшем существующего пароля. Функция 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, которое было перенесено в SQL Server 2005 или более позднюю версию, но так и не преобразовано в систему SQL Server 2000. Аргумент version имеет тип int.

    ПредупреждениеВнимание!

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

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

int

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

Замечания

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

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

Разрешения

Функция PWDENCRYPT доступна для роли public.

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

Примеры

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

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

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

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

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

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

См. также

Справочник

PWDENCRYPT (Transact-SQL)

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