Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z połączeniem z bazą danych., mysqlnd cannot connect to MySQL 4.1+ using old authentication
Doolar
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.03.2011

Ostrzeżenie: (0%)
-----


Witam,
Na początek kawałek prostego kodu, w ramach testów połączenia z baza tylko, bo tutaj są problemy:
  1. mysql_connect('sql.xxx.nazwa.pl:3306','yyy','zzz');
  2. @mysql_select_db('yyy') or die("DATABASE NOT FOUND");


Wywala mi błąd typu:
  1. Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected in htdocs/123.php on line 2
  2.  
  3. Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication in /htdocs/123.php on line 2
  4.  
  5. DATABASE NOT FOUND


Wersja klienta MySQL: 5.0.90

Problem wygląda następująco:
Kod ten na lokalnym serwerze typu wamp/xampp działa ok (oczywiście inny adres bazy)
Wrzucony na serwer z obsługa PHP też działa prawidłowo.
problem powstaje gdy kod ten podeślę znajomemu który wrzuca to na serwer oparty na linuxie.
Wywala ten błąd.
Czytał iż może być to problem z wersją MySQL i starym hashowaniem.
Jednak skoro nie działa tylko u niego problem tkwi raczej w jego serwerze,
Firewall etc całkowicie wyłączony, i to samo, choć to nie w tym problem raczej.

Ma ktos pomysł o co tu chodzi?
Go to the top of the page
+Quote Post
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


z tresci bledu wnioskuje, ze haslo, user lub cos innego jest za krotkie, niz jest to oczekiwane, chociaz nigdy nie mialem takiego problemu wiec to tylo sugestia do sprawdzenia
Go to the top of the page
+Quote Post
Doolar
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.03.2011

Ostrzeżenie: (0%)
-----


Taj jak mówiłem wcześniej, na innym serwerze ten sam kod dział prawidłowo i nie ma tego problemu...
Więc jest tak że baza zostaje ta sama, przenosimy tylko ten plik na inny serwer i wtedy błąd się ujawnia.
Go to the top of the page
+Quote Post
Bags_Bunny
post
Post #4





Grupa: Zarejestrowani
Postów: 262
Pomógł: 39
Dołączył: 12.04.2004

Ostrzeżenie: (0%)
-----


Która wersja PHP i rozszerzenia MySQL (mysqlnd)?


--------------------
rm -rf /*
Go to the top of the page
+Quote Post
Doolar
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.03.2011

Ostrzeżenie: (0%)
-----


Informacje mojego serwera (prosto phpmyadmin):
PHP - 5.2
Wersja serwera: 5.0.91-log
Wersja klienta MySQL: 5.0.90

Info od znajomego któremu to nie działa:
PHP - 5.3.5
MySQL - 5.5.8

Pracujemy na tym samym serwerze MySQL, tylko różnych serwerach PHP, tak jak wspominałem jego serwer jest pod linuxem, może to ma wpływ na błąd...
Go to the top of the page
+Quote Post
pmir13
post
Post #6





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


Błąd taki pojawia się gdy php w wersji 5.3 lub nowszej próbuje połączyć się z bazą, w której hasła zapisywane są w starym formacie.
Mysql w wersjach starszych niż 4.1 używał pól o długości 16 bajtów do zapisywania zakodowanych haseł. Wersja 4.1 wprowadziła 41-bajtowe pola. Sam fakt, że baza jest teraz w wersji wyższej nie oznacza że tabela user w bazie mysql jest w nowym formacie.

http://dev.mysql.com/doc/refman/5.5/en/mysql-upgrade.html

Ewentualnie można też spróbować downgrade php do wersji poniżej 5.3, ale tego bym nie polecał.
Go to the top of the page
+Quote Post
Doolar
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 1.03.2011

Ostrzeżenie: (0%)
-----


OK. problem faktycznie tkwi w tym że mimo nowszej wersji MySQL hash jest 16 bajtowy. W wersji php poniżej 5.3 jest ok.
old_password jest włączone i niestety nie mam możliwości czegokolwiek tutaj ruszyć raczej.

Zostaje więc downgrade PHP? Czy da jakoś to obejść?
Go to the top of the page
+Quote Post
pmir13
post
Post #8





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


Najlepszym rozwiązaniem jest naprawdę poprawienie bazy. Nie przypuszczam by był to jakiś mocno oblegany serwer, telefon nie przestawałby dzwonić od wkurzonych klientów, którym nie działają strony z php+mysql. Zostawianie bazy w 16-bajtowej wersji haseł to proszenie się o problemy na przyszłość. Nie bez powodu nowe wersje php nie obsługują starych haseł, wymuszając niejako upgrade mysql. Zawsze można jakoś dogadać się z adminem by to zrobił, włącznie z demonstracją przechwycenia haseł, co w starym formacie jest do zrobienia, by go przekonać że nie dba o bezpieczeństwo. Ten upgrade to nie jest jakaś wielka robota, wystarczy odpalić gotowy skrypt z mysql, do którego instrukcję masz we wcześniejszym linku, wywalić old_password z opcji startu, zrestartować i ponownie ustawić hasła.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 11:23