保护用户PC上的app数据库访问

时间:2010-06-29 21:03:52

标签: c# sqlite password-protection

问候!

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

我想保护数据库文件,以便用户无法轻松访问或编辑它们 - 仅保留对我的应用程序的访问权限。现在,一个选项是使用密码保护,这很好,除了使用像Reflector这样的工具,人们可以轻松查看源的近原始版本并检查密码/它们如何生成每个文件并复制它。

有关于如何实现此结果或其他内容的建议吗?过去有人做过这样的事吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

默默无闻的安全。

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

如果你想保证它的安全,你必须自己保管它。您最好的办法是将数据库存储在服务器上,并通过Web服务提供。在您自己的服务器上执行访问控制检查,以便应用程序只能访问它必须查看的数据库部分。

答案 1 :(得分:1)

我没有一个明确的答案(在发布部署期间对代码进行模糊处理,使密码长时间隐藏),因为黄金法则代表:如果他们可以实际访问可执行文件(替代机器/车/门)他们如果他们想要(并且有技能)就可以进入。

你所能做的只是让他们感到困难。

答案 2 :(得分:0)

这个领域不是我的强项,但我可以建议的一件事就是只考虑你实际发送的数据,并确定是否有任何方法可以限制任何更敏感的数据传输到客户端首先。

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

假设您将此表存储在服务器的数据库(而不是客户端数据库中)中。

RealAccountNumber   ClientOnlyAccountNumber
981723              ABC123
129847              BCD234
923857              CDE345
...

因此,客户端只能看到ClientOnlyAccountNumber列中的帐号,当客户端向服务器发送请求以便在帐户“ABC123”上执行操作时,服务器知道将其转换为帐号981723。 / p>