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数据库

MySQL未知列'password_last_changed'

如何在mysql中使用laravel迁移将数据库列'null'更改为'nullable'?

如何修复 MySql:索引列大小太大(Laravel 迁移)

wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]