Как лучше всего обновить 300 000 записей, меняя пароли для каждого - PullRequest
0 голосов
/ 06 мая 2011

У меня есть таблица «учетных записей» сайта, которая содержит данные учетной записи для всех наших пользователей.

идентификатор-имя пользователя-пароль-и т.д.

У нас также есть форум (phpBB), который я пытаюсь интегрировать с сайтом. Интеграция осуществляется путем создания записи в таблице пользователей phpBB с тем же именем пользователя и паролем, что и для основной учетной записи.

Наша система использует хешированные пароли md5, но последняя версия phpBB3 имеет другой формат (Phpass), поэтому мне нужно написать скрипт, который заменит пароль phpBB на пароль «account» для примерно 300 000 пользователей.

Как лучше всего подойти к этому?

У меня есть запрос, который объединяет две таблицы на основе имени пользователя, я мог бы написать что-то на PHP, чтобы просмотреть каждую запись и обновить ее (может вызвать проблемы с производительностью?)

или делать преобразование в MySQL?

Есть ли другой способ сделать это?

Просто чтобы уточнить, когда эти учетные записи были созданы в обеих таблицах ... мы использовали одинаковые имена пользователей и пароли для обеих, поэтому каждая запись в our_db.accounts имеет хэш md5 одного и того же зашифрованного пароля в phpbb. пользователи. То, что я пытаюсь сделать для этого большого набора данных, это заменить пароль в таблице phpBB на пароль из нашей таблицы учетных записей

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Обычно самым быстрым и простым способом является создание временной таблицы XXX с теми же полями, что и для таблицы, которую вы хотите обновить, и выполните:

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

Затем переименуйте XXX в правильную таблицу, если все правильно.

Я считаю, что MySQL также поддерживает обновление с объединениями, которые также будут работать.

0 голосов
/ 06 мая 2011

Вы не можете преобразовать свой пароль хеширования MD5 в любой другой формат, поскольку значения хеш-функции необратимы.

Интеграция должна осуществляться с одним приложением, используя службы входа другого, и вы добавляете пароль phpbb в свою базу данных, когда пользователи успешно входят в ваше приложение (в этот момент у вас есть пароль в виде открытого текста на секунду).

Редактировать : В случае совпадения методов хэширования паролей:

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

Может немного зависеть от типа / версии базы данных.

Но: это означает, что обе системы не используют соль или одну и ту же соль. Если нет соли, подумайте о добавлении соли в будущем. Это защитит декодирование md5-хэшированного пароля с радужными таблицами и станет вашей ответственностью перед вашими пользователями.

...