在SQL Server 2008中保留密码的最佳方法是什么?

时间:2010-01-12 20:08:52

标签: sql-server encryption certificate key

我打算通过SQL Server证书/(a)对称密钥保存客户的敏感信息。虽然数据现在是安全的,证书和密钥是不可读的,我想知道我应该把钥匙放在哪里?有没有最好的做法?我唯一能想到的是创建只能访问dbo或专用登录的表并保存在那里。请给我你宝贵的意见。

谢谢, EBE。

3 个答案:

答案 0 :(得分:1)

哈希密码并存储哈希值。如果用户忘记密码,请给他发新的密码。 也给他一个改变它的选择。

还考虑实施openId注册,这样您就不必担心登录了。

答案 1 :(得分:1)

可以使用数据库主密钥对证书进行加密,并且可以使用服务器主密钥对数据库主密钥进行加密。使用DPAPI使用机器密钥和/或帐户密钥对服务器主密钥进行加密。这些都在Encryption Hierarchy中解释。

需要访问加密数据机密的自动服务可以依赖于此加密层次结构。使用普通访问保护(访问控制列表和SELECT的授予/拒绝/撤销权限)在运行时保护数据,添加加密只是为了提供意外的媒体泄露保护。意外媒体泄露保护最终依赖于服务帐户密码和/或主机系统帐户安全性。

如果在物理丢失的情况下需要更强大的保护,则必须使用SQL 2008并依赖EKM基础结构(Extensible Key Management),创建存储在物理设备上的主密钥。这将在媒体受损时增加安全性,因为攻击需要物理访问存储主密钥的硬件加密模块。

需要访问机密的流程不需要任何这些。在这种情况下,访问是通过客户端应用程序提供的密码获得的,并且这些密码通常是从用户自己获得的。

如果您的系统属于前一种类型(需要自动访问机密并且不要求当前用户获取密码的访问密码),那么可以使用ecryption层次结构(数据库主密钥,服务主密钥)。如果应用程序属于后一种类型(它要求用户输入密码以访问用户自己的特定机密),那么正确的解决方案是使用用户提供的密码加密主对称密钥。

无处,我必须强调并重复, NOWHERE 在这些方案中,是否存在保存到文件中的秘密或保存到表中的主密码的空间。这只是一个主要设计#FAIL。

答案 2 :(得分:0)

文件系统。例如,配置文件位于只有运行应用程序的帐户才能读取和/或写入的目录下。这假设您当然信任您的数据中心人员。

另一方面,也许我没有把你的问题弄得恰到好处。如果您只想在桌面上存储用户密码,则应该理想地使用SHA-1对它们进行散列(使用salt)。切勿以明文形式存储密码,无论您使用的数据库权限如何。