PWDCOMPARE(Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Microsoft Fabric 中的 SQL 資料庫

雜湊密碼並將該雜湊與現有密碼的雜湊相比較。 PWDCOMPARE 可用於搜尋空白的 SQL Server 登入密碼或一般弱式密碼。

Transact-SQL 語法慣例

語法

PWDCOMPARE ( 'clear_text_password'  
   , password_hash   
   [ , version ] )  

引數

'clear_text_password'
這是未加密的密碼。 clear_text_password is sysname (nvarchar(128))。

password_hash
這是密碼的加密雜湊。 password_hashvarbinary(128)

version
若登入中的 password_hash 代表 SQL Server 2000 (8.x) (已移轉到 SQL Server 2005 (9.x) 或更新版本) 之前的值,但從未轉換至 SQL Server 2000 (8.x) 系統,就可以將已經過時的值設定為 1。 versionint

警告

此參數是為了向下相容而提供,但因密碼雜湊區塊包含自身版本描述而被忽略。 SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。

傳回型別

int

clear_text_password 的雜湊符合 password_hash 參數,則傳回 1;否則傳回 0。

備註

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

PWDCOMPARE 無法與自主資料庫使用者的密碼搭配使用。 沒有任何自主資料庫對等項目。

權限

PWDENCRYPT 可以公開使用。

若要檢查 sys.sql_logins 的 password_hash 數據行

  • 針對 SQL Server 2019 (15.x) 和舊版, 需要 CONTROL SERVER 許可權。
  • 對於 SQL Server 2022(16.x)及更新版本,必須啟用 VIEW ANY(ANY)加密安全定義權限。

範例

A. 識別沒有密碼的登入

下列範例會分辨不具密碼的 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 ;