【发布时间】:2010-11-15 00:47:16
【问题描述】:
我的 WinFroms 应用程序使用 tableadapter 和 datareaders 从 SQL 服务器获取数据。
出于安全原因,我正在考虑用 Web 服务替换数据读取器。 我想其中一个缺点是执行速度。
这是真的吗?或者……
【问题讨论】:
我的 WinFroms 应用程序使用 tableadapter 和 datareaders 从 SQL 服务器获取数据。
出于安全原因,我正在考虑用 Web 服务替换数据读取器。 我想其中一个缺点是执行速度。
这是真的吗?或者……
【问题讨论】:
是的,您将获得更好的安全性 - 添加层总是有帮助的,特别是如果您随后采取措施保护每一层。例如,如果您只允许访问 Web 服务并且只允许从您的 Web 服务器访问 sql server,那么您就减少了黑客可以用来访问您的 sql server 的目标区域。
当然,现在您处于他们需要破解您的网络服务器才能访问 sql 服务器的位置。如果您通过将 Web 服务代码放入服务中并只允许它访问您的 sql 服务器来进一步减少该区域,那么您会做得更好 - Web 服务代码仅充当中间层服务的包装器;现在他们需要破解 Web 服务器,该服务器只会让他们访问该服务,并且该服务器将包含您的专有接口,这些接口应该更难以破解(假设黑客正在使用已知的安全漏洞攻击您的 Web 和 sql 服务器,例如0 天攻击)。
我知道有几个地方对安全性(主要是财务)存在偏执,这里的 Web 服务器被认为存在安全风险,因此在其中运行的很少 - 它作为表示层的一部分仅用于将数据传递到安全的服务,进而管理与数据层的安全连接。
有关介绍,请参阅 Roger Session 的 article on Software Fortresses。
至于速度.. 好吧,现在的服务器是如此之快,你可以获取一个对象,将其转换为 SOAP,通过 HTTP 发布它,解析它,将它解包回一个对象并调用你想要的方法,而无需太很明显的延迟。当然它更慢,但如果你可以扩展它以使其足够快,那么现在谁在乎呢?
【讨论】:
使用netTcpBinding 或netNamedPipesBinding,性能不会有太大差异。这些绑定分别使用 TCP/IP 或命名管道上的二进制编码。
是的,您将获得更好的安全性,因为您不会直接从每个客户端连接到 SQL Server。
您甚至可能有一些机会来提高性能。如果您碰巧对数据库进行了多次小型调用,那么将它们整合到更大的 WCF 调用中实际上可以提高性能。
【讨论】:
当然,您现在的应用程序的安全性取决于您连接到 MS SQL DB 的方式。当您的客户使用该应用程序时,您是否对其进行身份验证?我已经看到很多用户登录实际上是 SQL 登录的实例,这提供了安全性,并且可以非常自然地基于这些登录在数据库中进行数据分段。
如果您只有一个登录名(我希望不是 SA),那么为您的应用程序的所有用户连接,那么拥有一个单独的数据访问层听起来是一个明智的设计选择。您显然正在考虑这一层的 Web 服务,但您也可以考虑其他选项。也许这些 SO 问题可能会有所帮助;
【讨论】:
Web 服务在执行速度方面肯定有更高的开销——纯粹是因为在典型的 SOAP 实现中,您带回的数据将被包装在 XML 中。因此,您将提取更多原始信息,然后要求您的应用将其解析为正确的类型。
我不确定您打算如何使用 Web 服务来改善您的安全状况。请记住,这些服务需要在某个地方存在,并且您的客户端应用程序需要能够访问该位置。
【讨论】: