我打算通过SQL Server证书/(a)对称密钥保存客户的敏感信息。虽然数据现在是安全的,证书和密钥是不可读的,我想知道我应该把钥匙放在哪里?有没有最好的做法?我唯一能想到的是创建只能访问dbo或专用登录的表并保存在那里。请给我你宝贵的意见。
谢谢, EBE。
答案 0 :(得分:1)
哈希密码并存储哈希值。如果用户忘记密码,请给他发新的密码。 也给他一个改变它的选择。
还考虑实施openId注册,这样您就不必担心登录了。
答案 1 :(得分:1)
可以使用数据库主密钥对证书进行加密,并且可以使用服务器主密钥对数据库主密钥进行加密。使用DPAPI使用机器密钥和/或帐户密钥对服务器主密钥进行加密。这些都在Encryption Hierarchy中解释。
需要访问加密数据机密的自动服务可以依赖于此加密层次结构。使用普通访问保护(访问控制列表和SELECT的授予/拒绝/撤销权限)在运行时保护数据,添加加密只是为了提供意外的媒体泄露保护。意外媒体泄露保护最终依赖于服务帐户密码和/或主机系统帐户安全性。
如果在物理丢失的情况下需要更强大的保护,则必须使用SQL 2008并依赖EKM基础结构(Extensible Key Management),创建存储在物理设备上的主密钥。这将在媒体受损时增加安全性,因为攻击需要物理访问存储主密钥的硬件加密模块。
不需要访问机密的流程不需要任何这些。在这种情况下,访问是通过客户端应用程序提供的密码获得的,并且这些密码通常是从用户自己获得的。
如果您的系统属于前一种类型(需要自动访问机密并且不要求当前用户获取密码的访问密码),那么可以使用ecryption层次结构(数据库主密钥,服务主密钥)。如果应用程序属于后一种类型(它要求用户输入密码以访问用户自己的特定机密),那么正确的解决方案是使用用户提供的密码加密主对称密钥。
无处,我必须强调并重复, NOWHERE 在这些方案中,是否存在保存到文件中的秘密或保存到表中的主密码的空间。这只是一个主要设计#FAIL。
答案 2 :(得分:0)
文件系统。例如,配置文件位于只有运行应用程序的帐户才能读取和/或写入的目录下。这假设您当然信任您的数据中心人员。
另一方面,也许我没有把你的问题弄得恰到好处。如果您只想在桌面上存储用户密码,则应该理想地使用SHA-1对它们进行散列(使用salt)。切勿以明文形式存储密码,无论您使用的数据库权限如何。