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 ;