SQL Server 內部使用未文件化的 pwdencrypt() 加密密碼、pwdcompare() 驗證密碼(單向雜湊,不可逆)。透過檢視 master.dbo.sp_addlogin、sp_password 原始碼可發現用法。本文示範如何呼叫這兩個函數實作自訂帳號密碼雜湊驗證機制。
-- 加密明文密碼
DECLARE @ClearPwd VARCHAR(255) = 'test', @EncryptedPwd VARBINARY(255);
SELECT @EncryptedPwd = CONVERT(VARBINARY(255), pwdencrypt(@ClearPwd));
SELECT @EncryptedPwd; -- 0x0100... (二進位雜湊值)
-- 驗證密碼
SELECT pwdcompare(@ClearPwd, @EncryptedPwd, 0); -- 回傳 1 (匹配)
SELECT pwdcompare('WrongPwd', @EncryptedPwd, 0); -- 回傳 0 (不匹配)
pwdencrypt 為單向雜湊,無法解密還原明文。pwdcompare 第三參數為 xstatus 遮罩,一般傳 0 即可。HASHBYTES('SHA2_256', ...) 等標準函數。