2009-08-13 132 views
13

我的ASP.NET v3.5 Web應用程序在嘗試打開與SQL Server的連接時引發以下異常2008數據庫:ASP.NET和SQL Server 2008中的用戶「NT AUTHORITY IUSR」登錄失敗

System.Data.SqlClient.SqlException:通過登錄 無法打開數據庫 「MyDbName」 要求。登錄 失敗。用戶NT AUTHORITY \ IUSR登錄失敗。

事情是,我已將NT AUTHORITY\IUSR添加到服務器的登錄列表以及數據庫的用戶列表中。對於服務器,我已授予用戶Public角色,並授予數據庫已授予db_datareader權限。

我還爲NT AUTHORITY\NETWORK SERVICE授予了相同的權限,該權限是運行應用程序池的標識。

Web應用程序由IIS7託管,如果這有所幫助。當數據庫和IIS位於同一臺物理機器上時,問題重現。

回答

6

這裏的訣竅是NT AUTHORITY\NETWORK SERVICE實際上在數據庫中出現爲DOMAINNAME\MACHINENAME$(注意$符號!)。也就是說,當您從Web服務器跨越機器邊界到SQL Server時,如果您使用NETWORK SERVICELOCAL SYSTEM帳戶,SQL Server將看到機器帳戶。如果您使用任何其他非域帳戶,SQL Server將不會收到您的憑據。

我對你的錯誤信息有點困惑。說實話,我不認爲當數據庫在另一個盒子上時,你會看到除Login Failed for NT AUTHORITY\ANONYMOUS LOGON之外的任何東西。

IUSR用於匿名網站,無法通過電纜傳遞給SQL Server。如果你在同一臺機器上做所有事情,你可能會找到一種方法,但我永遠不知道,因爲我永遠不會這樣做...... ;-)

+1

我只是測試,看它是否會在同一個盒子所有的工作 - 生產拓撲最好的描述蔓延。無論如何,你釘了它 - 我必須爲machineName $添加權限。謝謝! – 2009-08-13 03:22:47

+1

只是想補充一點,我通過創建在IIS 6.0 Web站點 - >屬性 - >目錄安全 - >編輯(身份驗證...)中找到的IUSER用戶名的權限來解決此問題,這是IUSR_MACHINENAME – shawad 2015-02-24 18:27:23

+0

您是如何爲MachineName $ in VS – 2016-02-03 20:29:39

1

我會建議創建一個單獨的(最好是域名)帳戶並在連接字符串中指定它(通常在web.config中) 然後,您可以限制Web服務器上該帳戶可以和不可以執行的操作的權限。 然後您可以授予此帳戶在SQL Server中所需的權限。

-1

簡單的解決辦法是檢查你的web.config文件,並確保其中之一是數據庫連接字符串的一部分:

信任連接=假

OR

集成安全性=真

1

我曾遇到同樣的問題,並通過更改應用程序池來解決此問題。

-2

當您在上一個數據庫上還原新數據庫時,會顯示此問題。

要解決此問題,您必須先轉到sqlserver,然後再安全,然後重新設置您的應用程序池。

1

萬一它可以幫助某人,在web.config中,我添加了< identity impersonate =「false」/>,這個錯誤消失了(在<系統下。網絡>)

0

而是在連接字符串中使用Integrated Security=True;的,只是使用的用戶名和密碼認證user=sa; pwd=mypassword;

+0

不!如果使用機器帳戶授權等不同用例,則不建議使用用戶名和密碼。 – 2017-11-15 09:42:25