2010-05-10 145 views
87

我知道這幾乎是重複的:The error "Login failed for user 'NT AUTHORITY\IUSR'" in ASP.NET and SQL Server 2008Login failed for user 'username' - System.Data.SqlClient.SqlException with LINQ in external project/class library但有些事情沒有加起來相比,我的服務器上的其他應用程序,我不知道爲什麼。

盒使用:

網箱
SQL盒
SQL試驗箱

我的應用程序:

我有aASP.NET Web應用程序,它引用一個使用LINQ到SQL的類庫。連接字符串在類庫中正確設置。根據Login failed for user 'username' - System.Data.SqlClient.SqlException with LINQ in external project/class library我還將此連接字符串添加到Web應用程序。

連接字符串使用SQL憑據,所以(在Web應用程序和類庫):

<add name="Namespace.My.MySettings.ConnectionStringProduction" 
     connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password" 
     providerName="System.Data.SqlClient" /> 

此連接證實通過將其添加到服務器資源管理器的工作。這是我的.dbml文件正在使用的連接字符串。

問題:

我收到以下錯誤:

System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'. 

現在引用此The error "Login failed for user 'NT AUTHORITY\IUSR'" in ASP.NET and SQL Server 2008它說這是真正的本地網絡服務和使用任何其他非域名將無法正常工作。

但是我很困惑,因爲我已經檢查了SQL Box和SQL Test Box SQL Management Studio,並且都在安全 - >用戶下列出的安全性 - >登錄下的數據庫級別上有NT AUTHORITY/NETWORK SERVICE,但在數據庫級別安全性 - >用戶我讓用戶顯示在連接字符串中。

在Web服務器上的NTFS級別,權限有NETWORK SERVICE具有完全控制。

爲什麼我感到困惑的原因是因爲我有我的Web服務器上的許多其他Web應用程序,兩個SQL盒和SQL試驗箱是參考數據庫,他們所有的工作。但我找不到他們和我當前的應用程序之間的區別,除了我正在使用類庫。這是否重要?檢查NTFS權限,在服務器和數據庫級別設置安全登錄,連接字符串和連接方法(SQL Server憑據)以及IIS應用程序池和其他文件夾選項都是相同的。

爲什麼這些應用程序的工作不添加計算機名$以任我SQL箱子的權限?但這就是這條鏈接告訴我要解決這個問題的方法。

+0

因此,要回顧一下,你不使用數據庫用戶?我們創建一個可以把它和SA取決於什麼,我們需要做的... – jcolebrand 2010-05-10 21:04:20

+0

在連接字符串我使用的數據庫用戶,這是我在創造安全之間進行切換 - >登錄區,將其添加到安全 - >數據庫的用戶,並給它dbo權限。我也是這樣做了我所有的其他應用程序。 – SventoryMang 2010-05-10 21:28:07

回答

115

網絡服務和本地系統將始終驗證自己作爲correpsonding帳戶本地(內置\網絡服務和內置\系統),但雙方會在機器驗證遠程帳戶。

如果看到類似Login failed for user 'DOMAIN\MACHINENAME$'的故障,則意味着以NETWORK SERVICE或LocalSystem身份運行的進程已訪問遠程資源,已將自己認證爲機器帳戶並被拒絕授權。

典型的例子是在一個應用程序池集運行使用網絡服務的憑證,並連接到遠程SQL服務器的ASP應用:應用程序池將作爲運行的應用程序池進行身份驗證,並且是本機賬號需要被授予訪問權限。

當訪問被拒絕的機器帳戶,然後訪問必須被授予計算機帳戶。如果服務器拒絕登錄'DOMAIN \ MACHINE $',那麼您必須授予'DOMAIN \ MACHINE $'登錄權限而不是NETWORK SERVICE。授予對NETWORK SERVICE的訪問權限將允許本地進程作爲NETWORK SERVICE進行連接,而不是遠程連接,因爲遠程服務器會根據您猜測的DOMAIN \ MACHINE $進行身份驗證。

