Sziasztok!
Van egy Delphi-ben megírt progrtamunk, sajnos a forráskódja nincs meg, viszont sok adat van benne, amire szükség van. Egy Woody-n futó MySQL 5.5.33 szolgáltatja az adatbázisát.
Felhúztam egy CentOS 9-et 10.5.22-es MariaDB-vel (a szerveren a PHP verzió 8.0.30, de szerintem a programműködéséhez nincs köze), de a program nem tud kapcsolatot teremteni az új adatbázisszerverrel hitelesítési probléma miatt.
A program az alábbi ddl-eket használja:
php_bcompiler.dll (5.0.4.4 PHP része)
php_gd2.dll (5.0.4.4 PHP része)
php_mysql.dll (5.0.4.4 PHP része)
php_win32std.dll (5.0.5.5 PHP része)
php_winbinder.dll (üresek az infó mezői)
php5ts.dll (5.0.5.5 PHP része)
libmysql.dll (üresek az infó mezői)
freeimage.dll (üresek az infó mezői)
Szerintetek hogy lehetne életre kelteni? Köszönöm előre a segítséget!
[Cím módosÍtás] Jobban belemélyedtem és mikiderült, hogy ez egy PHC-Win-nel EXE-vé fordított PHP-ban írt program (PHP-Winbinder-rel), azért vannak ott ezek a DLL-ek.
- 1147 megtekintés
Hozzászólások
Szia, tippre ez megoldja: https://mariadb.com/kb/en/authentication-plugin-mysql_native_password/
- A hozzászóláshoz be kell jelentkezni
A felhasználó jelszavát a PHPMyAdmin-ban a "Natív MySQL hitelesítés"-t választva állítottam be.
Lefuttattam az alábbi lekérdezést: SELECT * FROM mysql.user;
Mysql alatt látom a titkosított jelszót (password mező).
MariaDB-ben szintén ugyanazt a karaktersorozatot látom, illetve ott látszik az authentication_string mező ugyanazzal az értékkel és a plugin mezőben pedig ott a mysql_native_password a felhasználó sorában.
- A hozzászóláshoz be kell jelentkezni
Első buta kérdés:
FLUSH PRIVILEGES;
volt ugye?
Mondjuk a phpmyadmin végrehajtja ezt egy ideje.
A második hogy a mysql/mariadb ugye host alapján authentikál:
tehát a bob@* nem ugyanaz a user mint a bob@<host>
Szóval érdemes megnézni, hogy az alkalmazás egyáltalán megkeresi-e a database-t (iptraf, tcpdump vagy szimplán a mysql logja).
Ha végképp nem megy:
mysqld_safe --skip-grant-tables
- A hozzászóláshoz be kell jelentkezni
FLUSH PRIVILEGES nem kell, ha a granttal adja a jogokat, az akkor kell, ha közvetlenül a mysql db-be piszkálod a user/passt, jogokat stb insert/update/delete-vel.
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy csak én dolgoztam fosszíliákkal, de MySQL 5.7-nél egyértelműen kell a flush privileges.
- A hozzászóláshoz be kell jelentkezni
Valamint van egy php-embed.ini állomány az alábbi tartalommal:
[PHP]
# Defaults from sapi/cli/php_cli.c
report_zend_debug= 0
display_errors= 1
register_argc_argv= 1
html_errors= 0
implicit_flush= 1
output_buffering= 0
max_execution_time= 0
;include_path =
extension_dir = ""
extension=php_winbinder.dll
extension=php_win32std.dll
extension=php_bcompiler.dll
extension=php_mysql.dll
extension=php_gd2.dll
Ezt találtam hozzá: https://github.com/RDashINC/embeder2
- A hozzászóláshoz be kell jelentkezni
Ha kiderült és módosítottad, hogy nem Delphi, hanem ez a Php 5.0, akkor próbálj ilyen Php verziót keresni hozzá. Ha sietni akarsz, keress olyan Debian verziót, ami alapból ugyanezt a Php verziót támogatja. Ha több időd van, akkor pedig forrásból fordítsál le hozzá mindent egy újabb verzión. Minél frissebb a Linux, annál nagyobb szívás lesz.
Én egy Vmben futtatnám Woody alapokon, ha már kell, fontos. (Ha igazán fontos lenne, ez meg sem történne.)
- A hozzászóláshoz be kell jelentkezni
Amint kiderítettem reggel óta PHP-ban írtak egy felületet, amiből csináltak egy Windows EXE-t, ami csatlakozik az adatbázishoz. A gond az, hogy most nem találok semmi decompiler-t, ami esetleg visszaadná a PHP kódot.
Abban igazad van, hogy ha fontos, akkor nem így kéne, sőt kellett volna ... (Iktató program)
2009-2013 között csinálta egy kolléga, aki már elment nyugdíjba ...
- A hozzászóláshoz be kell jelentkezni
A nyugdíjba ment az nem függvénye annak, hogy esetleg megvannak neki a forráskódok, vagy a fejlesztéshez használt dokumentáció. Ezeket el lehetne kérni. A fejlesztési dokumentáció alapján akár újra lehetne írni az egészet és optimálisabb lenne. A PHP kód szimpla frissítése naprakészre is nagy előrelépés lehetne, de inkább menekülnék ettől a megoldástól, hogy PHP-t Windows-os exe-re fordítgatni egy halott projekttel, amit néhány lelkes ember még fenntart GitHubon, de ott van nagy betűkkel, hogy nem vállal felelősséget, illetve ne haszáld éles környezetben.
Ha nem járható út, akkor marad a Docker, mert ez a Windbiner egy elég halott ötlet volt, nem is élt meg sok időt az eredeti.
"C" terv új iktató rendszerre migrálás. Egy kalkuláció után az is lehet jó megoldás.
- A hozzászóláshoz be kell jelentkezni
Attól, hogy nyugdíjba ment egy kolléga, a forrásnak a cégnél meg kéne lenni... Ha nincs meg, akkor majd a következő saját fejlesztéseknél erre is fognak gondolni, miután meglátják a DB-struktúra és adatok meg a felhasználók emlékezete alapján készült specifikáció alapján, külső fejlesztő által az újraírásra adott árajánlatot... Mert a vége mindenképp egy migrálás kell legyen új környezetre onnan, ami 1024 sebből vérzik... (érdemes megnézni, hogy a használt komponensekben mennyi nem javított hiba/luk van...)
Én egyébként megnézném, hogy van-e funkcionálisan megfelelő iktatórendszer, aminek van jól definiált ősfeltöltés/adat input lehetősége, és megpróbálnám egy ilyenbe migrálni az adatokat.
- A hozzászóláshoz be kell jelentkezni
Be tudsz másolni esetleg valami konkrétabb hibaüzenetet?
Illetve ami még megoldás szokott lenni hasonló esetben, hogyha a MySQL / MariaDB szerver konfigurációjában beállítod a default plugint ezzel a sorral ([mysqld] részben):
default-authentication-plugin=mysql_native_password
- A hozzászóláshoz be kell jelentkezni
Ez nem segített sajnos.
- A hozzászóláshoz be kell jelentkezni
Most nézem, hogy itt valami nem kerek. Az általad írt 5.2.22-es MariaDB verzió elméletileg nem is létezik. Nem írtál el valamit esetleg? Illetve mi a konkrét hibaüzenet, amit ad az app? Annak tudatában egyszerűbben tudnánk segíteni.
- A hozzászóláshoz be kell jelentkezni
A program csak annyit ír, hogy "hibás felhasználónév/jelszó".
- A hozzászóláshoz be kell jelentkezni
Hát akkor még az is könnyen lehet, hogy a kolléga bele hardcodeolt egy felhasználónév / jelszó párost az adatbázis csatlakozáshoz. Nyilván ha nem ilyen néven / jelszóval hoztál létre felhasználót az új DB-ben, akkor nem fog csatlakozni.
- A hozzászóláshoz be kell jelentkezni
Ilyen nincs. Több részletet nem írok le ezzel kapcsolatban, csak annyit, hogy a jogosultságkezelés adatbázis felhasználóval van megoldva, nincs jogosultságokat és felhasználókat tartalmazó tábla.
- A hozzászóláshoz be kell jelentkezni
Igen, én is az adatbázis felhasználóra gondoltam.
- A hozzászóláshoz be kell jelentkezni
RHEL9-ben MariaDB 10.5 és MySQL 8.0 van, 5.2-es nincs (amúgy ilyen mariadb amúgy se létezik).
- A hozzászóláshoz be kell jelentkezni
MariaDB 5.2 létezik, 5.2.22 nem, szerintem elirás és 5.5.22 akart lenni, viszont a MariaDB csak nativ passwördöt tud.
A MariaDB Server jelenleg nem támogatja sem a sha256_password, sem a caching_sha2_password hitelesítési bővítményt. További információért lásd az MDEV-9804 dokumentumot.
- gépi fordításban.
szerk:
A MySQL 5.6 hozzáadta a sha256_password hitelesítési bővítmény támogatását, a MySQL 8.0 pedig a caching_sha2_password hitelesítési bővítmény támogatását is.
- gépi fordításban.
szóval ez sem játszik szerintem mivel a MySQL is 5.5 -volt.
- A hozzászóláshoz be kell jelentkezni
A MariaDB 10.5.22-es verzió, amihez kapcsolódni kellene olyan cuccal, ami 5.5.33-as MySQL-hez tud authentikálni. Így, hogy végigolvastam a kommenteket, halott ötlet ... Marad a program újraírása, amíg ki nem fogyunk az régi ügyekből.
- A hozzászóláshoz be kell jelentkezni
Nem biztos hogy halott, csak a mysql 5.5.23 az 2013-as a MariaDB 10.5.22 meg 2023-as, lehet nem csípi a régi libmysql-t, ennyire távoli verziókat nem probáltam még össze.
Vagy a MariaDB-böl kéne az 5.5.x, vagy lehet próbálkozni a 10.5.22-es MariaDB dll-jével átnevezve libmysql.dll-nek és sürü miatyánkok közepette megpróbálkozni vele, reménykedve hogy nem változtattak az funkcióneveken/funkciókon (99% hogy de).
Illetve meglesném hogy mysql.users táblába van e a kérdéses felhasználóhoz bejegyzés ahol a host vagy '%' vagy a gép címe ahonnan csatlakozni akarsz.
Én Docker-el odottam meg egy viszonylag frissebb Linuxon a Mysql 5.5-öt futtatni. (Delphi 7, ZeosDB nem szereti nagyon a verzióváltást, 5.5-re váltás is körülményes volt, szerencsére a forrás megvolt)
- A hozzászóláshoz be kell jelentkezni
ez igy nekem megy:
$ mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 30307
Server version: 5.5.62 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Reading history-file /home/x/.mysql_history
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> \q
$ mysql -V
mysql Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
$ apt show mariadb-client
Package: mariadb-client
Version: 1:10.11.6-0+deb12u1
$ apt show libmariadb3
Package: libmariadb3
Version: 1:10.11.6-0+deb12u1
$ cat /etc/debian_version
12.5
ezek szerint mégis összepróbáltam egy frissebb MariaDB klienst (10.11.6) egy MySQL 5.5 szerverrel :), viszont fordítva még nem.
- A hozzászóláshoz be kell jelentkezni
Még amit megtehetsz, hogy a MariaDB szerver error log verbosity értékét felveszed a legmagasabbra és az error logban megnézed, hogy miért nem sikerül a kapcsolódás.
- A hozzászóláshoz be kell jelentkezni
nalam mar pattog a popcorn...
- A hozzászóláshoz be kell jelentkezni
:)
- A hozzászóláshoz be kell jelentkezni
windows dll/exe-ből resource extractot próbáltál?
- A hozzászóláshoz be kell jelentkezni
Csinálsz egy "régi fajta" kapcsolódást, a usernév/jelszavaddal . cli- ben is kipróbálhatod, nem kell webszerveren keresztöl. (/usr/bin/phpx.x kapcsolodás.php )
<?php
// Adatbázis kapcsolat beállításai
$servername = "localhost";
$username = "felhasználónév";
$password = "jelszó";
$dbname = "adatbázis_neve";
// Kapcsolat létrehozása
$conn = mysql_connect($servername, $username, $password);
// Kapcsolat ellenőrzése
if (!$conn) {
die("Kapcsolat sikertelen: " . mysql_error());
}
// Kapcsolat bezárása
mysql_close($conn);
?>
- A hozzászóláshoz be kell jelentkezni
Szisztok!
Most kísérlezetnék CentOS 9-ben docker-t telepítve egy MySQL-lel. Még dockerrrel nem foglalkoztam, így most keresek megfelő csomagot a dockerhub-on.
Ha 5.5-tel próbálkoznék, tudtok ajánlani megfelelőt? Illetve találtam mysql/mysql-server csomagot MySQL 5.7-essel. Ez még kompatibilis lehet az 5.5-tel?
- A hozzászóláshoz be kell jelentkezni
Ott az official image, az miért nem jó? https://hub.docker.com/layers/library/mysql/5.5/images/sha256-d404d78aa…
- A hozzászóláshoz be kell jelentkezni
Én a motivációt nem értem: ha nem frissíted az alkalmazást, akkor mitől lesz neked jobb, ha a DB újabb lesz? Ha meg frissíted az alkalmazást, akkor lehet a legújabbra ugrani és kész. Be az egészet VM-be és múkoggyon ameddig tud. Ha meg migrálás lesz, akkor nem kell foglalkozni vele többé. Tényleg nem értem.
- A hozzászóláshoz be kell jelentkezni