2011-07-07 27 views
0

我剛開始看到一個實現安全性的系統,與標準稍有不同。當EXECUTE AS用於安全時,加快SQL Server的策略

他們創建系統(其中有大約32K現在)的每個用戶一個新的SQL用戶。每個查詢都是通過最初使用SA帳戶的連接發送的(不要陷入這種困境),然後在知道用戶是誰之後,將使用EXECUTE AS USER查詢。

既然有這麼多的用戶,創建新用戶和交換有着顯着的性能命中,該公司正在尋求改善的情況。

的幾點: - SQL代碼是動態的SQL(不存儲過程) - 最初的想法是,以緩解需求,爲公司的開發人員擔心編寫SQL擔心權限 - 讓另一層隱憂關於它。

怎樣一個嘗試和改進的查詢執行時間,避免了EXECUTE AS用戶代碼,仍然得到同樣的安全審查?

SQL Server是否支持會話變量來存儲用戶帳戶?

+0

'EXECUTE AS'用於每個查詢嗎?只要連接/會話保持打開,'EXECUTE AS'就保持有效。任何可以存儲在「會話變量」中的任何內容的生命週期都會比'EXECUTE AS'生效的時間週期更短,或者等於其長度。 –

回答

0

這是很難知道這是否是有幫助沒有更多的細節上如何應用程序的安全模型,以及如何控制和/或池數據庫連接。它是一個胖客戶,n層還是別的?

SQL連接可以支持使用CONTEXT_INFO一個單一的「會話變量」 - 一個用戶可配置的二進制文件(128)的字段,它仍然存在對於連接的持續時間。這可能會符合您的要求,但是您需要注意,如果您使用它來存儲安全信息,則最終用戶將可以訪問它 - 因此,您應該加密或加密並散列CONTEXT_INFO中的任何安全信息,以防止用戶篡改它們權限;這可能會影響性能。

根據您的應用程序體系結構可能並不適用,但你有沒有考慮切換到Windows授權和組織雖然Active Directory用戶和組的權限?