2010-01-12 64 views
1

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

谢谢, Ebe。

回答

1

散列密码并存储散列。如果用户忘记密码给他一个新的。 也给他一个选项来改变它。

也考虑实施openId注册,所以你不必担心登录。

0

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

另一方面,也许我没有把你的问题说得很对。如果您只想将用户密码存储在表格中,则应该理想地使用SHA-1对它们进行散列(使用salt)。不管您使用的数据库权限如何,切勿以明文形式存储密码。

1

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

需要访问加密数据机密的自动化服务可以依靠此加密层次。数据在运行时使用正常访问保护(访问控制列表和SELECT的授予/拒绝/撤销权限)进行保护,加密仅用于提供意外的介质折衷保护。意外的媒体妥协保护最终依赖于服务帐户密码和/或主机系统帐户的安全性。

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

一个过程,确实不是需要访问的秘密不需要任何这些。在这种情况下,访问由客户端应用程序提供的密码获得,并且这些密码通常从用户本身获取。

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

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

+0

只是要清楚:我不会对如何存储*密码*,但**秘密**一般任何评论。像创建ASP成员资格提供者所需的用户访问密码应作为散列存储,并且有什么和应该如何散列的完全不同的讨论。 – 2010-01-13 00:57:46

+0

谢谢,那就是我一直在寻找的东西。 – blah 2010-01-14 22:59:23

相关问题