2013-02-18 132 views
0

下面的代码在编码时工作正常。我在IIS中发布代码,然后连接失败。在IIS中部署后SQL服务器连接失败?

我知道,当我编码正给我窗口的登录凭据作为和IIS正在采取程序池身份。我怎样才能将我的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$'. 
+0

你为什么想要?这种认证应该使用特定于此目的的服务帐户进行。是否有你想要(或需要)使用你的Windows帐户的原因。我假设你并不是真正意思你的凭证,而是认证用户的凭证。 – 2013-02-18 16:25:31

+0

因为这个应用程序使用我的一个用户,它只会被部署在他的机器上。 – James123 2013-02-18 16:29:35

+0

这还不是做这件事的最好理由。我仍然建议使用这种访​​问的服务帐户。 – 2013-02-18 16:32:22

回答

0

我想添加到@ smoore的帖子,很多依赖于连接字符串,并允许外来连接的SQL服务器的配置。它可能被设置为只允许sql用户,而不是从问题描述中看起来像windows用户。你能否提供连接字符串的详细信息(在粘贴之前匿名化/删除用户/密码!)以及sql server实例允许哪种认证模式?

+0

连接字符串仅为'sql server name' – James123 2013-02-18 17:28:12

+0

因此它没有“Integrated Security = true”或“Username =; Password =;”标签? – DiskJunky 2013-02-18 18:06:33

+0

Microsoft.SqlServer.Management.Smo.Server($ strServer)将会把剩下的东西 – James123 2013-02-18 18:59:47

1

基于错误很可能你的SQL是不是在同一个盒子作为IIS ...以下是根据配置的不同可能的选项:

  • 如果您没有使用SQL身份验证,并且在同一台SQL: 你应该能够HttpContext.CurrentUserimpersonating with those credentials来获取用户的凭据,但它在很大程度上取决于您的系统设置。可能是您已经模拟(ASP.Net中的默认配置),但是如果您的服务器位于与IIS不同的方框,那么常规用户的凭据将无法浮动到其他方框(搜索术语“NTLM one hop”)。
  • 数据库不同的服务器上,并且你已经在你的组织中使用Kerberos身份验证:我想你have to be authenticating with Kerberos到另一台服务器上的模仿。请注意,如果此类身份验证未配置/允许,则不太可能仅针对您的情况开启。
  • 数据库使用Windows身份验证另一台服务器上 - 你可以运行在特定的用户帐户的所有SQL查询(或RevertToSelf时有一大堆互操作的下进程的帐户下运行)。只要它是在你的组织中确定最简单的方法 -
  • 数据库的任何地方,你可以使用SQL身份验证。如果使用此方法,请考虑在配置文件中加密连接字符串。
+0

+ 0:虽然冒充特定用户的总体思路是不错的,通常没有必要冒充“当前用户”为默认ASP.Net是“Windows验证+模拟”。使用Kerberos可能是不可能的(除非它已经设置),模拟一个特定的帐户(或使用RevertToSelf来处理凭据)可能更容易。对存储在Web.Config中的加密密码使用SQL身份验证可能是最简单的方法。 – 2013-02-18 16:59:52

+0

我并不是建议将身份验证切换到Kerberos是一种解决方案,我说如果他已经使用Kerberos,那么他可以做到这一点。我还给海报带来了疑问的好处,也许他确实需要使用用户的凭据,并且使用服务帐户是不可接受的。看到OP的评论后,我可能会有不同的答案,但是当时我回答了提出的问题。 – 2013-02-18 18:27:33

+1

+1 - 我误解了你关于Kerberos的陈述。看看我的编辑是否正常 - 试图清楚说明原始文章中有两种不同的情况(并可自由添加我的选项)。 – 2013-02-18 18:55:18