【问题标题】:Web services increase security and decrease performance?Web 服务提高了安全性并降低了性能?
【发布时间】:2010-11-15 00:47:16
【问题描述】:

我的 WinFroms 应用程序使用 tableadapter 和 datareaders 从 SQL 服务器获取数据。

出于安全原因,我正在考虑用 Web 服务替换数据读取器。 我想其中一个缺点是执行速度。

这是真的吗?或者……

【问题讨论】:

    标签: performance web-services


    【解决方案1】:

    是的,您将获得更好的安全性 - 添加层总是有帮助的,特别是如果您随后采取措施保护每一层。例如,如果您只允许访问 Web 服务并且只允许从您的 Web 服务器访问 sql server,那么您就减少了黑客可以用来访问您的 sql server 的目标区域。

    当然,现在您处于他们需要破解您的网络服务器才能访问 sql 服务器的位置。如果您通过将 Web 服务代码放入服务中并只允许它访问您的 sql 服务器来进一步减少该区域,那么您会做得更好 - Web 服务代码仅充当中间层服务的包装器;现在他们需要破解 Web 服务器,该服务器只会让他们访问该服务,并且该服务器将包含您的专有接口,这些接口应该更难以破解(假设黑客正在使用已知的安全漏洞攻击您的 Web 和 sql 服务器,例如0 天攻击)。

    我知道有几个地方对安全性(主要是财务)存在偏执,这里的 Web 服务器被认为存在安全风险,因此在其中运行的很少 - 它作为表示层的一部分仅用于将数据传递到安全的服务,进而管理与数据层的安全连接。

    有关介绍,请参阅 Roger Session 的 article on Software Fortresses

    至于速度.. 好吧,现在的服务器是如此之快,你可以获取一个对象,将其转换为 SOAP,通过 HTTP 发布它,解析它,将它解包回一个对象并调用你想要的方法,而无需太很明显的延迟。当然它更慢,但如果你可以扩展它以使其足够快,那么现在谁在乎呢?

    【讨论】:

    • 而且,如果他不使用 SOAP,它会更快。
    【解决方案2】:

    使用netTcpBindingnetNamedPipesBinding,性能不会有太大差异。这些绑定分别使用 TCP/IP 或命名管道上的二进制编码。

    是的,您将获得更好的安全性,因为您不会直接从每个客户端连接到 SQL Server。

    您甚至可能有一些机会来提高性能。如果您碰巧对数据库进行了多次小型调用,那么将它们整合到更大的 WCF 调用中实际上可以提高性能。

    【讨论】:

    • 我想在我的应用程序和 SQL 服务器之间建立一个“中间体”。该应用程序可以与 Web 服务“对话”,而不是直接与 Sql 服务器对话。我想这样会更好。
    • 我看不出这会如何提高安全性。
    • Sql 的连接字符串在客户端。我虽然通过使用网络服务,我会避免这样的事情。我们这里有一个新手...
    • 没问题。只是你之前没这么说。这更有意义。是的,您可以提高连接字符串的安全性,方法是不在客户端,而是在 Web 服务中。
    【解决方案3】:

    当然,您现在的应用程序的安全性取决于您连接到 MS SQL DB 的方式。当您的客户使用该应用程序时,您是否对其进行身份验证?我已经看到很多用户登录实际上是 SQL 登录的实例,这提供了安全性,并且可以非常自然地基于这些登录在数据库中进行数据分段。

    如果您只有一个登录名(我希望不是 SA),那么为您的应用程序的所有用户连接,那么拥有一个单独的数据访问层听起来是一个明智的设计选择。您显然正在考虑这一层的 Web 服务,但您也可以考虑其他选项。也许这些 SO 问题可能会有所帮助;

    Best design practices for .NET architecture with LINQ to SQL (DAL necessary? Can we truly use POCOs? Design pattern to adopt?)

    Business Object DAL design

    【讨论】:

      【解决方案4】:

      Web 服务在执行速度方面肯定有更高的开销——纯粹是因为在典型的 SOAP 实现中,您带回的数据将被包装在 XML 中。因此,您将提取更多原始信息,然后要求您的应用将其解析为正确的类型。

      我不确定您打算如何使用 Web 服务来改善您的安全状况。请记住,这些服务需要在某个地方存在,并且您的客户端应用程序需要能够访问该位置。

      【讨论】:

      • 他不需要使用 SOAP。 WCF 支持 TCP/IP 或命名管道上的二进制文件。
      • 非常适合在大环境中保护投资。只有真正的 Web 服务或 JMS 才能提供互通性。不要使用专有的二进制连接。
      • 他的客户是 Windows 窗体应用程序。互操作性似乎不是问题。如果它成为一个问题,添加一个 SOAP 端点是微不足道的。
      • @Martin K:你怎么能在同一句话中说“互操作性”和“JMS”? “J”代表 Java,不是吗?
      猜你喜欢
      • 2015-08-21
      • 2013-04-18
      • 1970-01-01
      • 2011-02-15
      • 2011-03-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多