2009-08-13 130 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