我知道有很多方法可以加密SQLConnection字符串,这样你就可以在VB.NET程序中使用它来连接到SQL数据库而不会让反汇编/反编译的人很容易读取你的连接字符串。 .exe本身。
我知道这篇文章:encrypt SQL connectionstring c#
讨论两种主要方式:配置安全部分和企业库数据访问应用程序块
现在我已经调整了Configuration Secure Section,我在app.config文件中加密了连接字符串,我的程序可以解密它以获取连接字符串。我知道这只能在加密的同一台计算机上解密,这不是问题。
我的问题是这些方法有效吗?有人只需要在那台计算机上创建一个只使用相同做法解密的程序吗?
即使我使用Hashing和MD5加密或类似的东西,解密方法仍然在我的程序中,可以从Decompiler / Disassembler中提取。
我真正保护我的数据的唯一方法是购买某种类型的混淆器并在我的加密/解密代码上使用它并希望最好吗?还是有人知道最好的方法?
我所做的是创建了一个程序,该程序需要用户名和密码才能登录,然后能够根据同一数据库中存在的信息执行SQL查询。我不能使用网站,它必须通过.NET程序完成。该计划发给了美国的许多客户。这意味着我真的需要一些安全性。
答案 0 :(得分:2)
真正安全的方法是不要直接连接到SQL ......
在互联网上创建与数据库通信的API / Webservice / Similar。然后,您的客户端可以对API进行身份验证并发出请求。
这为您提供了许多优势:
(注意到@Blam在对OP的评论中提到了这一点。)
所以,要提供更多细节......
获取业务逻辑(或等效层)并通过Web服务公开方法。正如Blam所说,WCF是一个很好的起点。这允许您强制执行业务逻辑并管理代码中对数据库的所有更改。
答案 1 :(得分:1)
已回答服务但我会尝试添加一些新值。
WCF服务通常托管在IIS中,但您将客户端保留在VB中。
今天在VB中你可能使用用户输入来指定查询。在SQL上运行查询。然后使用结果构建数据列表或业务对象。
使用WFC,您可以在服务上调用方法。 MyService背后的一切都隐藏在用户PC之外。
List<busObs> myBusObjs = MyService.GetBusObj(string userCriteria);
A Developer's Introduction to Windows Communication Foundation 4
这将被称为3层应用程序。
另一个好处是维护。您无需更新PC即可更新Web服务层。
另一个好处是保护您的知识产权。就像我在一个应用程序上工作一样,我们有一些隐藏在WCF服务后面的专有算法。由于客户只是一个UI层,有人可以对客户进行逆向工程,但他们不会得到任何好东西。
答案 2 :(得分:0)
另一个解决方案是通过存储过程处理所有数据访问 - 使用SQL数据库的内置安全性和权限将应用程序的用户限制为他们可以在您的应用程序中执行的数据处理并保护您的基础数据。
实际上,存储过程代表了应用程序的数据API - 尽管完整的Web服务/ API可以让您在长期内更灵活地更改服务器等。