我个人认为SQL列加密是一种巨大的浪费;-),但由于客户的插入必须实现它。所以我的问题是:
- 它的实际作用是什么 - 管理员会看到加密数据,但应用程序会看到明文数据吗?
- 备份数据后会发生什么情况?我假设备份保持加密状态,在这种情况下,如果我们需要恢复到不同的服务器上,它们是否可用?
- 加密 key 实际上来自哪里?
- 我可以指定一个固定的加密 key ,这样至少可以在我移动到的服务器上轻松进行数据库恢复。我真的不想要一些神奇的 key 算法,当将来当 key 突然不可用时,这会让我搬起石头砸自己的脚。
最佳答案
如果客户正在插入列加密,但您不知道 key 实际上来自哪里,那么您的客户在浪费他的钱,而您也在浪费他的时间。如果您甚至考虑固定键,则更是如此。
MSDN 上有详尽的解释解释了 key encryption hierarchy 。所有方案都将 key 链 Root 于 DPAPI,以防服务本身必须访问加密存储而无需用户提供任何 key ,或者使用用户明确提供的密码。
加密是为减轻特定安全威胁而采取的措施。根据这些威胁是什么(您的帖子中没有指定它们),列级加密可能是正确的答案,但几乎总是部署 Transparent Database Encryption是一个更好的解决方案。
没有任何加密方案可以对想要查看内容的管理员隐藏内容。时期。所有声称相反的解决方案都是万金油。
关于c# - SQL列加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4981417/