Я приспособил процесс я использовал для передачи пользовательской информации из существующей базы данных в базу данных VBulletin. Он использует запросы к базе данных, введенные через клиент командной строки MySQL, не требуется обработка PHP.
Он работает для сценария, описанного: что пароли в существующей базе данных хранятся с использованием md5(password)
.
Обе базы данных находятся на одном сервере, vBulletin 4.х
будут созданы три хранимые функции:
vbulletin.userTitle() // Convert user type from current db to a user title
vbulletin.groupId() // Convert current user type into permission group ID
vbulletin.randomSalt() // Create salt using same approach as used by vbulletin
Войти через клиент MySQL: mysql --user=xxx -p vbulletin
Создание хранимых функций:
delimiter //
CREATE FUNCTION vbulletin.userTitle(mtype VARCHAR(255))
RETURNS CHAR(250)
NO SQL
BEGIN
DECLARE userTypeTitle CHAR(250) DEFAULT "";
CASE mtype
WHEN 'user' THEN SET userTypeTitle = 'Member';
WHEN 'admin' THEN SET userTypeTitle = 'Administrator';
WHEN 'moderator' THEN SET userTypeTitle = 'Regional Moderator';
ELSE
SET userTypeTitle = 'Member';
END CASE;
RETURN userTypeTitle;
END//
CREATE FUNCTION vbulletin.groupId(mtype VARCHAR(255))
RETURNS smallint(5)
NO SQL
BEGIN
DECLARE groupTypeId smallint(5) DEFAULT 0;
CASE mtype
WHEN 'user' THEN SET groupTypeId = 2;
WHEN 'admin' THEN SET groupTypeId = 6;
WHEN 'moderator' THEN SET groupTypeId = 11;
ELSE
SET groupTypeId = 12;
END CASE;
RETURN groupTypeId;
END//
CREATE FUNCTION vbulletin.randomSalt()
RETURNS CHAR(30)
READS SQL DATA
BEGIN
DECLARE count INT DEFAULT 0;
DECLARE rn1 CHAR;
DECLARE saltout VARCHAR(30) DEFAULT "";
WHILE count<30 DO
SET count = count+1;
SET rn1 = CHAR(FLOOR(33 + (RAND() * 93)));
SELECT CONCAT(saltout, rn1) INTO saltout;
END WHILE;
RETURN saltout;
END//
delimiter ;
Резервное копирование баз данных перед передачей пользовательской информации.
В базе данных vbulletin имеется вся информация, используемая при настройке и тестировании, поэтому пустые три таблицы, которые мы будем обновлять.
TRUNCATE `vbulletin`.`user`;
TRUNCATE `vbulletin`.`userfield`;
TRUNCATE `vbulletin`.`usertextfield`;
Измените следующие запросы, чтобы использовать существующую базу данных, и это в смежных областях.
Заполните основную таблицу пользователя.
Соль генерируется через сохраненную функцию для каждой строки в существующей пользовательской таблице.
хэшированный пароль из существующей базы данных хешируются с солью, когда она вставлена в базу данных VBulletin, как это:
MD5(current_hashed_password + new_salt)
Основного запрос:
INSERT INTO `vbulletin`.`user` (
`userid`, `username`, `salt`, `password`, `email`, `passworddate`, `styleid`, `showvbcode`, `joindate`, `lastvisit`, `lastactivity`, `reputationlevelid`, `timezoneoffset`, `usergroupid`, `usertitle`
)
SELECT
`current_userid`, `current_username`, vbulletin.randomSalt() as new_salt, MD5(current_hashed_password + new_salt), `current_email`, CURDATE(), 5, 2, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), 5, 0, vbulletin.groupId(current_type), vbulletin.userTitle(current_type)
from `current_database`.`user`;
Следующие запросы добавить по умолчанию записи для каждого пользователя.
Если вы добавили настраиваемые поля профиля, вы хотите, чтобы передать эту информацию в userfield таблице:
INSERT INTO `vbulletin`.`userfield` (
`userid`, `field5`, `field6`
)
SELECT
`current_userid`, `firstname`, `lastname`
from `current_database`.`user`;
INSERT INTO `vbulletin`.`usertextfield` (
`userid`
)
SELECT `current_userid`
from `current_database`.`user`;
Установите уровень репутации для администратора пользователей группы:
UPDATE `vbulletin`.`user` SET `reputationlevelid` = 1 WHERE `usergroupid` = 6;
Удалить сохраненные функции, они не будут использоваться снова:
DROP FUNCTION vbulletin.userTitle;
DROP FUNCTION vbulletin.groupId;
DROP FUNCTION vbulletin.randomSalt;
Из-за необычайно слабой схемы хэширования страниц, используемой vbulletin и другими дырами в нем, я думаю, вы должны предположить, что все эти пароли были скомпрометированы и заставили всех пользователей обновить свои пароли. Учитывая, насколько плохи были, казалось бы, прайсы, вы, возможно, захотите перейти на форум, написанный людьми, которые знают и заботятся намного больше о безопасности. См. [vBulletin взломает опасения о серьезных интернет-атаках в течение 0 дней | Ars Technica] (http://arstechnica.com/security/2015/11/vbulletin-password-hack-fuels-fears-of-serious-internet-wide-0-day-attacks/) – nealmcb