Php 如何最好地更新300000条记录更改每个记录的密码

Php 如何最好地更新300000条记录更改每个记录的密码,php,mysql,migration,recordset,phpbb,Php,Mysql,Migration,Recordset,Phpbb,我有一个站点“帐户”表,其中包含所有用户的帐户详细信息 id用户名密码等 我们还有一个论坛(phpBB),我正试图与该网站整合。集成是通过在phpBB users表中创建一个与主帐户具有相同用户名和密码的条目来完成的 我们的系统使用md5哈希密码,但最新版本的phpBB3具有不同的格式(Phpass),因此我需要编写一个脚本,将phpBB密码替换为大约300000个用户的“帐户”密码 最好的方法是什么 我有一个基于用户名将两个表连接在一起的查询,我可以用PHP编写一些东西来遍历每个记录并进行更新

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

id用户名密码等

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

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

最好的方法是什么

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

或者在MySQL中进行转换

还有别的办法吗


只是澄清一下,当在两个表中创建这些帐户时。。。我们使用了相同的用户名和密码,因此我们的_db.accounts中的每个记录都具有phpbb.users中相同加密密码的md5散列。对于这个大数据集,我试图用accounts表中的密码替换phpBB表中的密码

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

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

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

UPDATE phpBBdb.accounts SET password = (SELECT password FROM yourApp.accounts ya WHERE (ya.username = phpBBdb.accounts.username))
可能有点依赖于数据库类型/版本


但是:这意味着两种系统都不使用盐或使用相同的盐。如果没有盐,考虑以后再加盐。这将保护使用rainbow表解码md5哈希密码,这是您对用户的责任。

通常,最快捷、最简单的方法是创建一个临时表XXX,其字段与您要更新的表相同,并执行以下操作:

insert into XXX(...target columns...) select ...the join you have created and mention....
如果全部正确,则将XXX重命名为正确的表


我相信MySQL也支持使用连接进行更新,这也会起作用。

如何将MD5哈希密码转换为Phpass?您应该考虑更改phpBB的php代码,以便根据您的表检查授权。已经完成了,很抱歉我忘了提到这一点!:)使用什么版本的phpbb u r。我认为旧版本只使用md5。。我认为最新版本同时支持md5和phpass。。无论如何,如果您希望转换md5密码,请尝试使用md5哈希重新编码phpbb。。这可能很容易,因为你应该只编辑一些文件对不起,也许我没有解释清楚。。。两个表中的phpbb加密密码和md5哈希密码相同。我已经重写了phpBB以使用我们的md5密码-因此现在只需简单地替换数据库中的phpBB密码,并添加了可能的SQL和提示。谢谢,查询看起来就像我要查询的一样。。。我去试试,然后回去报告