1

假设我有一个 C# 多用户客户端-服务器应用程序和 SQL Server 2008 Express 作为数据库。这是一个应该安装在客户个人电脑上的应用程序,为公司工作的每个人都可以访问,即对.mdf文件的物理访问是免费的,因此可以轻松地将.mdf文件复制到他/她的机器上,附加它并查看我开发的所有数据库结构和存储过程的代码。

我已经阅读了很多关于这个问题的信息,这些信息都指导我使用Windows 的免费EFS(加密文件系统)。因此,我实现了.mdf通过专门为此创建的特定 Windows 用户帐户加密我的文件,为用户设置密码,这样任何人都无法以我的用户身份登录并解密文件。一切都很好,但我遇到了一个难题,客户登录的用户几乎总是在本地管理员组中,因此他们可以轻松地为我的用户重置密码并以我的用户身份登录以解密文件。我不能从管理员组中排除他们的用户。

谁能帮我解决这个问题,好吗?或者也许有可能在没有创建额外用户的情况下解密文件,这样他们就无法解密.mdf文件?

我真的很感激任何帮助!

4

2 回答 2

2

EFS 使用随机文件加密密钥 (FEK) 加密文件,并使用属于用户的 RSA 密钥加密该密钥……此 RSA 密钥受 DPAPI 保护……如果系统设置有密钥恢复代理,则 FEK还为密钥恢复代理的 RSA 密钥加密(这可能是本地管理员,但可以更改,即使没有密钥恢复代理)

如果本地管理员更改用户的密码,他们的 DPAPI 主密钥保持不变,仍受旧用户密码保护......更改密码不会让您访问 DPAPI 主密钥,因此不会给您访问用户的私有 RSA 密钥...

如果站是域的成员,域控制器将有一个解密密钥,允许解密 DPAPI 主密钥......

于 2013-05-03T22:43:32.740 回答
1

除了将数据存储移动到云端并让您的应用程序使用 Web 服务之外,我认为您无能为力。我假设您正在尝试保护数据库中的某些 IP。如果您可以将逻辑放入应用程序的客户端或服务器部分,您可以混淆您的应用程序,然后不必担心这个问题。无论如何,我认为数据归您的用户所有,如果一家公司试图通过加密数据库来锁定我自己的数据,我会非常恼火。

我认为唯一真正的解决方案是通过销售合同来解决这个问题,该合同限制了他们对您的软件可以做的事情,即使他们反编译了它。

于 2013-05-03T20:12:37.563 回答