2010-06-29 86 views
0

问候!保护用户PC上的应用程序数据库访问

我需要部署一个紧凑的数据库与我正在处理的应用程序。数据库充当了应用程序已经看到的数据的缓存,并且数据永远不会改变,所以缓存的值永远不会过时。我选择了SQLite,并且正在用C#编写。

我想保护数据库文件,以便用户不能轻松访问或编辑它们 - 只能访问我的应用程序。现在,一种选择是使用密码保护,除了使用Reflector之类的工具,人们可以轻松查看原始版本的源代码,并检查密码/每个文件如何生成并复制它。

有关于如何实现这个结果或什么关闭的建议吗?过去有没有人做过这样的事情?

谢谢!

回答

4

默默无闻的安全性。

如果您的应用可以对其进行解密,那么您的用户也可以这样做。

如果你想保持它的安全,你必须为自己保留它。您最好的选择是将数据库存储在服务器上,并通过Web服务使其可用。在您自己的服务器上执行访问控制检查,以便应用程序只能访问要查看的数据库部分。

+0

+1 - 确切地说,如果没有别的,他们可以将它挂接到调试器并查找(未加密的)过程的记忆。 – 2010-06-29 21:08:48

+0

这就是我所害怕的。虽然我会认为像这样的东西会很普遍,以至于存在一个标准的解决方案。在服务器上拥有数据库是没有意义的,因为它充当缓存来自用户的特定请求,并且在那里纯粹是为了表现的好处。 – 2010-06-29 21:13:53

+0

@ filip-fku:如果有真正的解决方案,DRM家伙就会使用它。这实质上是经典的[a-hole](http://en.wikipedia.org/wiki/Analog_hole)问题。 – 2010-06-29 21:16:02

1

作为黄金法则,我没有一个明确的答案(在发布部署期间模糊你的代码,使密码变得很长):如果他们有物理访问可执行文件(替代机器/汽车/门)他们可以进入,如果他们想(并有技能)。

你所能做的就是让他们变得困难。

0

这个区域不是我的专长,但我可以建议的一件事就是想想你实际发送了什么数据,并确定是否有任何方法可以限制任何更敏感的数据传输到客户摆在首位。

如果您担心的是将ID号码帐号等内容发送给客户端,那么也许您可以将这些值转换为客户端版本,这在您的应用程序之外是毫无意义的。您的服务器可能有一个表,其中包含真实值和仅客户端值之间的转换。

比方说,你已经存储在服务器的数据库这个表(而不是客户端数据库!)

RealAccountNumber ClientOnlyAccountNumber 
981723    ABC123 
129847    BCD234 
923857    CDE345 
... 

所以客户端只能看到帐号在ClientOnlyAccountNumber列,当一个客户端发送来的请求服务器的帐户“ABC123”执行的操作,服务器知道将其转换为帐号981723.

+0

不同的问题的好主意! :)我所关心的是锁定用户访问本地文件数据库。 – 2010-06-29 21:31:05

相关问题