如何防止本地管理员用户访问使用EFS加密的数据库文件?

时间:2013-05-03 14:42:44

标签: sql-server-2008 encryption sql-server-2008-express efs

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

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

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

我真的很感激任何帮助!

2 个答案:

答案 0 :(得分:2)

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

如果本地管理员更改了用户的密码,他们的DPAPI主密钥保持不变,仍受旧用户密码保护...更改密码将无法访问DPAPI主密钥,因此赢了不允许您访问用户私有RSA密钥...

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

答案 1 :(得分:1)

如果没有将数据存储迁移到云并让您的应用程序使用Web服务,我认为您无法做很多事情。我假设您正在尝试保护数据库中的某些IP。如果您可以将逻辑放入应用程序的客户端或服务器部分,则可以对应用程序进行模糊处理,然后不必担心这个问题。无论如何,我推测的数据都归您的用户所有,我对一家试图通过加密数据库来锁定我自己的数据的公司感到非常恼火。

我认为唯一真正的解决方案是通过销售合同来解决这个问题,即使他们对软件进行反编译也会限制他们对软件的处理。