Próbuję połączyć się z serwerem mysql na dreamhostu ze skryptu php znajdującego się na serwerze w slicehost (dwie różne firmy hostingowe). Muszę to zrobić, abym mógł przesłać nowe dane w slicehost do Dreamhosta. Używanie zrzutu nie jest opcją, ponieważ struktury tabel są różne i muszę tylko przesłać niewielki podzbiór danych (100-200 dziennych rekordów). Problem polega na tym, że używam nowej metody haszyszowania MySQL przy slicehost, i Dreamhost używa starego, więc ja dostaćMetoda hashowania hashla starego i nowego
$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)
fakty:
- muszę kontynuować za pomocą nowej metody w Slicehost i nie mogę używać starszej wersji PHP/bibliotekę
- The baza danych jest zbyt duża, aby przesłać ją codziennie ze zrzutem
- Nawet gdybym to zrobił, stoły mają różne struktury
- muszę skopiować tylko niewielki podzbiór tego, w codziennie (tylko zmiany w ciągu dnia, 100-200 Records)
- Od tabelach są tak różne, trzeba użyć php jako pomost do normalizacji danych
- już google go
- już rozmawiałem z obu stafs wsparcia
Im bardziej oczywista opcja dla mnie byłoby, aby rozpocząć korzystanie z nowego MySQL Password Hashing method na dreamhost, ale nie zmienią tego i nie jestem roo t, więc nie mogę tego zrobić sam.
Jakiś szalony pomysł?
Przez VolkerK sugestion:
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)
Oczywistą rzeczą teraz będzie prowadzony do mysql> SET GLOBAL old_passwords = 0; ale muszę SUPER przywilej, aby to zrobić, a oni wont mi go dać
gdybym uruchomić kwerendę
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
pojawia się błąd
ERROR 1044 (42000): Access denied for user 'nodari'@'67.205.0.0/255.255.192.0' to database 'mysql'
Nie jestem korzeń ..
Facet ze wsparcia dla dreamhostów twierdzi, że problem leży po mojej stronie. Ale powiedział, że uruchomi każde zapytanie, które mu powiem, ponieważ jest to prywatny serwer. Muszę powiedzieć temu facetowi, DOKŁADNIE, o co chodzi. Więc, powiedz mu, aby uruchomić
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';
byłby dobry początek?
'SET old_passwords session = 0' powinno wystarczyć, nie ma potrzeby, aby zmienić ustawienie globalne to rozwiązanie jednorazowe (w przeciwnym razie mogą one po prostu ponownie uruchomić mysqld bez tej opcji). Przetestowałem to na moim lokalnym serwerze 5.1.37. Aby potwierdzić, że nowy hash jest naprawdę "nowy", niech pomocnik uruchomi zapytanie 'SELECT \' Host \ ', Length (\' PASSWORD \ ') FROM mysql.user WHERE \' User \ '= 'nodari''. Pamiętaj: 41 jest dobre, 16 jest stare = złe ;-) – VolkerK
Aha, i spróbowałbym tego bez pierwszej pomocy. Nie powinno być konieczne dla istniejącego konta. Prawdopodobnie to też nie boli, ale wprowadza nowe pytanie: "Czy" identyfikowane przez "przestrzegaj dokładnie tych samych reguł co PASSWORD()?" Najprawdopodobniej, ale nigdy się nie dowiesz ;-) – VolkerK
to nie jest jednorazowa sprawa, będę musiał to robić codziennie w czasie ... I przypuszczam, że przy następnym restarcie to stare hasło powróci do ugryź mnie w tyłek –