如何最好地更新300,000条记录,更改每条记录的密码

时间:2011-05-06 09:26:24

标签: php mysql migration recordset phpbb

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

ID-用户名 - 密码等

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

我们的系统使用md5散列密码,但最新版本的phpBB3有不同的格式(Phpass),所以我需要编写一个脚本,用大约300,000个用户的'account'密码替换phpBB密码。

接近这个的最佳方式是什么?

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

还是在MySQL中进行转换?

还有另一种方法吗?

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

2 个答案:

答案 0 :(得分:1)

通常最快最简单的方法是使用与要更新的表相同的字段创建临时表XXX:

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

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

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

答案 1 :(得分:0)

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

当用户成功登录您的应用程序时,必须使用另一个应用程序使用另一个应用程序的登录服务进行集成,并将phpbb密码添加到数据库中(在该momemt中,您有一段明文密码)。

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

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

可能稍微依赖于数据库类型/版本。

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