首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 區分大小寫密碼比較:使用 CAST 轉 varbinary

     編輯:關於SqlServer

問題場景

在不區分大小寫的 SQL Server 7.0/2000 實例上,預設字串比較會忽略大小寫(如 'Bambi2000' = 'bambi2000')。若需驗證密碼時嚴格區分大小寫,可利用 CAST(... AS varbinary) 進行二進位比較。

解決方案

DECLARE @user_passWord VARCHAR(12);
SET @user_passWord = 'BamBi2000';  -- 使用者輸入

IF CAST(@user_passWord AS varbinary(12)) = CAST('BamBi2000' AS varbinary(12))
    PRINT 'PassWord match';
ELSE
    PRINT 'PassWord mismatch';

原理說明

  • varbinary 比較是逐位元組比對,故 'B' (0x42) 與 'b' (0x62) 不相等。
  • 長度需足夠覆蓋密碼最大長度,範例用 12 位元組。
  • 此法適用於 SQL Server 7.0 及以上版本,無需變更資料庫排序規則。

進階:SQL Server 2000 欄位級排序規則

SQL Server 2000 支援在資料行層級指定 COLLATE(如 Chinese_PRC_CS_AS 區分大小寫),建表時即可設定:

CREATE TABLE Users (
    UserName VARCHAR(50),
    PassWord VARCHAR(50) COLLATE Chinese_PRC_CS_AS  -- 此欄位區分大小寫
);

此後該欄位比較自動區分大小寫,無需每次 CAST。

安全性補充

  • 生產環境**切勿**以明文儲存密碼,應使用雜湊(如 HASHBYTES('SHA2_256', ...))加鹽儲存。
  • 驗證時比對雜湊值,同樣可用 varbinary 比較。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved