SQL Server 2014 虛擬帳戶的文件權限
我在同一台伺服器上安裝了兩個 SQL Server 2014 實例——一個用於生產,一個用於開發。我已經設置了一個 SQL 代理作業,該作業辨識生產實例的最新備份並在開發實例上恢復它。當我執行這項工作時,它給了我這樣的錯誤(更改名稱以保護無辜者):
以使用者身份執行:NT SERVICE\SQLAgent$MyAppDEV。
無法打開備份設備“E:…MyApp_backup_2016_02_24_092912_0136837.bak”。
作業系統錯誤 5(拒絕訪問。)。
$$ SQLSTATE 42000 $$(錯誤 3201)
RESTORE DATABASE 異常終止。
$$ SQLSTATE 42000 $$(錯誤 3013)。
步驟失敗。
我閱讀了一些關於執行 SQL 代理的虛擬帳戶的資訊。如果我打開有問題的文件夾並授予讀取權限
NT Service\SQLAgent$MyAppDEV
,我仍然會收到相同的錯誤。但是,如果我授予對Authenticated Users
內置帳戶的讀取權限,則一切正常。是什麼賦予了?該錯誤消息旨在告訴我該作業正在使用什麼安全上下文,但這似乎與現實不符。
Dan,
我假設執行代理作業的帳戶是系統管理員。在這種情況下,
DEV
實例將需要具有其服務帳戶或服務 sid 才能DATABASE ENGINE
獲得對文件夾的給定訪問權限。SQL Server 代理不執行還原,它連接到 SQL Server 並在非系統管理員的情況下模擬帳戶,然後繼續。在這種情況下,您將連接到數據庫引擎並發出
RESTORE DATABASE
將由引擎處理的命令。SQL 代理不涉及備份,引擎是。編輯:解釋發布的代理輸出
Executed as user: NT SERVICE\SQLAgent$MyAppDEV.
這讓您知道代理作業是作為 SQLAgent$MyAppDEV 本地帳戶執行的。這很可能是由於作業所有者是系統管理員。
Cannot open backup device 'E:...MyApp_backup_2016_02_24_092912_0136837.bak'.
這是實際錯誤,我們無法打開文件。我們還不知道為什麼。
Operating system error 5(Access is denied.).
這解釋了為什麼我們無法打開文件,作業系統返回錯誤 5。這可以通過
net helpmsg 5
在命令提示符下執行檢查作業系統返回程式碼來驗證。[SQLSTATE 42000] (Error 3201) RESTORE DATABASE is terminating abnormally. [SQLSTATE 42000] (Error 3013). The step failed.
關於正在發生的事情的一些額外說明,但這與實際錯誤或問題無關。