Sql-Server

SQL Server 2014 虛擬帳戶的文件權限

  • February 28, 2016

我在同一台伺服器上安裝了兩個 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.

關於正在發生的事情的一些額外說明,但這與實際錯誤或問題無關。

引用自:https://dba.stackexchange.com/questions/130615