代码之家  ›  专栏  ›  技术社区  ›  LiamGu

“用户'nt authority\anonymous logon'登录失败。登录到SQL Server 2005”

  •  1
  • LiamGu  · 技术社区  · 16 年前

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

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

    [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

    我使用的连接字符串是: Driver=SQL Server; Server=SERVERNAME; Initial Catalog=DBNAME; 我看不出它使用匿名登录的任何原因,因为当它在32位win2k3服务器上运行时,它使用域名\servername$访问了SQL服务器。

    我有以下设置。

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

    我还将服务器添加为SQL Server上的用户。

    我已经尝试了一些事情,现在我的想法已经没有了。

    5 回复  |  直到 16 年前
        1
  •  1
  •   Johan Buret    16 年前

    有一些解决办法。

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

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

    这个 NT AUTHORITY\ANONYMOUS LOGON 顺便说一下,这很奇怪,就像数据库服务器和应用服务器不在同一个域中一样。请检查此项,直到继续。

    1)在Active Directory中创建用户
    2)在iis7上创建一个应用程序池,作为“标识”,您创建的用户
    3)授予此用户在数据库上所需的权限和角色

        2
  •  1
  •   LiamGu    16 年前

    我想我已经修好了。移动到win2k8意味着我需要将连接字符串驱动程序更改为sql native client;。

        3
  •  1
  •   Kevin M    10 年前

    将匿名身份验证凭据设置为应用程序池标识。
    (默认值为特定用户-->IIS用户)。然后您可以在连接字符串中使用可信连接,因为它现在将使用AppPoolIdentity帐户。

        4
  •  0
  •   Damien_The_Unbeliever    16 年前

    好吧,失败的登录尝试是在“本地服务”帐户下运行的代码的一个典型例子,而不是(在win2k3上的代码),它在“网络服务”帐户下运行。现在你只需要找到那个设置的位置。

        5
  •  0
  •   vapcguy    11 年前

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

    1)使用Johan建议的专用服务帐户,或

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

    如果您在2之后仍然获得相同的结果,那么您可能会遇到Damien引用的“双跳”问题-这是Web服务器可以对您进行身份验证的地方,但出于安全原因,它不允许您在不使用Kerberos的情况下将这些凭据传递到数据库。然后,您需要在AD中将服务器设置为“可信任的委派”,并在IIS中将Kerberos设置为身份验证提供程序。此网站有助于: http://technet.microsoft.com/en-us/library/ee675779.aspx

    推荐文章