1

我知道有很多加密 SQLConnection 字符串的方法,因此您可以在 VB.NET 程序中使用它来连接到 SQL 数据库,而无需反汇编/反编译 .exe 本身的人轻松读取您的连接字符串.

我知道这篇文章:加密 SQL 连接字符串 c#

讨论两种主要方式:配置安全部分和企业库数据访问应用程序块

现在我已经调整了配置安全部分,我在 app.config 文件中加密了我的连接字符串,我的程序可以解密该文件以获取连接字符串。我知道这只能在加密它的同一台计算机上解密,这不是问题。

我的问题是这些方法如何有效?不是有人只需要在那台计算机上创建一个程序来使用相同的做法来解密吗?

即使我使用散列和 MD5 加密或类似的东西,解密方法仍然在我的程序中,可以从反编译器/反汇编器中提取。

我真正保护我的数据的唯一方法是购买某种类型的混淆器并将其用于我的加密/解密代码并希望获得最好的结果吗?或者有人知道最好的方法吗?


我所做的是创建了一个程序,该程序需要用户名和密码才能登录,然后能够根据同一数据库中存在的信息执行 SQL 查询。我不能使用网站,它必须通过 .NET 程序来完成。该计划已分发给我在美国的许多客户。这意味着我真的需要一些安全措施。

4

3 回答 3

2

真正安全的方法是根本不直接连接到 SQL...

在互联网上创建一个与数据库对话的 API/Webservice/Similar。然后,您的客户端可以对 API 进行身份验证并发出请求。

这为您提供了许多优势:

  • 客户端永远不知道连接字符串
  • 您可以保证修改您数据的代码在您的控制之下且未经修改
  • 您可以根据用户和角色提供更细粒度的权限
  • 只要您编写好代码,反编译/逆向工程就不会泄露任何敏感信息(使用内置的身份验证机制,不要自己滚动)
  • 如果您需要移动 SQL 服务器,则无需担心维护 DNS 条目/等,您只需更新 API 中的连接字符串

(刚刚注意到@Blam 在对 OP 的评论中提到了这一点)。

因此,要提供更多详细信息...

采用业务逻辑(或等效层)并通过 Web 服务公开方法。正如 Blam 建议的那样,WCF 是一个很好的起点。这使您可以强制执行业务逻辑并在代码中管理对数据库的所有更改。

查看此处此处以获取 WCF 入门帮助

于 2012-09-05T18:51:16.853 回答
1

服务已得到答复,但我会尝试添加一些新价值。

WCF 服务通常托管在 IIS 中,但您将客户端保留在 VB 中。

在今天的 VB 中,您可能使用用户输入来指定查询。在 SQL 上运行查询。然后使用结果构建数据或业务对象列表。

使用 WFC,您可以调用服务上的方法。MyService 背后的一切对用户 PC 都是隐藏的。

List<busObs> myBusObjs = MyService.GetBusObj(string userCriteria);

开发人员对 Windows Communication Foundation 4 的介绍

这将被称为 3 层应用程序。

另一个好处是维护。您可以在不更新 PC 的情况下更新 Web 服务层。

另一个好处是保护您的知识产权。就像我在一个应用程序上工作一样,其中我们有一些隐藏在 WCF 服务后面的专有算法。由于客户端只是一个 UI 层,因此有人可以对客户端进行逆向工程,但他们不会得到我们的任何好东西。

于 2012-09-05T19:22:16.303 回答
0

另一种解决方案是通过存储过程处理您的所有数据访问 - 使用 SQL 数据库的内置安全性和权限将应用程序的用户限制在他们可以在您的应用程序中执行的数据处理并保护您的基础数据。

实际上,存储过程代表了您的应用程序的数据 API - 尽管完整的 Web 服务/API 允许您在长期内更灵活地更改服务器等。

于 2012-09-05T18:56:19.697 回答