【问题标题】:mysql transfer passwords hashed with password()mysql传输密码用password()散列
【发布时间】:2026-02-20 09:05:01
【问题描述】:

我正在尝试传输一个包含用户及其凭据的哈希表的大型 MySQL 数据库

存储在这些表中的用户密码使用 MySQL 的 password() 方法存储。将它们转移到新机器后,散列密码似乎不再有效。

有什么方法可以将密码()加密字段传输到新服务器并使其正常工作?谢谢

* 编辑 *

我确实遇到了兼容性问题。我的 MySQL 版本生成 16 字节哈希密码,但是我安装的新版本 MySQL 使用新的 41 字节哈希方法。

不过,我找到了解决办法,

我已经在 my.cfg MySQL 配置中设置了old_passwords=1,那么新版本的 mysql 将使用旧的密码哈希。但是,我不建议任何人这样做,因为较新的 mysql 服务器的新哈希方法更好更安全。可悲的是,我不能这样做,因为我在服务器上有超过 100 个应用程序

上面的dlyaza提供了最好的解决方案。

【问题讨论】:

  • 您是否将密码复制到数据库的新实例中,您是否使用相同的功能进行登录?
  • 应用程序是相同的,我只是想将所有内容从旧服务器原样转移到功能更强大的新服务器上。我复制了所有内容(包括密码),除密码外一切正常...密码示例为:*4ACFE3202A5FF5CF467898FC58AAB1D615029441
  • 我运行了一个查询(SELECT password('test'))来查看两台服务器上的结果,结果是:旧服务器:378b243e220ca493 新服务器:*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29

标签: php mysql hash


【解决方案1】:

您遇到了 MySQL 密码()函数的兼容性问题,请详细阅读这篇文章: 6.1.2.4 Password Hashing in MySQL

简而言之,MySQL 提供old_password() 以在从旧服务器迁移到新服务器时提供兼容性。因此,对于新服务器,您可以使用:

SELECT old_password('test')

解决此问题的程序:

  1. 在表格中以password2 或任何名称添加新字段。
  2. 使用 old_password() 验证新服务器上的用户,如果密码有效,则在步骤 1 中创建的字段中保存一份副本。
  3. 转换完所有用户密码后,就可以正常使用password()了。

【讨论】:

  • 是的,你是对的......我也发现了,有没有办法在配置中设置 mysql 以使用旧的哈希方法?因为不了解功能,无法修改应用程序