共用方式為


SQL Server 中的應用程式安全性案例 (ADO.NET)

更新: November 2007

建立安全的 SQL Server 用戶端應用程式,並不只有一種正確方式。每個應用程式的需求、部署環境及使用者對象都有其獨特性。初次部署時還相當安全的應用程式,隨著時間流逝,也可能變得不再那麼安全。要精確預測未來可能發生什麼威脅是不可能的事。

SQL Server 這項產品已經歷經多個版本的演變,納入了最新的安全性功能,可以讓開發人員建立安全的資料庫應用程式。不過,安全性並沒有單純的解決方案,而是需要持續的監控和更新。

常見威脅

開發人員需要瞭解安全性威脅、針對防禦這些威脅而提供的工具,以及如何避免自身造成的安全性漏洞。安全性如同鏈結,任何環節的中斷都會危及整體的強度。下列清單包含一些常見的安全性威脅,在本節的主題中將加以詳細討論。

SQL 插入

「SQL 插入」(SQL Injection) 是指惡意的使用者用來輸入 Transact-SQL 陳述式 (而非有效輸入) 的流程。如果該輸入未經驗證而直接傳遞至伺服器,而且應用程式不慎而執行了插入的程式碼,則攻擊就可能會危及或損毀資料。您可以藉由使用預存程序 (Stored Procedure) 和參數化命令、避免動態 SQL 以及限制所有使用者的權限,來防堵 SQL Server 插入式攻擊。

權限提高

權限提高攻擊會發生在使用者能夠取得受信任帳戶 (例如擁有者或系統管理員) 的權限時。請務必在最小權限的帳戶下執行,並只指派必要的權限。請避免使用系統管理員或擁有者帳戶執行程式碼。如此就算攻擊成功,也可限制造成的傷害。在執行需要其他權限的工作時,請只在工作期間才使用程序簽章或模擬。從 SQL Server 2005 開始,使用者可以用憑證來簽署預存程序,或使用模擬來暫時指派權限。

探查和智慧型觀測

探查攻擊可能會使用應用程式產生的錯誤訊息來搜尋安全性漏洞。在所有程序性程式碼中實作錯誤處理,以避免 SQL Server 錯誤資訊傳回給使用者。

驗證

如果以使用者輸入為基礎的連接字串是在執行階段建構,則在使用 SQL Server 登入時可能會發生連接字串插入攻擊。如果沒有檢查連接字串是否具有有效的關鍵字字組,則攻擊者可以插入多餘的字元,而可能得以存取伺服器上的機密資料或其他資源。請盡量使用 Windows 驗證。如果必須使用 SQL Server 登入,請使用 SqlConnectionStringBuilder 在執行階段建立及驗證連接字串。

密碼

許多攻擊之所以成功,都是因為侵入者得以取得或猜出授權使用者的密碼。密碼是在面對侵入者時的第一道防線,所以設定強式密碼對於系統安全性而言十分關鍵。從 SQL Server 2005 開始,即可針對混合模式驗證建立密碼原則並加以強制執行。

即使在使用「Windows 驗證」時,也請務必為 sa 帳戶指派強式密碼。

本節內容

請參閱

其他資源

SQL Server 安全性 (ADO.NET)

SQL Server 安全性的概觀 (ADO.NET)

保護 ADO.NET 應用程式的安全