在IIS中部署后SQL Server连接失败?

时间:2013-02-18 16:19:03

标签: c# asp.net vb.net sql-server-2008

下面的代码在编码时工作正常。我在IIS中发布代码,然后连接失败。

我知道,当我编码时,我的窗口登录为凭据,而在IIS中,它正在使用AppPool Identity。如何将我的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$'.

2 个答案:

答案 0 :(得分:1)

基于错误,您的SQL可能与IIS不在同一个框中......以下是不同的可能选项,具体取决于配置:

  • 如果您没有在同一个框中使用SQL身份验证和SQL: 您应该能够使用HttpContext.CurrentUserimpersonating with those credentials获取用户凭据,但这在很大程度上取决于您的系统设置。可能你已经模仿了(ASP.Net中的默认配置),但是如果你的服务器与IIS不同,那么普通用户的凭证将无法浮动到其他框(搜索术语“NTLM一跳”)。
  • 您的数据库位于不同的服务器上,并且您已在组织中使用Kerberos身份验证:我认为您have to be authenticating with Kerberos冒充其他服务器。请注意,如果未配置/允许此类身份验证,则不太可能仅针对您的情况启用此功能。
  • 使用Windows身份验证的另一台服务器上的数据库 - 您可以在特定用户帐户下运行所有​​SQL查询(或者使用RevertToSelf并使用整个interop在运行的帐户下运行)。
  • 数据库随处可见,您可以使用SQL身份验证 - 只要在您的组织中可以使用,这是最简单的方法。如果使用此方法,请考虑在配置文件中加密连接字符串。

答案 1 :(得分:0)

我要添加到@ smoore的帖子,很多依赖于连接字符串和允许传入连接的sql server的配置。它可能被设置为仅允许sql用户,而不是看起来像问题描述的windows用户。您能否提供连接字符串的详细信息(在粘贴之前匿名/删除用户/密码!)以及sql server实例允许的身份验证模式?