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 2008, но не было преобразовано в систему SQL Server 2000. version равна int.

    Важное примечаниеВажно!

    Этот параметр устарел и, возможно, будет удален в следующем выпуске SQL Server.

Возвращаемые типы

int

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

Замечания

Когда экземпляр SQL Server 7.0 переносится в SQL Server 2000 или более позднюю версию, хэш пароля не меняется и необходимо использовать параметр version для проверки пароля. После переноса, когда имя входа используется в первый раз, хэш пароля преобразуется в формат, который сначала использовался в SQL Server 2000. С этого момента функция PWDCOMPARE не требует параметра version для этого имени входа.

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

Разрешения

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

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

Примеры

А. Поиск имен входа, у которых нет паролей на SQL Server 2005 или SQL Server 2008

В следующем примере выявляются имена входа SQL Server, у которых нет паролей. Первое предложение WHERE проверяет хэш пароля на значения, хранимые в формате, используемом в SQL Server 2000 и более поздних версиях. Второе предложение WHERE включает параметр version для проверки хэша пароля на значения, которые все еще хранятся в формате, используемом в более ранних версиях SQL Server, чем SQL Server 2000.

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

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

Таблица sys.sql_logins не существует в SQL Server 2000. Для выявления имен входа SQL Server, у которых нет паролей, можно выполнить следующую инструкцию с экземпляром SQL Server 2000.

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

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

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

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