我经历了不少类似的问题在这里阅读对SO,但没有一个是完全一样的情况,因为我。
以前,用户在一吨信息,包括SSN,SSN配偶和CC数据进入。 当用户完成过程中,信息被推开的PDF文件,压缩了(然后得到加密的),然后通过FTP回我们的服务器。 我们在数据库中保存的一切,除了核潜艇和CC,当会话死亡这得一干二净。
现在,我们需要保存的信息数据库,以及对某些情况下,用户A完成后,用户B需要进来的形式签署。 用户B完成后,将创建文件和核潜艇/ CC数据删除。 这意味着数据必须住在我们的数据库从几分钟到可能是一个月。 有一种情况我歼灭从数据库中的数据,使他们开始在一组过期日期。 注:我没有使用CC数据实际上使电荷,所以我不能将它交给第三方像Authorize.net或贝宝。
与解释,我需要知道加密这个东西,保护它的最好办法。 我使用的是用户的GUID为重点,或只是SQL Server 2005的加密列在我的代码做AES和限制解密功能,网络用户之间徘徊。
我喜欢AES,因为它使谁拥有使用网络用户的密码,以获取所有CC数据DB访问了几个人。 他们将有机会获得源代码,并可以复制的解密方法,但至少这是不是仅仅运行一些查询有点困难。
不幸的是,我没有通过不存储CC数据的方式时推,但我下一个版本的一些想法。 我必须做出选择和实施本星期加密。
如何与GUID作为对称密钥将保护人们与数据库访问被解密的数据的用户应用程序代码中使用AES加密,我不明白。 在大多数系统中不会将用户ID GUID也可以存储在明文的数据库? 如果是的话可以访问数据库的任何人都可以将其通过相当于解密函数来解密任何数据。
根据您的应用程序服务器连接到SQL Server中的内置列加密功能的数据库服务器应该是一个很好的解决方案。 如果您使用集成身份验证你可以避免应用程序用户明文密码。 通过使用可保护您的加密密钥的访问控制,你可以设置它们,这样其他用户(和可选甚至没有DBA)可以任意从数据库中解密数据。
在2008年6月我作了关于在SQL Server 2005和2008中使用的加密功能,可在这里
下面是从演示文稿提供了如何实现这一点,以便只有适当的用户可以查看解密的数据的概要的示例代码:
- 创建数据库主密钥,这将被用来在DB每隔密钥来加密,并依次由服务主密钥加密
CREATE MASTER KEY ENCRYPTION BY password = 'MasterKey1$'
- 创建证书所用的用户保护自己的对称密钥 - 创建对称密钥,因为他们更快对数据进行加密和基于关键尺寸没有固有的数据大小限制
CREATE CERTIFICATE data_cert AUTHORIZATION data WITH SUBJECT = 'Data Cert'
- 请注意,您还可以使用加密BY密码选项这里以防止DBA不会从您打开证书,因此暂时无法对数据进行解密知道密码
- 创建对称密钥为每个用户保护他们的数据 - 注意,如果在XP上运行SQL Server的AES算法不可用,必须用3DES
CREATE SYMMETRIC KEY data_key WITH ALGORITHM = AES_256 ENCRYPTION BY CERTIFICATE data_cert
- 请注意,您还可以使用加密BY PASSWORD这里以及防止谁DBA不会打开该键知道密码
- 授予对对称密钥,以便只有正确的用户可以访问它们
GRANT VIEW DEFINITION ON SYMMETRIC KEY::data_key TO [DOMAIN\ApplicationServiceAccount]
这使您只能通过相应的用户可以打开表中使用的加密/解密数据的对称密钥。 您还可以获得在数据库引擎的加密的最佳实践功能的优势,如每个细胞有独特的初始化向量,以及SQL Server中的密钥管理功能,使您可以轻松地定期更改您的密钥进行加密。