2011-01-07 109 views
2

我一直在试图找出加密我的数据库中的敏感列的好方法。我认为SQL Server的内置加密机制可以做到这一点,但是我错过了某些东西或者做错了。SQL Server 2008列加密

最初的计划是创建具有用对称密钥加密列的表,并且具有视图从表中未加密的选择数据。但是,我无法弄清楚如何在视图选择语句中使用DecryptByKey方法。再加上它让我想到数据将不会被加密,所以除非连接是安全的,否则它将毫无意义。

然后,我认为把所有的加密/解密,以我的应用程序。我认为

  1. 如果数据库完全无法解密自己的数据,那么有人渗透数据库根本无法做多。

  2. 这将节省服务器试图解密/加密信息的努力,如在数据库加密/解密可以在一台工作站上影响性能在全球范围,而不仅仅是。

因此,我的应用程序对每列需要加密的“硬编码”IV和密钥。它将加密信息发送到数据库,并从数据库接收加密信息。这只是为了让你想起你,我知道我必须把IV和密钥放在其他地方......它们在应用代码中并不安全。

我在想这个疯狂的想法:

客户端应用程序将包含一个密钥和IV。服务器将在单个表中包含所有加密列的Keys/IV。但是,Keys/IV的值将使用客户端应用程序所持有的Key/IV进行加密。

在启动时,客户端应用程序将所有的键/从DB的IV加载到内存中,并且根据需要,以查看从服务器选择的数据解密。

也可能有这将用户加入与他们被允许使用的密钥的关系。因此,该应用只会解密用户有权查看的列。

您认为这个想法是一个胜利还是松动?而且,在给定客户端应用程序/ SQL Server场景的情况下,你们是如何实现加密的呢?

回答

1

YOu松动。点。没有机会使用索引等

如果你想安全,把它放在一个安全的服务器上,并加载企业版和使用数据库文件加密。

+0

这是真的吗?该计划是加密敏感的“仅数据”列,如社会安全号码,电话号码,信用卡号码等。我通常不会索引的列。 – instantmusic 2011-01-07 20:00:11

0

考虑放入中间层来处理加密/解密。假设你可以把它放在服务器上,你可以保持对位的控制,而不用担心客户端应用程序(可能有些不在你的控制之下)被反编译(并暴露密钥)。