Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 &引用;用户登录失败';NT授权\匿名登录'&引用;到SQL Server 2005_Sql Server 2005_Iis 7_Asp Classic_Windows Server 2008 - Fatal编程技术网

Sql server 2005 &引用;用户登录失败';NT授权\匿名登录'&引用;到SQL Server 2005

Sql server 2005 &引用;用户登录失败';NT授权\匿名登录'&引用;到SQL Server 2005,sql-server-2005,iis-7,asp-classic,windows-server-2008,Sql Server 2005,Iis 7,Asp Classic,Windows Server 2008,我正在尝试将旧版应用程序迁移到Windows Server 2008 x64和IIS7。它是用经典ASP编写的,并连接到SQLServer2005数据库 但是,当页面运行时,我收到错误: [Microsoft][ODBC SQL Server驱动程序][SQL Server]用户“NT授权\匿名登录”登录失败。 我使用的连接字符串是:Driver=sqlserver;Server=SERVERNAME;初始目录=DBNAME 我看不出它使用匿名登录的任何原因,因为当它在我的32位Win2k3服务

我正在尝试将旧版应用程序迁移到Windows Server 2008 x64和IIS7。它是用经典ASP编写的,并连接到SQLServer2005数据库

但是,当页面运行时,我收到错误:

[Microsoft][ODBC SQL Server驱动程序][SQL Server]用户“NT授权\匿名登录”登录失败。

我使用的连接字符串是:
Driver=sqlserver;Server=SERVERNAME;初始目录=DBNAME
我看不出它使用匿名登录的任何原因,因为当它在我的32位Win2k3服务器上运行时,它使用DOMAINNAME\SERVERNAME$访问SQL server

我有以下设置

SQL Server 2005-以混合模式运行。 IIS7应用程序池-允许将32位应用程序设置为True

我还将服务器作为用户添加到SQL server上


我现在已经尝试了一些方法,但我的想法开始枯竭。

有一些解决方案

使用SQL身份验证,而不是SSPI。它将工作,因为您的数据库处于混合模式

如果出于任何原因,您不会更改身份验证

顺便说一句,
NT AUTHORITY\ANONYMOUS LOGON
很奇怪,就好像数据库服务器和应用服务器不在同一个域上一样。请检查此项,直到进一步批准

1) 在Active Directory中创建用户
2) 在IIS7上创建一个应用程序池,并将您创建的用户命名为“Identity”

3) 授予此用户在DB上所需的权限和角色好吧,失败的登录尝试是在“本地服务”帐户下运行的代码的典型示例,而不是在“网络服务”帐户下运行的代码(在Win2K3上的代码)。现在您只需要找到该设置的位置。

我想我已经修复了它。移动到Win2k8意味着我需要将连接字符串驱动程序更改为SQL Native Client

对于OP或未来的读者,您可以:

1) 按照上面Johan的建议,使用专用服务帐户,或者

2) 使用AppPoolIdentity帐户并转到“身份验证”,然后选择“Windows身份验证”并启用“ASP.NET模拟”


如果在#2之后仍然得到相同的结果,则可能存在Damien引用的“双跳”问题-这是web服务器可以对您进行身份验证的地方,但出于安全原因,它不允许您在不使用Kerberos的情况下将这些凭据传递到数据库。然后,您需要在AD中将服务器设置为“委托受信任”,并在IIS中将Kerberos设置为身份验证提供程序。此网站提供帮助:

将匿名身份验证凭据设置为您的应用程序池标识。

(默认值为特定用户-->IIS用户)。然后,您可以在连接字符串中使用受信任的连接,因为它现在将使用AppPoolIdentity帐户。

当a)调用代码在本地服务下运行,或b)尝试模拟时遇到双跳问题时,我始终看到NT AUTHORITY\ANONYMOUS登录。请解释“使用AppPoolIdentity帐户”“AppPoolIdentity”作为身份帐户内置于任何IIS 7应用程序池中。它可以与“直通身份验证”结合使用“允许通过Windows身份验证自动模拟,只要服务器受信任可以进行委派。您也可以使用自定义AD域帐户,但必须使用
setspn
为其设置SPN。