2016-11-17 60 views
3

我有它加載數據到目標表,並在會議上與我的AD憑據運行時工作正常的存儲過程。SQL Server中執行的程序,用戶

當我嘗試在作業中運行它(再次在運行方式選擇自己的廣告信息)突然登錄不具有訪問的數據庫的一個。

我用

EXEC SP1 

後就正常了。

我以前(仿效工作運行存儲過程)

EXECUTE AS user = 'Domain\JDoe' 

EXECUTE SP1 

REVERT 

哪些失敗。

爲什麼與在不同的會話窗口中成功地使用相同的憑據運行時存儲過程會失敗?

在此先感謝

+0

你有沒有考慮過你的運行SQL作業或作業步驟爲一個特定的(域)用戶,而不是在你的執行定義呢? – Jens

+0

@Jens,是的,那是我第一次嘗試。我檢查了工作歷史,發現錯誤消息說我沒有正確訪問必要的DB之一。在看到我用EXEC線路手動運行SP後,我用我的用戶名嘗試了EXEC AS,結果與作業 – Powell21

+0

相同錯誤失敗。您使用哪個dbms? – jarlh

回答

3

您需要將源數據庫設置爲TRUSTWORTHY。請注意,這具有其他安全隱患(參見下文)。

默認情況下,在SQL Server中不能使用的假定的安全上下文走出一個數據庫,進入另一個除非源是可信的。將數據庫設置爲TRUSTWORTHY是指示數據庫是可信來源的方式。這是一種安全措施,旨在防止某人從應用程序入侵一個數據庫(通常通過注入),然後將其用作同一SQL Server中所有其他數據庫的跳板。通過將其設定值得信賴你說「這個數據庫是安全,沒有人可以出去誰是不應該。

用alter database像這樣的語句需要,沒有人在你修改它的時候在數據庫中。您可以將WITH ROLLBACK IMMEDIATE添加到該命令的末尾,以便首先拋出其他所有人。當然,這可能有自己的後果... ;-)