背景
我们的现场员工使用Windows .NET应用程序,他们在全国各地旅行,大部分时间都住在酒店外。最近我们添加了一些直接连接到SQL Server 2005以进行数据访问的功能(即SqlConnection.Open())。从那时起,我们遇到了一些生成错误的问题,表明无法访问服务器。
我们员工之间的这种错误的间歇性使我们相信这可能是由于端口阻塞问题,并且一些酒店可能阻止了SQL Server使用的端口1433。当我们开始研究这个问题时,我们发现了许多评论,表示公开端口1433是一个主要的安全漏洞,它应该仅限于内部/本地使用。
问题
所以我的问题是这样 - Windows应用程序有哪些替代方案可以从SQL Server数据库请求和接收数据,从而提高安全性并绕过公共网络(例如酒店WiFi)的常见阻塞?
我知道有一个选项是VPN,但据我所知,在公共网络上阻止VPN连接并不罕见。
答案 0 :(得分:2)
是的,使用允许遍历每个NAT /防火墙的协议:HTTP。换句话说,不是使用SqlConnection连接,而是添加中间层Web服务层。如果您认为这很复杂,请参阅Creating an OData API for StackOverflow including XML and JSON in 30 minutes。
将SQL Server TDS端口直接打开到网络,即使在移动到非默认端口之后,也是一个主要的安全问题,无论您如何扭曲或转动它。
答案 1 :(得分:1)
您最好的选择可能是使用将在内部调用SQL的WebService。然后,您可以将您的Web服务发布到您需要的任何端口,Windows应用程序(虽然我可能将其更改为Web应用程序,我自己)可以在您定义的任何端口上调用Web服务。
答案 2 :(得分:1)
我会使用带有SSL加密的WebService或WCF服务。
你也应该考虑许可费用......
如果您的用户访问sql server,则每个用户都有一个许可证。只有每个插槽许可才有所不同。
答案 3 :(得分:0)
实际上只有两个选择:
将SQL Server移动到其他端口。这仍然是最不安全的,但会让你通过大多数防火墙。希望你不是真的在那条线上发送实际的sql ...无论如何加密它。
更改应用以通过网络服务进行通信。这需要一点时间,但您有能力最终获得更安全的系统。加密仍然是必须的;并且在任何情况下都不使用它来通过网络发送sql语句。