症状
在创建从 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 页。您将看到本文“症状”部分描述的错误信息。