Windows Windows 表单应用程序通过 VPN 进行身份验证
Windows Authentication over VPN for Windows Form Application
我为客户端创建了一个 WinForms 应用程序,它使用集成安全性连接到 SQL 服务器。客户抱怨说他们遇到了错误——“无法生成 SSPI 上下文”。事实证明,他们试图通过不属于域的计算机上的 VPN 连接到 WinForms 应用程序。如果我更改连接字符串以使用 SQL 用户,该程序可以运行,但我会丢失可以从 Windows 身份获得的信息。我的问题是,我能否使此设置正常工作,或者我是否需要找到其他方法使程序通过 VPN 运行。谢谢
韦德
如您所说,计算机不属于 AD 域。
If your computer is not part of a domain, local user accounts are the only accounts you can use to log on.(登录到本地系统)。并且您无权使用这些本地凭据使用域的资源。当您的计算机是域的一部分时,您可以使用域帐户或本地用户帐户登录。所以问题不太可能是 VPN:通常 VPN 可以配置为使客户端成为远程子网的一部分。
"user sitting at a computer in the subsidiary office can access the servers at the headquarters as if he were there, thanks to an OpenVPN tunnel connection between the two networks."
假设网络配置如前所述 - 当您的计算机将被添加到 AD 域时,您将能够使用集成的 SQL 服务器身份验证方法进行身份验证。否则只有 SQL 服务器身份验证可用。如果客户端机器是另一个域的一部分,则两个域之间的“信任关系”可以由管理员配置。
这个问题在这里讨论:Connect to domain SQL Server 2005 from non-domain machine
如果客户端属于一个 AD 域并且 SQL 服务器实例使用来自另一个域的帐户运行,那么(我相信)最安全的解决方案是在域之间建立信任关系 - 可以对用户进行大访问来自此处讨论的另一个域 "Cross Domain SQL Server Logins Using Windows Authentication"
将客户端计算机添加到域或建立信任关系是直接的解决方案。但有时解决问题需要大型(跨国)公司的太多批准。如果客户端计算机的用户使用其他域的帐户(或使用本地帐户)登录到他的计算机,那么您仍然可以使用 impersonation 解决解决方案 - 客户端进程应该 authenticate/connect SQL 服务器使用来自 SQL 服务器域的帐户。查找详情:How do you do Impersonation in .NET?
例如,假设 SQL 服务器服务使用域 S 的帐户登录并且授予权限 仅 域 S 的用户。但是客户端无法登录到本地OS 由于某些原因使用域 S 的帐户并使用域 C 的帐户登录 OS(可能客户端主要使用域 C 的资源)。然后 WinForms 进程具有来自域 C 的用户帐户的安全上下文。此进程应模拟自身并将安全上下文切换到来自域 S 的用户,然后使用集成身份验证连接到 SQL 服务器。
我为客户端创建了一个 WinForms 应用程序,它使用集成安全性连接到 SQL 服务器。客户抱怨说他们遇到了错误——“无法生成 SSPI 上下文”。事实证明,他们试图通过不属于域的计算机上的 VPN 连接到 WinForms 应用程序。如果我更改连接字符串以使用 SQL 用户,该程序可以运行,但我会丢失可以从 Windows 身份获得的信息。我的问题是,我能否使此设置正常工作,或者我是否需要找到其他方法使程序通过 VPN 运行。谢谢
韦德
如您所说,计算机不属于 AD 域。 If your computer is not part of a domain, local user accounts are the only accounts you can use to log on.(登录到本地系统)。并且您无权使用这些本地凭据使用域的资源。当您的计算机是域的一部分时,您可以使用域帐户或本地用户帐户登录。所以问题不太可能是 VPN:通常 VPN 可以配置为使客户端成为远程子网的一部分。 "user sitting at a computer in the subsidiary office can access the servers at the headquarters as if he were there, thanks to an OpenVPN tunnel connection between the two networks." 假设网络配置如前所述 - 当您的计算机将被添加到 AD 域时,您将能够使用集成的 SQL 服务器身份验证方法进行身份验证。否则只有 SQL 服务器身份验证可用。如果客户端机器是另一个域的一部分,则两个域之间的“信任关系”可以由管理员配置。 这个问题在这里讨论:Connect to domain SQL Server 2005 from non-domain machine
如果客户端属于一个 AD 域并且 SQL 服务器实例使用来自另一个域的帐户运行,那么(我相信)最安全的解决方案是在域之间建立信任关系 - 可以对用户进行大访问来自此处讨论的另一个域 "Cross Domain SQL Server Logins Using Windows Authentication"
将客户端计算机添加到域或建立信任关系是直接的解决方案。但有时解决问题需要大型(跨国)公司的太多批准。如果客户端计算机的用户使用其他域的帐户(或使用本地帐户)登录到他的计算机,那么您仍然可以使用 impersonation 解决解决方案 - 客户端进程应该 authenticate/connect SQL 服务器使用来自 SQL 服务器域的帐户。查找详情:How do you do Impersonation in .NET?
例如,假设 SQL 服务器服务使用域 S 的帐户登录并且授予权限 仅 域 S 的用户。但是客户端无法登录到本地OS 由于某些原因使用域 S 的帐户并使用域 C 的帐户登录 OS(可能客户端主要使用域 C 的资源)。然后 WinForms 进程具有来自域 C 的用户帐户的安全上下文。此进程应模拟自身并将安全上下文切换到来自域 S 的用户,然后使用集成身份验证连接到 SQL 服务器。