如果你希望在ASP應用程序連接到遠程SQL Server的SQL登錄,你會得到關於域名\ MACHINE例外$它意味着你在連接字符串中使用集成安全性。如果這是意外的,這意味着你搞砸了你使用的連接字符串。

+0

對,我收集了什麼,謝謝你的解釋。但是,問題仍然存在,我的所有應用程序都託管在我的Web服務器上,但訪問SQL或SQL Test Box上的數據庫,這將是遠程訪問是嗎?然而,他們正在努力...但我的SQL箱都沒有授予DOMAIN \ MACHINENAME $訪問權限。 – SventoryMang 2010-05-10 21:31:22

+0

哦另外,我確實希望作爲一個SQL登錄連接到SQL服務器,但是我已經發布了我的連接字符串,我沒有使用Integrated Security = True選項,還有什麼可能? – SventoryMang 2010-05-10 21:36:16

+2

有三種可能的解釋:1)他們使用SQL身份驗證,而不是集成的身份驗證(這似乎是最合理的一個,因爲你比如在康涅狄格州字符串的用戶名和密碼)2),他們使用集成的身份驗證和運行應用程序輪詢使用不同的憑證或3)他們使用集成的身份驗證,但ASP應用程序模擬調用者,從而觸發約束委派:http://technet.microsoft.com/en-us/library/cc739587%28WS.10%29。 ASPX。 – 2010-05-10 21:37:39

10

爲我工作的訣竅是從我的連接字符串刪除Integrated Security並在libruary的App.config添加一個正User ID=userName; Password=password連接字符串使用集成安全性,但在Web.config創造了一個可能不是!

+3

十億感謝你。巨大的,巨大的幫助。謝謝你,謝謝你,謝謝你。 這是,我敢肯定,非常明顯,但對於未來的人來說,它是用戶ID =東西;密碼=東西; – shubniggurath 2013-10-21 14:04:16

+1

我在帖子的標題中收到同樣的錯誤。當數據庫連接字符串中出現「'trusted connection = true'」時,我發現'User Id = yourUserid Password = yourPassword'會被忽略。我從我的字符串中刪除了「'trusted connection = true'」,這解決了我的問題。直到我將應用程序從VS 2012中的調試移到iis 8時才發生這種情況。 – 2014-07-04 07:11:35

9

我加<identity impersonate="true" />到我的web.config它工作得很好。

+4

只要理解這將改變ASP.NET應用程序在其下運行的上下文。它不是在默認的「NETWORK SERVICE」環境下運行,而是現在在使用應用程序的用戶的上下文中運行(即Domain \ someUser)。這有時可以,但只要瞭解這一變化不僅僅是OP的快速修復,而且還有其他可能/不需要的下游影響。 – atconway 2014-08-26 01:48:38

+0

