我将在SQL Server数据库中存储敏感数据,如SSN和银行帐号。数据库位于与运行应用程序代码的服务器分离的服务器上,并且我已将安全组设置为仅允许从应用程序服务器IP入站访问数据库服务器。我已经实现了IDataProtector API,并正在使用它将加密密码存储在我的数据库中,所以我打算使用它来存储SSN和银行信息。
但我今天读到了Always Encrypted,这是一种基于SQL Server的方法,可以用来加密特定列。从Microsoft页面:"始终加密"允许客户端加密客户端应用程序中的敏感数据,并且从不向数据库引擎(SQL数据库或SQL Server(透露加密密钥。因此,Always Encrypted在拥有数据并可以查看数据的人和管理数据但不应该访问数据的人之间提供了一种分离">
如果我最担心的是黑客进入我的数据库并窃取数据,那么这些方法中哪一种更安全?"始终加密"的主密钥将存储在应用服务器上的Windows证书存储中。老实说,我不知道IDataProtection的密钥存储在哪里,因为我设置它已经有一段时间了。我在服务启动中没有任何明确的内容。AddDataProtection((。
经过大量研究,我想我现在会选择Data Protector。主要的决定点是,我不想使用Azure密钥库进行集中的密钥存储,而且Always Encrypted没有提供太多替代方案。
我发现我不能将Windows证书存储用于列主密钥,因为我的EC2实例位于负载均衡器/自动缩放器上,因此Windows环境可能随时重建并丢失密钥。