TMySQL - na 4.1.10

0

Mam program w delphi który korzysta z komponentu TmySQL i wykorzystuje biblioteke libmySQL.dll. Program testowałem u siebie na MySQL wersji 4.0.25 , teraz mam problem jak przenioslem baze na wersje 4.1.10. Pojawia sie bład podczas łączzenia : "Client does not support authentication protocol requested by server; consider upgrading MySQL client"

Czy da rade jakoś to naprawić? bo zmiana komponentu na inny by mnie kosztowąła sporo pracy :(

w TmySQL.pas jest cos takiego:

const
  PROTOCOL_VERSION = 10;
  MYSQL_SERVER_VERSION = '3.23.49';
  MYSQL_SERVER_SUFFIX = '';
  FRM_VER = 6;
  MYSQL_VERSION_ID = 32349;
  MYSQL_PORT = 3306;
  MYSQL_UNIX_ADDR = '/tmp/mysql.sock';

Może zmienic po prostu protokuł? tylko na jaki?</delphi>

0

mhm ciekawe jak rozwiązać ten problem. Może google? - nie, za dużo roboty, może w dokumentacji mySQLa? - e też nie. Wiem :d zapytam na forum.

TU masz wyniki z google
a TU masz link do manuala

Co z tym zrobisz Twoja sprawa

0

siedze juz 6 godzin nad tym problemem i nie mam rozwiazania :/ wiem czego dotyczy blad dlatego też nie interesują mnie stronki typu manual itp. Mam konkretna rzecz do rozwiazania - upgredować TmySQL -> a dokladniej libMySQL.DLL. Tylko że jakoś nie widze najnowszej wersji tego, wszedzie są te co maja po 233kb a jak wezme z katalogu Delphi\Lib (ma 1MB ) to pojawia sie Access violation

0
shivanwk napisał(a)

siedze juz 6 godzin nad tym problemem i nie mam rozwiazania :/ wiem czego dotyczy blad dlatego też nie interesują mnie stronki typu manual itp. Mam konkretna rzecz do rozwiazania - upgredować TmySQL -> a dokladniej libMySQL.DLL. Tylko że jakoś nie widze najnowszej wersji tego, wszedzie są te co maja po 233kb a jak wezme z katalogu Delphi\Lib (ma 1MB ) to pojawia sie Access violation

a jakbyś manuala przeczytał to byś sobie oszczędził tych 6 godzin, no ale twoja sprawa co robisz ze swoim czasem.

To solve this problem, you should use one of the following approaches:

*Upgrade all client programs to use a 4.1.1 or newer client library.

*When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.

*Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function:

więcej w manualu

0

Nie zabardzo mam dostęp do zarzadzania MYSQLem,
ale ustawiłem old_password=ON na serverze.

Nie mam dostępu do tabeli mysql.user
Ustawienia userów mam tylko poprzez strone administratora a tam jest tlyko name,haslo i uprawnienia

czy da rade zalogować się poprzez TmySQLa kodujac od razu haslo ?

0

Boże, człowieku, czy Ty naprawdę nie możesz zerknąć do helpa? Zajrzyj i dopiero wtedy pytaj. A jak Cię nie stać na słownik, to się zrzucimy. Rozumiem raz, dwa, nawet pięć, ale które to już Twoje takie pytanie?

0

Jeżeli NIE moge zrobić przez ograniczenia jakie są na serverze:

  1. SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

2)UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') WHERE Host = 'some_host' AND User = 'some_user';

FLUSH PRIVILEGES;

3)SELECT Host, User, Password FROM mysql.user WHERE LENGTH(Password) > 16;

I łącze się przez TmySQL poprzez :
mysql_connect(@mysql,'123.123.123.123' ,'program','aaaa');
mysql_select_db(@mysql,'table_bbb');

Oraz pomimo ustawienia OLD_PASSWORD na serverze nadal jest ten sam błąd.

To ja już sam nie wiem jak mogę się zalogować do tej bazy :|

0

Obawiam się że podzielam w pełni zdanie kolegów którzy odpisywali ci wcześniej ale powiem ci tak:

Spróbuj zrobić backup tej twojej bazy i zainstaluj mysql od początku.
Później napisz jakikolwiek program i spróbuj się połącyć z domyślną bazą test
używając nazwy użytkownika root , using password: NO....
Dam ci też dobrą radę - do administrowania MySQL-em używaj DBManager PRO... - świetne narzędzie i na dodatek darmowe
Przy okazji dodam że ja do łączenia się z tą bazą używam komponentów MyDAC i jest rewelacyjny - nie ort! z libmysql.dll - ale nie jest darmowy :/

0

Spróbuj zrobić backup tej twojej bazy i zainstaluj mysql od początku.

To jest server wykupiony - nie na moim kompie i dlateog mam ograniczone prawa szczególnie do tablicy mysql.user!!!

Dam ci też dobrą radę - do administrowania MySQL-em używaj DBManager PRO... - świetne narzędzie i na dodatek darmowe

Do administracji używam MySQL-Front i na razie nie narzekam

Przy okazji dodam że ja do łączenia się z tą bazą używam komponentów MyDAC i jest rewelacyjny - nie kożysta z libmysql.dll - ale nie jest darmowy

Muszę miec darmowy komponent do użytku komercyjnego lub komponent zawierajacy sie w delphi 7 ent. Zresztą wolałbym juz nie zmieniać komponentu - zależy mi bardziej na rozwiązaniu poroblemu z tym kodowaniem hasla w nowszych wersjach serverów mysql (>4.1)

Zainstalowalem do testów u siebie MySQLa 4.1.11 i tam jest libMySQL.dll (1.02MB) ale z ta biblioteka mySQL.pas powoduje blad przy polaczeniu - access violation

Pytanie które pozostaje to przy pomocy jakiego komponentu (najlepiej z jakiegoś z delphi 7 ent) moge polaczyc sie z baza nowsza 4.1 gdzie wystepuje hashowanie hasel? Lub jak upgredować Tmysqlp.pas ?

Czy można do TMySQL dodać recznie hashowanie hasla by potem pasowało do wersji powyzej 4.1 mysqla ?

znalalzem cos takiego :

procedure hashPassword(pass:pchar; var res0,res1:longint);
var nr,add,nr2,tmp:int64;
    i:longint;
    e1:int64;
    len:longint;
begin
     nr:=1345345333;
     add:=7;
     nr2:=$12345671;
     len:=length(pass)-1;
     for i:=0 to len do
     begin
          if (Pass[i] = #20) or (Pass[i] = #9)then
             continue;
          tmp := $ff AND byte(Pass[i]);
          e1:=(((nr and 63) +add)*tmp)+(nr shl 8);
          nr:=nr xor e1;
          nr2:=nr2+((nr2 shl 8) xor nr);
          add :=add+tmp;
     end;
     res0 := nr AND $7fffffff;
     res1 := nr2 AND $7fffffff;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1