c# - 客户端通过 Internet 访问 SQL Server

标签 c# sql-server wcf web-services data-structures

有没有人对将客户端连接到 SQL Server 以获取数据的最佳方式有任何意见?

假设我在不在内部网络上的 Winform 中有一个 C# DataGridView,我需要用大量数据加载它。

目前,为了访问数据,我们在客户端中调用了一个组件 SQLDataAdapter,它打开到 SQL 服务器的连接,加载数据集,然后关闭数据库连接。这是使用 SQL Server 身份验证,并且有许多应用程序正在 Internet 上同时以相同的方式连接。

所以我想提高安全性而不降低性能。我应该研究哪些选项或其他选项?

- 以相同方式连接,但在用户使用应用程序期间保持连接打开。

-创建 Web 服务服务器并将数据集或集合传递给客户端。

-创建 WCF 服务器并连接到数据库。 (LINQ、识别框架、ADO.NET...?)

-创建 Web 服务和 WCF 服务器,客户端连接到 WCF,WCF 从连接到 SQL Server 的 WSE 服务器获取数据,并将集合或数据集传回客户端

出于某些原因,我个人最喜欢最后一个选项。 1. 将我们已经构建的组件放入 Web 服务中会很容易。 2. 它将允许我们停止让我们的 ASP.NET 网站直接访问数据库,而是通过 Web 服务服务器连接(ASMX 到 ASMX = 好吗?)。 3. 我们可以更好地控制哪些数据被访问并提供给我们的网络外部。我们不再需要在我们的应用程序中保留连接字符串。

有人对这些选项或这些选项的组合有经验吗?我有点担心,因为我听说过这样的服务器是漏斗点的恐怖故事,而直接连接到 SQL Server 没有问题。

谢谢

杰森·斯通

-

最佳答案

在我看来,您需要一个非常有说服力的理由来允许从您的网络外部直接连接到您的数据库。如果操作不当,允许远程 Sql 连接可能会带来很大的安全风险。业界通过 Sql Slammer 病毒等艰难地了解到这一点......

Winforms/Wpf 客户端应用程序 -> WCF -> 数据库在现实世界中运行良好。此外,将数据访问隐藏在远程应用程序的服务后面,允许您更改数据库和相关对象,而无需更改任何客户端,只要来回传递的数据形状保持不变即可。

另一方面,任何必须从一个逻辑实例(例如 Web 应用程序/网站)为大量并发用户提供服务的应用程序都应直接连接到数据库。

在任何一种情况下,除非我们谈论的是一个巨大的不同企业系统,否则我真的看不到使用另一组 Web 服务来从 WCF 和 Web 应用程序中隐藏数据库的值(value)。

关于c# - 客户端通过 Internet 访问 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1582744/

相关文章:

c# - 将 xaml 代码移至 View 模型类

sql - 如何在 SQL Server 中为每个用户创建所有考勤记录

SQL 在分隔符上拆分字符串并设置为新列

sql - 按以下方式创建 SQL Server 存储过程有哪些缺点?

wcf - MVVM 中使用服务的目的

c# - 如何阻止为每个请求重新创建 WCF 服务?

c# - 使用 iTextSharp 将多个页面添加到 pdf 表单

c# - 在第一次加载之前通过授权服务器保护 SPA

c# - 如何使用 IAsyncResult 从 WCF 异步中的回调中抛出异常

c# - 在 Visual Studio 的选项菜单上按确定/取消