Po

Konfiguracja serwerów, usług, itp.
diniox
Posty: 4
Rejestracja: 03 kwietnia 2008, 14:42

Połączenie się z MySQLem z innego komputera

Post autor: diniox »

W przypadku gdy Apache2 z PHP5 działają na tym samym serwerze wystarczy w PHP napisać:

Kod: Zaznacz cały

<?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:

Kod: Zaznacz cały

<?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
Posty: 57
Rejestracja: 28 grudnia 2007, 18:43

Post autor: neptunek »

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).
Awatar użytkownika
Yampress
Administrator
Posty: 6425
Rejestracja: 09 sierpnia 2007, 21:41
Lokalizacja: PL

Post autor: Yampress »

iptables odblokowuje polączenia na port 3306?
zmieniłes w konfiguracji aby nie nasłuchiwał tylko na localhost ?
Stawi
Beginner
Posty: 209
Rejestracja: 10 lutego 2007, 16:02
Lokalizacja: Kraków

Post autor: Stawi »

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
Posty: 4
Rejestracja: 03 kwietnia 2008, 14:42

Post autor: diniox »

Stawi pisze: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 :-)
Stawi pisze:Nie wiem co robic jak masz dynamiczne - zapewne google wie ]
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ć?
Awatar użytkownika
ShinnRa
Beginner
Posty: 457
Rejestracja: 05 marca 2007, 23:05
Lokalizacja: Gdynia

Post autor: ShinnRa »

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:

Kod: Zaznacz cały

grant all privileges on baza.* to 'user'@'localhost' identified by 'haselko';
a aby miał dostęp z zewnątrz:

Kod: Zaznacz cały

grant all privileges on baza.* to 'user'@'%' identified by 'haselko';
no i port 3306 na iptables otwarty tak jak powiedział Yampress.
diniox
Posty: 4
Rejestracja: 03 kwietnia 2008, 14:42

Post autor: diniox »

ShinnRa pisze: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?
ShinnRa pisze:Po drugie: dany user musi mieć prawo do łączenia się z innych hostów niż tylko localhost. Ja domyślnie tworzę nowego usera:

Kod: Zaznacz cały

grant all privileges on baza.* to 'user'@'localhost' identified by 'haselko'][/quote]
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.
[quote="ShinnRa"] no i port 3306 na iptables otwarty tak jak powiedział [b]Yampress[/b].[/quote]
Tak. IPtables specjalnie dla tego eksperymentu jest całkowicie sczyszczony.
Awatar użytkownika
ShinnRa
Beginner
Posty: 457
Rejestracja: 05 marca 2007, 23:05
Lokalizacja: Gdynia

Post autor: ShinnRa »

diniox pisze: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:

Kod: Zaznacz cały

SELECT user, host FROM mysql.user ORDER by user]
mi daje taki wynik:
[code]
+------------+-----------+
| 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
Posty: 4
Rejestracja: 03 kwietnia 2008, 14:42

Post autor: diniox »

ShinnRa pisze: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:

Kod: Zaznacz cały

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';
ODPOWIEDZ