【问题标题】:How can I best update 300,000 records changing the passwords for each如何最好地更新 300,000 条记录,更改每个记录的密码
【发布时间】:2011-05-06 09:26:23
【问题描述】:

我有一个站点“帐户”表,其中包含我们所有用户的帐户详细信息。

id-username-password-etc

我们还有一个论坛 (phpBB),我正在尝试与该站点集成。集成是通过在 phpBB users 表中创建一个与主帐户相同的用户名和密码的条目来完成的。

我们的系统使用 md5 散列密码,但最新版本的 phpBB3 具有不同的格式 (Phpass),因此我需要编写一个脚本,将 phpBB 密码替换为大约 300,000 个用户的“帐户”密码。

解决这个问题的最佳方法是什么?

我有一个根据用户名将两个表连接在一起的查询,我可以用 PHP 编写一些东西来遍历每条记录并更新它(可能会导致性能问题?)

还是在 MySQL 中进行转换?

还有其他方法吗?

澄清一下,当这些帐户在两个表中创建时......我们为两者使用了相同的用户名和密码,因此我们的_db.accounts 中的每条记录都具有 phpbb 中相同加密密码的 md5 哈希值。用户。我试图为这个大型数据集做的是将 phpBB 表中的密码替换为我们帐户表中的密码

【问题讨论】:

  • 如何将 MD5 散列密码转换为 Phpass?您应该考虑更改 phpBB 的 php 代码以检查您的表的授权。
  • 已经完成了,抱歉我忘了提这个! :)
  • 你使用的是什么版本的phpbb。我认为旧版本仅使用 md5。我认为最新版本同时支持 md5 和 phpass。无论如何,如果您希望转换您的 md5 密码,请尝试使用 md5 散列重新编码 phpbb。这可能很容易,因为您应该正在编辑只有一些文件

标签: php mysql migration recordset phpbb


【解决方案1】:

通常最快和最简单的方法是创建一个临时表 XXX,其中包含与您要更新的表相同的字段并执行:

insert into XXX(...target columns...) select ...the join you have created and mention....

如果一切正确,则将 XXX 重命名为正确的表。

我相信 MySQL 也支持使用连接进行更新,这也可以。

【讨论】:

    【解决方案2】:

    您无法将您的 MD5 哈希密码转换为任何其他格式,因为哈希值不可逆。

    必须使用另一个应用程序的登录服务与一个应用程序进行集成,当用户成功登录到您的应用程序时,您将 phpbb 密码添加到他们的数据库中(此时您有一秒钟的明文密码)。

    编辑:如果密码哈希技术匹配:

    UPDATE phpBBdb.accounts SET password = (SELECT password FROM yourApp.accounts ya WHERE (ya.username = phpBBdb.accounts.username))
    

    可能在某种程度上取决于数据库类型/版本。

    但是:这意味着两个系统都不使用盐或使用相同的盐。如果没有盐考虑在未来添加盐。这将保护使用彩虹表解码 md5-hashed-password,这是您对用户的责任。

    【讨论】:

    • 对不起,也许我没有正确解释它... phpbb 加密密码和 md5 散列密码在两个表中是相同的。我已经重写了 phpBB 以使用我们的 md5 密码 - 所以现在它是一个简单的例子来替换数据库中的 phpBB 密码
    • 添加了可能的 SQL 和提示。
    • 谢谢,查询看起来像我所追求的......我会试一试并报告
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多