0

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

我知道,当我编码时将我的窗口登录作为凭据,而在 IIS 中它正在使用 AppPool Identity。如何将我的 Windows 登录凭据传递给连接字符串?

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$'.
4

2 回答 2

1

根据错误,您的 SQL 可能与 IIS 不在同一个框...这里有不同的可能选项,具体取决于配置:

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

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

于 2013-02-18T16:25:48.593 回答