MySQL PASSWORD()列:迁移到MongoDB

时间:2012-01-10 00:11:43

标签: mysql mongodb passwords

我正在寻找将用户数据表迁移到我闪亮的新MongoDB装备。无法绕过如何处理一列密码的问题。我正在使用MySQL的PASSWORD()函数来存储密码。当构建的东西我没有看到任何理由需要反转加密,所以我没有看到使用PASSWORD()函数有任何伤害。但是现在我不能按原样转移密码,因为(据我所知)我不能在MongoDB中使用PASSWORD()来检查密码的有效性。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您有几种选择:

选项1:延迟迁移。

保持MySQL和MongoDB服务器在线和连接。当用户尝试登录时,请检查MongoDB的密码。如果失败(即,从未设置密码),则检查MySQL。如果成功,则将密码哈希并将其存储在MongoDB文档中。

缺点:您的MySQL服务器必须永久保持在线状态(或至少在所有用户迁移之前)。

上升:您可以轻松地用您自己的格式替换MySQL密码格式(即bcrypt哈希或诸如此类)。您无需了解MySQL内部如何散列密码。

选项2:弄清楚MySQL password()函数的工作原理,并将其复制到客户端。

根据Simulating MySql's password() encryption using .NET or MS SQLPASSWORD()使用的MySQL版本4.1及更高版本的算法是"*" + sha1(sha1("password")),或多或少。如果您运行的是旧版本,则需要找出散列算法的内容,然后使用它。您可以只需要输入密码,对其进行双重SHA1哈希,添加一个星号,然后检查该值是否与数据库中的值匹配。

缺点:确切的算法取决于您运行的MySQL的版本,因此您可能需要根据您的MySQL版本进行一些挖掘。您仍然在MongoDB文档中使用MySQL密码格式(尽管您可以使用类似于选项1中描述的过程进行延迟升级)。

好处:你可以进行一次迁移,然后让你的MySQL服务器脱机。