Windows窗体应用程序的VPN上的Windows身份验证



我为客户端创建了一个WinForms应用程序,该应用程序使用集成安全性连接到SQL Server。客户抱怨他们收到了错误——";无法生成SSPI上下文"事实证明,他们试图通过不属于该域的计算机上的VPN连接到WinForms应用程序。如果我将连接字符串更改为使用SQL用户,程序会工作,但我会丢失从Windows标识中获得的信息。我的问题是,我是否能够使此设置正常工作,或者我是否需要找到其他方法使程序在VPN上工作。谢谢

Wade

正如您所说,计算机不属于AD域。如果您的计算机不是域的一部分,本地用户帐户是您唯一可以用来登录的帐户。(登录到本地系统(。并且您不能被授权使用具有这些本地凭据的域的资源。当您的计算机是域的一部分时,您可以使用域帐户登录,也可以使用本地用户帐户登录。因此,问题不太可能是VPN:通常VPN的配置方式可以使客户端成为远程子网络的一部分。"由于两个网络之间的OpenVPN隧道连接,坐在附属办公室电脑旁的用户可以像在那里一样访问总部的服务器"假设网络配置如上所述-当您的计算机将被添加到AD域时,您将能够使用集成的SQL Server身份验证方法进行身份验证。否则,只有SQL Server身份验证可用。如果客户端机器是另一个域的一部分;信任关系";两个域之间可以由管理员进行配置。这个问题在这里讨论:从非域机器连接到域SQLServer2005

如果客户端属于一个AD域,并且SQL Server实例使用来自另一个域的帐户运行,那么(我相信(最安全的解决方案是在域之间建立信任关系-可以像这里所讨论的那样授予来自另一域的用户访问权限;使用Windows身份验证的跨域SQL Server登录";

将客户端机器添加到域或建立信任关系是一个简单的解决方案。但有时解决罚单需要大型(跨国(公司过多的批准。如果客户端计算机的用户使用来自其他域的帐户(或使用本地帐户(登录到他的计算机,则您仍然可以使用模拟解决方案-客户端进程应使用SQL Server域的帐户验证/连接到SQL Server。查找详细信息:如何在.NET中进行模拟?

例如,假设SQL Server服务使用域S中的帐户登录,并且仅向域S中用户授予权限。但由于某些原因,客户端无法使用域S的帐户登录到本地操作系统,也无法使用域C的帐户登录操作系统(可能客户端主要使用域C中的资源(。然后WinForms进程具有来自域C的用户帐户的安全上下文。此进程应模拟自身并将安全上下文切换到来自域s的用户,然后使用集成身份验证连接到SQL Server。

最新更新