非對稱金鑰 擁有公開金鑰 (加密) 與私鑰 (解密),安全性高但資源消耗大,不建議直接加密大量資料。本文示範建立、查詢、修改私鑰密碼、資料加解密與刪除完整流程。
USE DB_Encrypt_Demo; GO
CREATE ASYMMETRIC KEY asymDemoKey
WITH ALGORITHM = RSA_512
ENCRYPTION BY PASSWORD = 'TestASYM123!'; GO
SELECT name, algorithm_desc, pvt_key_encryption_type_desc
FROM sys.asymmetric_keys;
name algorithm_desc pvt_key_encryption_type_desc
asymDemoKey RSA_512 ENCRYPTED_BY_PASSWORD
ALTER ASYMMETRIC KEY asymDemoKey
WITH PRIVATE KEY (
ENCRYPTION BY PASSWORD = 'newpasswordE4D352F280E0',
DECRYPTION BY PASSWORD = 'TestASYM123!'); GO
-- 建表
CREATE TABLE BankUser (
PKID int PRIMARY KEY IDENTITY(10001,1),
UserNo varbinary(1000) NULL,
CurState smallint DEFAULT 0 NOT NULL
); GO
-- 加密寫入
INSERT BankUser (UserNo, CurState)
VALUES (EncryptByAsymKey(AsymKey_ID('asymDemoKey'), N'137492837583249ABR'), 1); GO
-- 查看密文
SELECT PKID, CurState, CAST(UserNo AS nvarchar(1000)) AS UserNo FROM BankUser WHERE PKID = 10001;

-- 解密讀取 (需提供私鑰密碼)
SELECT PKID, CurState,
CAST(DecryptByAsymKey(AsymKey_ID('asymDemoKey'), UserNo, N'newpasswordE4D352F280E0') AS varchar(1000)) AS UserNo
FROM BankUser WHERE PKID = 10001;

DROP ASYMMETRIC KEY asymDemoKey; GO