在 SQL Server 中建立應用程式角色
應用程式角色可提供對應用程式(而不是資料庫角色或使用者)分配許可權的方法。使用者可以連線到資料庫、啟用應用程式角色以及採用授予應用程式的許可權。授予應用程式角色的許可權在連線期間有效。
安全說明 |
當客戶端應用程式在連線字串中提供應用程式角色名稱和密碼時,可啟用應用程式角色。因為密碼必須儲存在客戶端計算機上,所以這些角色在二層應用程式上導致一個安全漏洞。在三層應用程式中,您可以儲存密碼,以便其他應用程式使用者將無法對其進行訪問。 |
應用程式角色具有以下功能:
·與資料庫角色不同,應用程式角色不包含成員。
·當客戶端應用程式向 sp_setapprole 系統儲存過程提供應用程式角色名稱和密碼時,可啟用應用程式角色。
·密碼必須儲存在客戶端計算機上,並且在執行時提供;應用程式角色無法從 SQL Server 內啟用。
·密碼不加密。從 SQL Server 2005 開始,引數密碼作為單向雜湊儲存。
·一旦啟用,通過應用程式角色獲取的許可權在連線期間保持有效。
·在 SQL Server 2000 中,無法將執行上下文切換回原始呼叫方。因此,您必須關閉連線池才能使用應用程式角色。有關更多資訊,請參見。
·應用程式角色繼承授予 public 角色的許可權。
·如果固定伺服器角色 sysadmin 的成員啟用某一應用程式角色,則安全上下文在連線期間切換為應用程式角色的上下文。
·如果您在具有應用程式角色的資料庫中建立 guest
·返回登入名的內建函式(如 SYSTEM_USER)返回呼叫應用程式角色的登入名。返回資料庫使用者名稱的內建函式將返回應用程式角色的名稱。
最小特權原則
僅當密碼遭洩漏時,應用程式角色才被授予必要的許可權。在使用應用程式角色的任何資料庫中,應撤消對 public 角色的許可權。在不希望應用程式角色的呼叫方具有訪問許可權的任何資料庫中,禁用 guest 帳戶。
應用程式角色增強
從 SQL Server 2005 版本開始,執行上下文可在啟用應用程式角色後切換回原始呼叫方,而不必禁用連線池。
應用程式角色依賴於密碼的安全性,而密碼具有潛在的安全漏洞。密碼被嵌入應用程式程式碼或儲存在磁碟上就有可能洩露。
對於 SQL Server 2005 或更高版本,您可能需要考慮下列其他選擇。
·使用通過 EXECUTE AS 語句及其 NO REVERT 和 WITH COOKIE 字句切換的上下文。您可以在未對映為登入名的資料庫中建立使用者帳戶。然後,向此帳戶分配許可權。對於很少登入的使用者使用 EXECUTE AS 比較安全,因為它基於許可權,而不基於密碼。有關更多資訊,請參見。