ďťż
 
 
   Połączenie się z MySQLem z innego komputera
 
 

Tematy

 
    
 

 

 

 

Połączenie się z MySQLem z innego komputera





diniox - 04-04-2008 16:30
W przypadku gdy Apache2 z PHP5 działają na tym samym serwerze wystarczy w PHP napisać:
<?php
try {
  $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
  echo 'dziala';
  $dbh = null;
} catch (PDOException $e) {
  echo 'nie dziala';
  die();
}
?> A co jeśli Apache2 z PHP5 są na innym serwerze niż serwer baz danych - MySQL5 (przykladowo przyklad.pl)? Analogiczny kod wyglada tak:
<?php
try {
  $dbh = new PDO('mysql:host=przyklad.pl;dbname=test', $user, $pass);
  echo 'dziala';
  $dbh = null;
} catch (PDOException $e) {
  echo 'nie dziala';
  die();
}
?> Ale przy standardowej konfiguracji nie działa (przechwytuje wyjątek z komunikatem SQLSTATE[HY000] [2003] Can't connect to MySQL server on przyklad.pl). Czy zle rozumiem DSN w PDO czy to kwestia skonfigurowania MySQL? Jeśli to drugie to jak to zrobić?



neptunek - 06-04-2008 18:57
A z poziomu powloki mozesz sie zalogowac do tego serwera MySQL (raczej nie)? - konfiguracja MySQL dopuszcza dostep z innego hosta niz localhost (tez raczej nie, wiec na MySQL dopuszczasz inne polaczenia i juz).



Yampress - 07-04-2008 13:02
iptables odblokowuje polączenia na port 3306?
zmieniłes w konfiguracji aby nie nasłuchiwał tylko na localhost ?



Stawi - 07-04-2008 19:14
Standardowo mysql5 slucha tylko na interfejsie LO. Przyjrzyj sie plikowi /etc/mysql/my.cnf i poszukaj czegos takiego jak "bind-address" i dopisz adres zewnetrzny. Nie wiem co robic jak masz dynamiczne - zapewne google wie ;)
W mysql4.x byla dyrektywa "skip-networking" czy cos takiego, trzeba bylo zaremowac.



diniox - 08-04-2008 18:33

Standardowo mysql5 slucha tylko na interfejsie LO. Przyjrzyj sie plikowi /etc/mysql/my.cnf i poszukaj czegos takiego jak "bind-address" i dopisz adres zewnetrzny. Dzięki to właśnie to :-)


Nie wiem co robic jak masz dynamiczne - zapewne google wie ;)
W mysql4.x byla dyrektywa "skip-networking" czy cos takiego, trzeba bylo zaremowac.
Eh, no właśnie o dynamicznym ip nie pomyślałem. Nie potrafię znaleźć rozwiązania. Gdzieś przeczytałem żeby zakomentować bind-addres = 127.0.0.1 ale nic nie pomaga. Drugie rozwiązanie czyli przypisanie ip 0.0.0.0 też nic nie daje. Może ktoś jednak na wiedzę jak to zrobić?



ShinnRa - 08-04-2008 19:21
Da się...
Po pierwsze: jeśli dynamiczne ip to no-ip lub dyndns...
Po drugie: dany user musi mieć prawo do łączenia się z innych hostów niż tylko localhost. Ja domyślnie tworzę nowego usera:
grant all privileges on baza.* to 'user'@'localhost' identified by 'haselko'; a aby miał dostęp z zewnątrz:
grant all privileges on baza.* to 'user'@'%' identified by 'haselko'; no i port 3306 na iptables otwarty tak jak powiedział Yampress.



diniox - 09-04-2008 09:14

Da się...
Po pierwsze: jeśli dynamiczne ip to no-ip lub dyndns...
Hmm ale tak serwer MySQL ma stały adres (i domenę). Natomiast Apache2 z PHP5 są na komputerze ze zmiennym IP. Potrzebny jest dydns?


Po drugie: dany user musi mieć prawo do łączenia się z innych hostów niż tylko localhost. Ja domyślnie tworzę nowego usera:
grant all privileges on baza.* to 'user'@'localhost' identified by 'haselko';
No tak ale celowo na początek łącze się przez roota czyli uprawnienia mam. Po za tym robie identycznie jak na localhoscie, na którym działa. Więc jeśli dobrze główkuję to uprawnienia nie mogą być złe.

no i port 3306 na iptables otwarty tak jak powiedział Yampress. Tak. IPtables specjalnie dla tego eksperymentu jest całkowicie sczyszczony.



ShinnRa - 09-04-2008 09:41

No tak ale celowo na początek łącze się przez roota czyli uprawnienia mam. Po za tym robie identycznie jak na localhoscie, na którym działa. Więc jeśli dobrze główkuję to uprawnienia nie mogą być złe. no tak ale ta część 'user'@'localhost' ogranicza możliwość łączenia się tylko z localhost. Jak dasz % wtedy dany user będzie sie mógł łączyć z dowolnego hosta.
A o ile ja dobrze pamiętam, to mysql domyślnie pozwala rootowi łączyć się tylko z localhost lub z hosta na którym jest zainstalowany... wejdź w konsolę (tam gdzie masz mysql'a zainstalowanego) i zobacz co Ci zwróci takie zapytanie:
SELECT user, host FROM mysql.user ORDER by user; mi daje taki wynik:
+------------+-----------+
| user        | host        |
+------------+-----------+
| dawid        | %          |
| db01_user | localhost |
| root          | localhost |
| root          | rei          |
+------------+-----------+
4 rows in set (0.00 sec) Czyli jedynie user dawid może się łączyć z zewnątrz. root z localhosta i z rei (tak sie nazywa komp gdzie jest zainstalowany mysql) a user db01_user tylko z localhosta....



diniox - 09-04-2008 18:51

no tak ale ta część 'user'@'localhost' ogranicza możliwość łączenia się tylko z localhost. Jak dasz % wtedy dany user będzie sie mógł łączyć z dowolnego hosta.
A o ile ja dobrze pamiętam, to mysql domyślnie pozwala rootowi łączyć się tylko z localhost lub z hosta na którym jest zainstalowany... wejdź w konsolę (tam gdzie masz mysql'a zainstalowanego) i zobacz co Ci zwróci takie zapytanie:
OK po zrobieniu takiego "dawida" wywala mi taki wyjątek:
SQLSTATE[42000] [1044] Access denied for user 'dawid'@'%' to database 'test' Czyli już jest bliżej ale dalej coś nie gra z uprawnieniami.

[ Dodano: 2008-04-09, 19:11 ]
OK i już doszedłem jak zrobić zeby było dobrze.
Dzięki bardzo za instrukcje.
Podsumowując:
1. z /etc/mysql/my.cnf zakomentować linijke z bind-address 127.0.0.1
2. w mysql dać grant all privileges on baza.* to 'user'@'%' identified by 'haslo';
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis