2017-01-03 67 views
1

我有一個作爲域用戶運行的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上查看本地安全策略,但沒有任何結果。是的,我也重新啓動了應用服務器(不是數據庫)。

+0

看起來像一個雙跳問題:從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 /)詳細描述了一種情況。 –

+0

謝謝@JeroenMostert。那篇文章很有用,但它指向的論壇無法訪問。我終於明白了!它與服務主體名稱和Kerberos身份驗證相關。我會寫一個更大的條目作爲答案。 – Candide

回答

0

我終於想通了這一點,我將分享以下結果:

  1. 安裝Kerberos配置工具爲SQL Server 2012,並確保所有的SPN配置正確。 URL:https://www.microsoft.com/en-us/download/details.aspx?id=39046 如果此工具在連接到SQL Server時出現任何錯誤,請檢查本地組(可能是管理員),您可能會將刪除的用戶作爲UUID出現,並將其刪除。重新啓動工具並修復任何問題。

  2. 配置windows服務的SPN。語法是:

    SETSPN -a [service_class]/[FQDN]:端口DOMAIN_NAME \ domain_user,你必須在網絡中使用的FQDN

    注意,IP只不起作用。該端口是可選的。此外,從[service_class]只能從一個選定的關鍵字列表。列表在這裏找到: https://technet.microsoft.com/en-us/library/cc772815(WS.10).aspx (歸功於: https://serverfault.com/questions/350782/can-someone-please-explain-windows-service-principle-names-spns-without-oversi

    在我來說,我使用的HTTP服務器類(爲什麼沒有理由的定製服務類並沒有爲我工作?!)

    setspn -a http/Srv01.mydomain.com MYDOMAIN \ myuser

  3. 接下來轉到兩個用戶SQL Server域用戶和Windows服務域用戶的Active Directory屬性。進入「委派」選項卡,然後選擇「信任此用戶以委派任何服務(僅限Kerberos)」。

  4. 最後,重新啓動windows服務(我重新啓動了SQL Server服務,以確定)。監視服務所在服務器的連接:

    從sys中選擇session_id,net_transport,client_net_address,auth_scheme。dm_exec_connections WHERE client_net_address = 'XXX.XXX.XXX.XXX'

您應該看到Kerberos進行從應用服務器來連接。這也解決了文件權限問題。