我有一個作爲域用戶運行的Windows服務(.NET),它具有對所需數據庫資源和文件系統的完全權限。該服務調用一個在SQL Server中調用批量插入語句的過程。使用SQL Server和集成安全性的權限錯誤
該服務使用集成安全性運行,該帳戶已被授予登錄作爲服務權限。但是,如果服務在除SQL Server所在位置以外的其他服務器上運行,則會面臨權限問題。
應用程序服務器被稱爲Srv01,而數據庫服務器是Sql01。該過程生成pdf並使用Sql01中的過程調用批量插入。當我在Srv01中安裝Windows服務時,出現以下錯誤:
Cannot bulk load because the file "//Srv01/Output/Letter.pdf" could not be opened. Operating system error code 5(Access is denied.).
網絡共享擁有所有人的完全權限。我只是試圖讓這個工作,並在以後收緊安全。
當我運行相同的服務時,與數據庫在同一臺服務器上的同一個域用戶,即Sql01,該進程正常工作。
我們正在運行:Windows Server 2012,SQL Server 2012 Enterprise,並且該服務是使用.NET 4.5編寫的。我試圖在sql server和app server上查看本地安全策略,但沒有任何結果。是的,我也重新啓動了應用服務器(不是數據庫)。
看起來像一個雙跳問題:從srv01到sql01的身份驗證有效,但是當sql01試圖模擬該帳戶訪問srv01上的共享時,它會失敗。有很多事情可能會在這裏出錯; [this site](https://www.roelvanlisdonk.nl/2009/05/22/microsoft-sql-2005-bulk-insert-kerberos-double-hop-and-operating-system-error-code-5-access -is-denied /)詳細描述了一種情況。 –
謝謝@JeroenMostert。那篇文章很有用,但它指向的論壇無法訪問。我終於明白了!它與服務主體名稱和Kerberos身份驗證相關。我會寫一個更大的條目作爲答案。 – Candide