1. 程式人生 > >在 SQL Server 中建立應用程式角色

在 SQL Server 中建立應用程式角色

應用程式角色可提供對應用程式(而不是資料庫角色或使用者)分配許可權的方法。使用者可以連線到資料庫、啟用應用程式角色以及採用授予應用程式的許可權。授予應用程式角色的許可權在連線期間有效。

安全說明

當客戶端應用程式在連線字串中提供應用程式角色名稱和密碼時,可啟用應用程式角色。因為密碼必須儲存在客戶端計算機上,所以這些角色在二層應用程式上導致一個安全漏洞。在三層應用程式中,您可以儲存密碼,以便其他應用程式使用者將無法對其進行訪問。

應用程式角色具有以下功能:

·與資料庫角色不同,應用程式角色不包含成員。

·當客戶端應用程式向 sp_setapprole 系統儲存過程提供應用程式角色名稱和密碼時,可啟用應用程式角色。

·密碼必須儲存在客戶端計算機上,並且在執行時提供;應用程式角色無法從 SQL Server 內啟用。

·密碼不加密。 SQL Server 2005 開始,引數密碼作為單向雜湊儲存。

·一旦啟用,通過應用程式角色獲取的許可權在連線期間保持有效。

· SQL Server 2000 中,無法將執行上下文切換回原始呼叫方。因此,您必須關閉連線池才能使用應用程式角色。有關更多資訊,請參見

·應用程式角色繼承授予 public 角色的許可權。

·如果固定伺服器角色 sysadmin 的成員啟用某一應用程式角色,則安全上下文在連線期間切換為應用程式角色的上下文。

·如果您在具有應用程式角色的資料庫中建立 guest

帳戶,則不必為該應用程式角色或呼叫它的任何登入名建立資料庫使用者帳戶。只有當在另一個數據庫中存在 guest 帳戶時,應用程式才能直接訪問另一資料庫。

·返回登入名的內建函式(如 SYSTEM_USER)返回呼叫應用程式角色的登入名。返回資料庫使用者名稱的內建函式將返回應用程式角色的名稱。

最小特權原則

僅當密碼遭洩漏時,應用程式角色才被授予必要的許可權。在使用應用程式角色的任何資料庫中,應撤消對 public 角色的許可權。在不希望應用程式角色的呼叫方具有訪問許可權的任何資料庫中,禁用 guest 帳戶。

應用程式角色增強

SQL Server 2005 版本開始,執行上下文可在啟用應用程式角色後切換回原始呼叫方,而不必禁用連線池。

sp_setapprole 過程具有一個建立 Cookie 的新選項,Cookie 包含有關呼叫方的上下文資訊。您可以通過呼叫 sp_unsetapprole 過程來還原會話,並向其傳遞 Cookie

應用程式角色依賴於密碼的安全性,而密碼具有潛在的安全漏洞。密碼被嵌入應用程式程式碼或儲存在磁碟上就有可能洩露。

對於 SQL Server 2005 或更高版本,您可能需要考慮下列其他選擇。

·使用通過 EXECUTE AS 語句及其 NO REVERT WITH COOKIE 字句切換的上下文。您可以在未對映為登入名的資料庫中建立使用者帳戶。然後,向此帳戶分配許可權。對於很少登入的使用者使用 EXECUTE AS 比較安全,因為它基於許可權,而不基於密碼。有關更多資訊,請參見