WITH ENCRYPTION,隱藏 sp_helptext 顯示CREATE PROCEDURE proc_name
@param datatype
WITH ENCRYPTION
AS
-- 加密後 sp_helptext 無法檢視,需保留原始碼備份
代價: 連線建立後需解密執行,編譯期效能稍降;網路封包不可控環境建議啟用。
GRANT/DENY 控制資料行存取權限開發者將使用者輸入直接拼接 SQL 字串:
strQuery = "SELECT ContactName FROM Customers WHERE CustomerID = '" & Request.Form("CustID") & "'"
攻擊者輸入:' UNION ALL SELECT ContactName FROM Customers WHERE CustomerID <> ''
實際執行:
SELECT ContactName FROM Customers WHERE CustomerID = ''
UNION ALL SELECT ContactName FROM Customers WHERE CustomerID <> ''
導致洩露所有客戶姓名。更嚴重可執行 DROP TABLE、xp_cmdshell 等破壞指令。
cmd.CommandText = "SELECT ContactName FROM Customers WHERE CustomerID = @CustID"
cmd.Parameters.Append cmd.CreateParameter("@CustID", adVarChar, , 10, Request.Form("CustID"))
sa、sysadmin、xp_cmdshell加密保護靜態/傳輸中資料,參數化查詢徹底杜絕 SQL 注入,兩者構成資料庫安全防禦的雙重基石。