Я пытаюсь подключиться к серверу mysql в dreamhost из скрипта php, расположенного на сервере slicehost (две разные хостинговые компании). Мне нужно сделать это, чтобы я мог передавать новые данные на slicehost в dreamhost. Использование дампа не является опцией, потому что структуры таблиц различны, и мне нужно передать только небольшое подмножество данных (100-200 ежедневных записей). Проблема заключается в том, что я использую новый метод Хеширования пароля MySQL на slicehost и Dreamhost использует старый, так что я получаюМетод хэширования Mysql old vs new
$link = mysql_connect($mysqlHost, $mysqlUser, $mysqlPass, FALSE);
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication
Warning: mysql_query() [function.mysql-query]: Access denied for user 'nodari'@'localhost' (using password: NO)
факты:
- мне нужно продолжать использовать новый метод в Slicehost и я не могу использовать старую версию PHP/библиотека
- The база данных слишком велика, чтобы переносить ее каждый день с помощью сброса
- Даже если я сделал это, таблицы имеют разные структуры
- мне нужно скопировать только небольшую часть этого, в ежедневной основе (только изменения дня, 100-200 записей)
- Поскольку таблицы настолько различны, что мне нужно использовать PHP в качестве моста для нормализации данных
- Уже гугле его
- Уже говорил с обеих поддержки stafs
более очевидный вариант для меня было бы начать использовать новый MySQL Password Hashing метод в dreamhost, но они не изменят его, и я не буду поэтому я не могу сделать это сам.
Любая дикая идея?
По VolkerK:
предложение приемлемоmysql> SET SESSION old_passwords=0;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT @@global.old_passwords,@@session.old_passwords, Length(PASSWORD('abc'));
+------------------------+-------------------------+-------------------------+
| @@global.old_passwords | @@session.old_passwords | Length(PASSWORD('abc')) |
+------------------------+-------------------------+-------------------------+
| 1 | 0 | 41 |
+------------------------+-------------------------+-------------------------+
1 row in set (0.00 sec)
Очевидная вещь Теперь будет запустить MySQL> SET GLOBAL old_passwords = 0; Но мне нужно SUPER привилегию, чтобы сделать это, и они не будут давать мне это
если я выполнить запрос
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
Я получаю ошибку
ERROR 1044 (42000): Access denied for user 'nodari'@'67.205.0.0/255.255.192.0' to database 'mysql'
Я не корень .. .
Парень в поддержке dreamhost настаивает на том, что проблема в моем конце. Но он сказал, что выполнит любой запрос, который я ему скажу, поскольку это частный сервер. Итак, мне нужно сказать этому парню ТОЧНО, что нужно бежать. Так, говоря ему, чтобы запустить
SET SESSION old_passwords=0;
SET GLOBAL old_passwords=0;
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
grant all privileges on *.* to [email protected] identified by 'new password';
будет хорошим началом?
'SET SESSION old_passwords = 0 'должен быть достаточно, нет необходимости изменять глобальные настройки для этого однократный решения (в противном случае они могут просто перезапустить туздЫ без этой опции). Я тестировал его на локальном сервере 5.1.37. Чтобы подтвердить, что новый хэш действительно «новый», пусть парень поддержки выполнит запрос 'SELECT \' Host \ ', Length (\' PASSWORD \ ') FROM mysql.user WHERE \' User \ '= 'nodari''. Remeber: 41 хороший, 16 - старый = плохо ;-) – VolkerK
О, и я бы попробовал это без грантовой вещи сначала. Это не обязательно для вашей существующей учетной записи. Вероятно, это не повредит, но вводит новый вопрос: «Означает ли« по »те же правила, что и PASSWORD()?» Скорее всего, но вы никогда не знаете ;-) – VolkerK
это не одно время, мне нужно будет делать это каждый день в течение времени ... И я, как и в следующей перезагрузке, это свойство old_password вернется к укусить меня в попку –