[上的MSDN](https://msdn.microsoft.com/en-us/library/72wdk8cc(v = vs.71).aspx) – Timothy 2015-09-17 05:30:44

18

此錯誤時,你已經配置了IIS應用程序時,和IIS轉到SQL Server和嘗試與不具有適當的權限的憑據登錄。複製或鏡像設置時也會發生此錯誤。 我將繼續討論一個始終有效並且非常簡單的解決方案。 轉到SQL Server >>安全>>登錄並右鍵單擊NT AUTHORITY \ NETWORK SERVICE並選擇屬性

在新打開的登錄屬性屏幕中,轉到「用戶映射」選項卡。然後,在「用戶映射」選項卡上,選擇所需的數據庫 - 尤其是顯示此錯誤消息的數據庫。在屏幕下方,檢查角色db_owner。點擊確定。

+2

這是我的解決方案,因爲Web應用程序和數據庫位於同一臺機器。 我仍然收到錯誤「Login for user'DOMAIN \ MACHINENAME $」,但將該機器添加到SQL登錄名並沒有幫助,但添加了「NT AUTHORITY \ NETWORK SERVICE」。 雖然不應該使用角色db_owner,除非需要,通常db_datareader和db_datawriter就足夠了。 – JimiSweden 2016-02-16 13:04:27

9

一位同事有同樣的錯誤,這是由於在IIS中的一個小配置錯誤。
爲Web應用程序分配了錯誤的應用程序池。

事實上,我們使用自定義的應用程序池與特定的身份,以滿足我們的需求。

在他的本地IIS管理器 - >站點 - >默認網站 - >我們的Web應用程序名稱 - >基本設置... 應用程序池是「DefaultAppPool」而不是我們的自定義應用程序池。

設置正確的應用程序池解決了問題。

2

我們在處理Analysis Services數據庫時收到了類似的錯誤消息。事實證明,用於運行Analysis Services實例的用戶名尚未添加到SQL Server的安全登錄中。

在SQL Server 2012中,SQL Server和分析服務默認配置爲運行爲不同的用戶。如果您使用默認設置,請務必確保AS用戶有權訪問您的數據源!

+1

我有同樣的問題。來自SSAS的錯誤是相同的,但該帳戶不是網絡服務。 該帳戶實際上是:NT服務\ MSOLAP $ INSTANCENAME – cdonner 2014-04-02 17:53:02

5

對我來說,當我用允許訪問數據庫的網絡帳戶替換默認的內置帳戶「ApplicationPoolIdentity」時,問題就解決了。

設置可以在Internet信息服務器(IIS 7+)>應用程序池> Advanded設置>流程模型>身份

0

作出我有同樣的問題早,從我的ConnectionString去除工作Persist Security Info=True

0

我花了幾個小時試圖解決這個問題,我終於搞定了--SQL Server瀏覽器被「停止」了。解決方法是將其更改爲 「自動」 模式:

If it is disabled, go to Control Panel->Administrative Tools->Services, and look for the SQL Server Agent. Right-click, and select "Properties." From the "Startup Type" dropdown, change from "Disabled" to "Automatic".

quote from here

1

選擇是否在連接字符串有

User Instance=true 

。嘗試刪除它可以解決您的問題。

7

在我的情況下,我有我的IIS應用程序池Identity="ApplicationPoolIdentity"

在我將IIS APPPOOL\ApplicationName用戶添加到SQL Server後,它可以正常工作。

+2

我相信這隻會在IIS和SQL服務器在同一臺機器上時才起作用。 – 2017-03-03 22:47:19

+1

這對我有用!我有一個本地的IIS-SQL服務器設置。 – 2017-10-30 13:59:05

5

基本上解決這一點,我們需要有一些設置類似於

  • Web App的ApplicationPoolIdentity下運行
  • 在連接字符串中使用Windows身份驗證
  • Web應用程序通過ADO.Net連接到數據庫

與Windows身份驗證一起使用的連接字符串包括Trusted_Connection=Yes屬性或Web.config文件中的等效屬性Integrated Security=SSPI

我的數據庫連接處於Windows身份驗證模式。所以我決定通過簡單的從改變應用程序池標識ApplicationPoolIdentity我的域名登錄憑據域名\ MyloginId

步驟:

  1. 點擊應用程序池
  2. 選擇您的應用程序的名稱

  3. 轉到高級設置

  4. 展開過程模型並單擊身份。點擊右側的三個 點。
  5. 點擊設置...按鈕和提供 您的域名登錄憑據

對我來說,它已經解決了。

注意:在生產環境或IT環境中,您可能擁有同一域下的服務帳戶以獲取應用程序池標識。如果是這樣,請使用服務帳戶而不是登錄名。

1

我也有過這樣的錯誤與SQL Server身份驗證的用戶

我嘗試了一些修正,但他們沒有工作。

在我的情況的解決方案是配置其「服務器身份驗證模式」,讓SQL Server身份驗證,下Management Studio中:屬性/安全。

1

,每個人似乎都忽略了唯一的一點是,你可能要集成安全=真。您可能使該網站在帳戶下運行。這一切都很好,所以仍然可以用原始用戶憑證而不是池來訪問SQL服務器。它被稱爲約束委派。如果啓用它並設置SPN,Windows會將用戶的請求轉換爲最終服務(SQL只是一種此類服務),從而轉換池的憑據。您必須註冊在Web服務器上處理SQL請求的「唯一且唯一的SQL」服務器。設置這一切對我來說太過分了,無法在這裏準確地描述。我花了相當長的時間才自己完成它。