PWDCOMPARE (Transact-SQL)

Применимо к:SQL ServerБаза данных SQL AzureУправляемый экземпляр SQL AzureБаза данных SQL в Microsoft Fabric

Хэширует пароль и сравнивает хэш с хэшем существующего пароля. 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 sys.sql _logins:

  • Для SQL Server 2019 (15.x) и более ранних версий требуется разрешение CONTROL SERVER .
  • Для версий SQL Server 2022 (16.x) и более поздних требуется VIEW разрешение на ЛЮБОЕ КРИПТОГРАФИЧЕСКИ ЗАЩИЩЕННОЕ ОПРЕДЕЛЕНИЕ.

Примеры

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

В следующем примере определяются имена входа 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 ;