PHP - ODBC - Távoli gépen MySQL elérése

PHP - ODBC - Távoli gépen MySQL elérése
2012-11-30T20:26:14+01:00
2012-12-10T17:48:10+01:00
2022-11-27T16:05:43+01:00
Mate12345
Sziasztok!
Van két gépem.
Az egyik IP-je 192.168.10.109 és fut rajta egy PHP-s webszerver, valamint egy PostgreSQL.

A PHP-s webszerver ODBC segítségével eléri a PostgreSQL-t, ami jó.

Fut a gépemen (192.168.10.107) egy MySQL szerver, amit a 10.109-es gépen lévő alábbi Python-script elér:

import pyodbc cnxn = pyodbc.connect('DRIVER=MySQL;SERVER=192.168.10.107;DATABASE=measures;UID=root;PWD=root') cursor = cnxn.cursor() cursor.execute("select * from measure") row = cursor.fetchone() if (row): print(row)


A PHP viszont nem. A következő függvénnyel akarok csatlakozni:

function connect($conn_string){ // A PHP ODBC-konnect parancsa nem képes értelmezni a stringben lévő felhasználónevet és jelszót. // Azokat előtte ki kell nyernem. // Példa egy ODBC-stringre: // "DRIVER=PostgreSQL;SERVER=localhost;DATABASE=capture;UID=root;PWD=root" $elements = split(";", $conn_string); $cstr=""; $username=""; $password=""; for ($i=0; $i<count($elements); $i++){ $ary = split("=", $elements[$i]); if ($ary[0] == "UID"){ $username = $ary[1]; } else if ($ary[0] == "PWD"){ $password = $ary[1]; } else { $cstr .= $elements[$i].';'; } } return odbc_connect($cstr, $username, $password); }

$dataDb=connect("DRIVER=MySQL;SERVER=192.168.10.107;DATABASE=measures;UID=root;PWD=root");

Erre a következő hibát kapom:
Warning: odbc_connect(): SQL error: [unixODBC][MySQL][ODBC 5.2(w) Driver]Access denied for user 'root'@'192.168.10.109' (using password: YES), SQL state S1000 in SQLConnect in /srv/http/ODBC.php on line 28

Ezt nem tudom értelmezni. Mit akar pl. a root@192.168.10.109-cel, amikor a 107-es géphez kellene csatlakoznia?

A legfurcsább az, hogy ugyan ezt a Python megeszi gond nélkül.

Van valami ötletetek?
Szép napot!
Mutasd a teljes hozzászólást!
A mysql úgy képzi a teljes felhasználónevet, hogy felhasznalónév@forás_gép_ip_címe_vagy_host_neve

Mivel a 109-es IP című gépről kapcsolódsz, ezért azt használja a felhasználónévben a mysql.

2 lehetőséged van:
1. felveszel egy 109-es IP című root felhasználót is a mysql szerverbe, vagy root@localhost-ból root@%-t (netán egy root@192.168.10.%-t) csinálsz és akkor egységes lesz a root felhasználó mindkét gép esetén.
Mutasd a teljes hozzászólást!

  • Köszönöm szépen. Így már értem, hogy miért nem csatlakozik a C++ programom se.
    Viszont a Python-script miért tud mégis csatlakozni?

    Hétfőn tudom kipróbálni a programot. Akkor lezárom a témát.

    Szép hétvégét és köszönöm a segítséget!
    Mutasd a teljes hozzászólást!
  • Nem ismerem se a pyton-t, se az abban lévő mysql driver-t.
    Mutasd a teljes hozzászólást!
  • Szia!

    Létrehoztam egy 'root'@'%' nevű felhasználót (ez az egyetlen, akinek a neve root), de így sem működik.

    A 109-es gépre telepítettem mysql-klienst. Úgy sikerül csatlakoznom az alábbi paranccsal:
    mysql --user=root --password=root -h 192.168.10.54 measures

    De a PHP még mindig ezt írja ki:
    Warning: odbc_connect(): SQL error: [unixODBC][MySQL][ODBC 5.2(w) Driver]Access denied for user 'root'@'192.168.10.109' (using password: YES), SQL state S1000 in SQLConnect in /srv/http/ODBC.php on line 30


    A csatlakozás az alábbi függvénnyel történik:
    odbc_connect("DRIVER=MySQL;SERVER=192.168.10.54;DATABASE=measures", "root", "root");

    Itt pedig a select host, user from mysql.user; eredménye:
    +-----------+------------------+ | host | user | +-----------+------------------+ | % | root | | localhost | debian-sys-maint | +-----------+------------------+
    Mutasd a teljes hozzászólást!
  • 1. Hogyan hoztad létre/módosítottad a mysql felhasználót? Közvetlenül insert/update sql utasítással a mysql táblában vagy a megfelelő create user/rename user/grant utasítással? ha az előbbivel, akkor kell egy flush privileges-t is kiadni, különben a módosításokat nem érzékeli a mysql újraindításig.

    2. A kérdéses root felhasználónak van joga a connection stringben megadott db-hez kapcsolódni?

    Részletes leírást az egyéb okokról itt találsz.
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen a segítséget.
    Az első válaszod volt a kulcs, de volt egy másik hiba is a programban, amiért nem csatlakozott.

    Szép napot!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd