在IIS中部署后,SQL服务器连接失败

本文关键字:SQL 服务器 连接 失败 IIS 部署 | 更新日期: 2023-09-27 17:59:50

当我编码时,下面的代码运行良好。我在IIS中发布代码,然后连接失败。

我知道,当我进行编码时,是将我的窗口登录作为凭据,而在IIS中,它是将AppPool标识作为凭据。如何将我的windows登录凭据传递到connectionstring?

Public Shared Function DbCollection(connectionString As String) As DatabaseCollection
   Dim server As New Microsoft.SqlServer.Management.Smo.Server(connectionString)
   Return server.Databases
End Function

错误:

   Login failed for user 'Domain'Computername$'. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
    Exception Details: System.Data.SqlClient.SqlException: Login failed for user
 'Domain'Computername$'.

在IIS中部署后,SQL服务器连接失败

根据错误,您的SQL可能与IIS不在同一个框中。。。根据配置,这里有不同的可能选项:

  • 如果您没有在同一个框中使用SQL身份验证和SQL:您应该能够使用HttpContext.CurrentUser获取用户凭据,并使用这些凭据进行模拟,但这在很大程度上取决于您的系统设置。可能是您已经在模拟(ASP.Net中的默认配置),但如果您的服务器与IIS位于不同的框中,则常规用户的凭据将无法浮动到其他框中(搜索词"NTLM单跳")
  • 您的数据库在另一台服务器上,并且您已经在组织中使用Kerberos身份验证:我认为您必须使用Kerberos进行身份验证才能在另一个服务器上模拟。请注意,如果不配置/不允许这样的身份验证,则不太可能仅针对您的情况启用它
  • 使用Windows身份验证的另一台服务器上的数据库-您可以在特定的用户帐户下运行所有SQL查询(或在进程帐户下运行具有大量互操作的RevertToSelf)
  • 数据库在任何地方,您都可以使用SQL身份验证——只要在您的组织中是可以的,这是最简单的方法。如果使用此方法,请考虑加密配置文件中的连接字符串

我想在@smore的帖子中补充一点,这在很大程度上取决于连接字符串和sql server允许传入连接的配置。它可能被设置为只允许sql用户,而不允许windows用户,这在问题描述中看起来很像。您能否提供连接字符串的详细信息(粘贴前匿名/删除用户/密码!)以及sql server实例允许的身份验证模式?