SQL Server 2000 內建 WITH ENCRYPTION 選項可對存儲過程原始碼進行混淆保護,防止直接透過 sp_helptext 或系統表檢視邏輯。本文說明加密語法與實際驗證方式。
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'encrypt_this' AND type = 'P')
DROP PROCEDURE encrypt_this
GO
USE pubs
GO
CREATE PROCEDURE encrypt_this
WITH ENCRYPTION
AS
SELECT * FROM authors
GO
嘗試檢視加密過的過程碼:
EXEC sp_helptext encrypt_this
系統將回傳:「The text for object 'encrypt_this' is encrypted.」,確認原始碼已受保護。
WITH ENCRYPTION 實為混淆,具備系統管理員權限者仍可透過 DAC 連線或記憶體分析還原.sql 腳本納入 Git/SVN 管理EXECUTE 權限,禁止 VIEW DEFINITIONMODULE_PRIVACY 或 Always Encrypted最佳實務:視
WITH ENCRYPTION為「誠實者的鎖」,核心商業邏輯仍建議下沉至應用層或使用 CLR 組件實現。