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
    如果 password_hash 代表的登入值早於已經移轉到 SQL Server 2005 或 SQL Server 2008,但尚未轉換為 SQL Server 2000 系統的 SQL Server 2000,則是可以設定為 1 的選擇性參數。version 是 int。

    重要注意事項重要事項

    這個參數已被取代,SQL Server 的未來版本可能會移除它。

傳回類型

int

如果 clear_text_password 的雜湊符合 password_hash 參數,便傳回 1,如果不符合,則傳回 0。

備註

當您將 SQL Server 7.0 的執行個體移轉到 SQL Server 2000 或更新版本時,密碼雜湊會維持不變,而且您必須使用 version 參數測試密碼。移轉之後,當第一次使用登入時,密碼雜湊會更新為在 SQL Server 2000 中第一次使用的格式。從當下開始,PWDCOMPARE 就不需要用於該登入的 version 參數。

PWDCOMPARE 函數並不會對密碼雜湊強度造成威脅,因為可以使用當做第一個參數提供的密碼嘗試登入來執行相同的測試。

權限

PWDENCRYPT 可以公開使用。

若要檢查 sys.sql_logins 的 password_hash 資料行,需要有 CONTROL SERVER 權限。

範例

A. 識別沒有 SQL Server 2005 或 SQL Server 2008 密碼的登入

下列範例會識別沒有密碼的 SQL Server 登入。第一個 WHERE 子句會檢查以 SQL Server 2000 和更新版本使用之格式儲存值的密碼雜湊。第二個 WHERE 子句會加入 version 參數,檢查仍然以早於 SQL Server 2000 的 SQL Server 版本使用之格式儲存值的密碼雜湊。

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

B. 識別沒有 SQL Server 2000 密碼的登入

sys.sql_logins 資料表不存在於 SQL Server 2000 中。您可以針對 SQL Server 2000 的執行個體執行下列陳述式,識別沒有密碼的 SQL Server 登入。

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

C. 搜尋一般密碼

若要搜尋您要識別與變更的一般密碼,請將密碼指定為第一個參數。例如,執行下列陳述式來搜尋指定為 password 的密碼。

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