2010-12-01 54 views
2

當我嘗試使用「在服務器中安全存儲的憑據」從SSRS指定數據源到SQL Server數據庫(2008)時,我當前遇到以下錯誤 - 這是指定爲Windows帳戶「s2 \ killian」,並選中「在建立連接後模擬經過身份驗證的用戶」選項。使用來自SSRS連接的模擬所需的SQL數據庫權限

消息15157級別16狀態1行1 由於以下原因之一,setuser失敗:數據庫主體's2 \ killian'不存在,其相應的服務器主體不具有服務器訪問權限,該類型數據庫主體不能被模擬,或者你沒有權限。

很顯然,這種模擬方法在幕後使用SetUser()函數,並且MSDN文檔聲明爲了使用此函數需要dbowner權限。不過,我在使用dbowner時遇到了上述錯誤。由於安全策略,我無法使用系統管理員。

是否有人知道如何在不將SQL Server數據庫的系統管理員權限分配給SSRS數據源所使用的Windows帳戶的情況下,獲取此身份驗證和模擬工作機制。

有沒有辦法讓SetUser()在沒有系統管理員權限的情況下工作?

由於 基利安

回答

3

線索是「數據庫主體‘S2 \基利安’不存在」

任何連接使用在數據庫端上下文改變(例如SETUSEREXECUTE AS等)要求模擬用戶存在於sys.server_principals和/或sys.database_principals中。

假設您使用AD組而不是單個登錄,那麼這將導致與上述相同的錯誤。超出任何權限。如果您是db_owner,那麼您可以在數據庫級別進行模擬。如果你不能,那是因爲前面的段落。

我一直認爲這是SSRS有一個愚蠢的選擇。 MSDN says it uses SETUSER這也被棄用。理想情況下,你會冒充之前連接,這是可能的asp.net應用程序,但不知道SSRS(這是一個asp.net應用程序當然)

對不起,「做到這一點,它的工作原理「回答...

+0

對不起,慢慢回來說感謝您的信息,但我不能爲我的生活得到它沒有系統管理員,即在sys.server_principals/sys.database_principals中使用dbowner和個人會員。我同意SSRS不使用EXECUTE AS而不是棄用的SetUser是很奇怪的。 – user521565 2010-12-07 14:47:27

0

我已經能夠確認您必須具有系統管理員權限才能運行SETUSER函數,該函數似乎是SQL報告服務利用的機制,當」模擬連接後驗證的用戶「選項是選擇。

MSDN的文檔SETUSER提到了這一點,但它聽起來應該也可以運行此函數作爲一個db_owner,但我還沒有得到報告服務使用只有db_owner的帳戶,我甚至沒有能夠在只有db_owner的帳戶下手動運行setuser。我得到它的唯一方法是使用系統管理員權限。