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

#php #mysql #migration #recordset #phpbb

#php #mysql #миграция #набор записей #phpbb

Вопрос:

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

id-имя пользователя-пароль-etc

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

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

Каков был бы наилучший способ приблизиться к этому?

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

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

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

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

Комментарии:

1. Как вы будете преобразовывать хэшированный пароль MD5 в Phpass? Вам следует подумать об изменении php-кода phpBB для проверки авторизации в вашей таблице.

2. Уже сделано, извините, я забыл упомянуть об этом! 🙂

3. Какую версию phpbb вы используете. Я думаю, что более старая версия использует только md5.. И я думаю, что последняя версия поддерживает как md5, так и phpass.. В любом случае, если вы хотите, чтобы ваши пароли md5 были преобразованы, попробуйте перекодировать phpbb с помощью хеширования md5.. Это может быть легко, потому что вы должны редактировать только некоторые файлы

Ответ №1:

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

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

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

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

Ответ №2:

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

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

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

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

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

Но: Это означает, что обе системы не используют соль или одну и ту же соль. Если соли нет, подумайте о добавлении соли в будущем. Это защитит расшифровку md5-hashed-password с помощью rainbow-tables и является вашей ответственностью перед вашими пользователями.

Комментарии:

1. Извините, возможно, я не объяснил это должным образом… Зашифрованный пароль phpbb и хэшированные пароли md5 одинаковы в обеих таблицах. Я переписал phpBB для использования наших паролей md5 — Так что теперь это простой случай замены паролей phpBB в базе данных

2. Добавлены возможные SQL и подсказки.

3. Спасибо, запрос выглядит так, как мне нужно… Я попробую и отчитаюсь