MySQL PASSWORD() 列:迁移到 MongoDB
Posted
技术标签:
【中文标题】MySQL PASSWORD() 列:迁移到 MongoDB【英文标题】:MySQL PASSWORD() column: migration to MongoDB 【发布时间】:2012-01-10 00:11:43 【问题描述】:我希望将用户数据表迁移到我闪亮的新 MongoDB 装备。无法解决如何处理一列密码的问题。我正在使用 mysql 的 PASSWORD() 函数来存储密码。当构建这个东西时,我没有看到任何需要反转加密的理由,所以我没有看到使用 PASSWORD() 函数有任何危害。但现在我无法按原样传输密码,因为(据我所知)我不能在 MongoDB 中以相同的方式使用 PASSWORD() 来检查密码的有效性。
有什么想法吗?
【问题讨论】:
【参考方案1】:您有多种选择:
选项 1:延迟迁移。
让您的 MySQL 和 MongoDB 服务器保持在线和连接状态。当用户尝试登录时,检查 MongoDB 的密码。如果失败(即,从未设置过密码),则针对 MySQL 进行检查。如果成功,则对密码进行哈希处理并将其存储在 MongoDB 文档中。
缺点:您的 MySQL 服务器必须永远在线(或至少在您的所有用户迁移之前)。
优点:您可以轻松地将 MySQL 密码格式替换为您自己的格式(即 bcrypt 散列或诸如此类)。您不必了解 MySQL 如何在内部对密码进行哈希处理。
选项 2:弄清楚 MySQL password() 函数的工作原理,并在客户端复制它。
根据Simulating MySql's password() encryption using .NET or MS SQL 算法,MySQL 4.1 版及更高版本对PASSWORD()
的使用或多或少是"*" + sha1(sha1("password"))
。如果您运行的是旧版本,则需要找出散列算法是什么,然后改用它。您只需输入您的密码,对其进行双重 SHA1 哈希处理,在前面加上一个星号,然后检查该值是否与数据库中的值匹配。
缺点:确切的算法取决于您运行的 MySQL 版本,因此您可能需要根据您的 MySQL 版本进行一些挖掘。您仍然无法在 MongoDB 文档中使用 MySQL 密码格式(尽管您可以进行延迟升级,过程类似于选项 1 中描述的过程)。
优点:您可以进行一次迁移,然后将 MySQL 服务器脱机。
【讨论】:
我实际上开始研究第一个选项,因为我找不到散列算法。目前使用 MySQL 5.1,所以我可能会尝试您在此处发布的算法,然后使用 #2。谢谢! 如果其他人需要的话,php中的5.1算法是$pass = "*" . strtoupper(sha1(sha1('password string', TRUE)));
以上是关于MySQL PASSWORD() 列:迁移到 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章
使用 aws dms 仅按特定列将 mongodb 表迁移到 mysql
MySQL未知列'password_last_changed'
如何在mysql中使用laravel迁移将数据库列'null'更改为'nullable'?