我有一个 Windows 2008 R2 域/林功能级别环境,其中有一个 OpenVPN 访问服务器 (v1.8.4.400),该服务器集成了 Active Directory 并运行顺畅。我一直在与我们的 DBA 合作以简化权限流程,我们决定通过 AD 用户帐户和/或 AD 组来实现对各种 MS SQL 数据库的访问。
我们创建了一个测试用户:[电子邮件保护]并通过 SQL Management Studio 使用 DOMAIN\dbtest 将帐户分配给适当的角色。
然后我们连接到 OpenVPN 框,验证成功,但是当我们尝试连接到 SQL db 时收到以下错误:
已更新(直接来自错误日志)
12/13/2013 08:00:02,Logon,Unknown,Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. [CLIENT: 10.0.160.201]
12/13/2013 08:00:02,Logon,Unknown,Error: 18452<c/> Severity: 14<c/> State: 1.
12/13/2013 08:00:02,Logon,Unknown,SSPI handshake failed with error code 0x8009030c<c/> state 14 while establishing a connection with integrated security; the connection has been cclosed. Reason: AcceptSecurityContext failed. The Windows error code indicates the cause of failure. The logon attempt failed [CLIENT: 10.0.160.201]
12/13/2013 08:00:02,Logon,Unknown,Error: 17806<c/> Severity: 20<c/> State: 14.
在知道通过 VPN 连接的远程计算机未加入域的情况下,是否有办法实现此操作?它们连接的帐户是域帐户。
提前致谢!
答案1
几年来,我们已成功使用 OpenVPN-AS 服务器和使用 AD 身份验证的 SQL Server。我怀疑这可能与 OpenVPN 连接另一端的客户端系统有更多关系——该计算机是否加入了 VPN 服务器所在的同一域?如果不是,它是否加入了不同的域,两者之间是否存在信任关系?如果它未加入任何域,则在连接到 SSMS 或您尝试连接的任何客户端或程序时,您仍需要添加域信息,即使您在客户端上创建了相同的用户名,因为它将尝试默认传递 COMPUTERNAME\dbtest 而不是 DOMAIN\dbtest。
更新关于:评论
OpenVPN-AS 服务器不应该修改域信息的传递方式——我建议在任一端快速捕获 Wireshark,然后使用 SQL 身份验证尝试检查流。如果应用程序使用 SSL,这可能会更困难,但您仍然可以看到正在传递的用户详细信息。此外,如果您有应用程序的源代码,请检查它是否设置为Integrated Security=SSPI
在连接字符串中使用而不是用户 ID 和密码。根据 SQL Server 版本的不同,还有一个Trusted_Connection=True
可以在连接字符串中使用的命令。 本网站是构建它们的重要资源。
最后,如果应用程序通过 ODBC 而不是本机 .NET 连接器连接,则可以通过Data Sources (ODBC)
控制面板 > 管理工具区域中的图标创建跟踪日志。
更新 2
您可能需要将 SQL Server 设置为混合身份验证模式。但我仍会尽快运行 Wireshark 捕获,以更仔细地查看传递的内容。