日期:2010-06-25  浏览次数:20393 次

  症状

  在创建从 ASP.NET 到 SQL Server 的受信任连接时,可能会出现以下错误信息:

  Login failed for user 'MachineName\ASPNET

  For computers that run Internet Information Services (IIS) 6.0, you may receive the following error message:

  Login failed for user 'MachineName\NetWorkService

  注意:特别是在使用集成安全性(在连接字符串中包括 integrated security=sspi 属性)时,会出现上述错误信息中的某一个。

  原因

  当您使用 ASP.NET 时,对于 Aspnet_wp.exe (或者对于 在 IIS 6.0 上运行的应用程序而言,为 W3wp.exe)和发往 SQL Server 的请求,默认的安全上下文都是 aspnet_wp 帐户(或者对于在 IIS 6.0 上运行的应用程序而言,为 NetworkService 帐户)。默认情况下,aspnet_wp 帐户(或者对于在 IIS 6.0 上运行的应用程序而言,为 NetworkService 帐户)在 SQL Server 中没有任何权限,因此它不能访问数据库。

  解决方案

  要解决此问题,请使用下列方法之一。

   • 以编程方式将 ASP.NET 辅助进程的安全上下文更改为具有正确的 SQL Server 权限的用户。

  - 或者 -

  • 更改 ASP.NET 的默认配置,以便 ASP.NET 辅助进程在满足以下条件的用户的上下文中启动和运行:该用户在 SQL Server 中具有正确的权限。

  - 或者 -

  • 授予 SQL Server 上的正确权限,以便 aspnet_wp 帐户(或者对于在 IIS 6.0 上运行的应用程序而言,为 NetworkService 帐户)具有访问所需资源的适当权限。

  状态

  出现这种现象的原因是缘于设计如此。

  再现此问题的步骤

  1. 在任何同时运行 ASP.NET 和 SQL Server 的计算机上,创建一个新的 Microsoft Visual Basic .NET Web 应用程序。

  2. 将以下代码添加到随该项目一起创建的 Webform1.aspx 页的 Page_OnLoad 事件中:Dim con As New System.Data.SqlClient.SqlConnection("data source=localhost;integrated security=sspi;database=northwind")

  con.open()

  con.close()

  3. 生成该项目,然后在浏览器中打开 Webform1.aspx 页。您将看到本文“症状”部分描述的错误信息。