MySQL dodający użytkownika do zdalnego dostępu

148

Utworzyłem użytkownika user@'%'z password 'password. Ale nie mogę się połączyć z:

mysql_connect('localhost:3306', 'user', 'password');

Kiedy stworzyłem użytkownika user@'localhost', mogłem się połączyć. Czemu? Czy „%” nie oznacza od ŻADNEGO hosta?

user2333586
źródło
Zauważ, że hasło dla user @ localhost i user @% jest ogólnie różne, podobnie jak uprawnienia.
Jose Manuel Gomez Alvarez

Odpowiedzi:

377

Aby połączyć się zdalnie, musisz powiązać port MySQL 3306 z adresem IP twojego komputera w my.cnf. Następnie musisz utworzyć użytkownika zarówno w localhost, jak i na symbolu wieloznacznym „%” i przyznać uprawnienia do wszystkich DB jako takich . Zobacz poniżej:

my.cnf (my.ini w systemie Windows)

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

następnie

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

Następnie

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';
flush privileges;

W zależności od systemu operacyjnego może być konieczne otwarcie portu 3306, aby umożliwić połączenia zdalne.

apesa
źródło
1
Pomogło mi to w korzystaniu z prywatnej instancji MySQL WebFaction. Postępowałem zgodnie z krokami CREATE USER i GRANT ALL, ustawionymi mysql.default_port = <private instance port>w moim php.ini, a następnie użyłem 127.0.0.1przez cały czas mojej nazwy hosta db
spex
Bardzo przydatne. Tylko komentarz. my.cnf może zawierać inny plik konfiguracyjny, więc odpowiednia linia może znajdować się gdzie indziej. W my.cnf poszukaj linii zaczynającej się od! Include, jeśli adres-wiązania nie znajduje się w my.cnf, może znajdować się w tym dołączonym pliku.
tru7
Gdzie jest plik my.cnf?
Vladimir Despotovic
7
nie zapomnij o FLUSH PRIVILEGES;)
volkovmqx
4
Dlaczego zarówno localhost, jak i%?
noce
21

Postępuj zgodnie z instrukcjami (kroki od 1 do 3 nie są potrzebne w systemie Windows):

  1. Znajdź konfigurację mysql do edycji:

    /etc/mysql/my.cnf (MySql 5.5)

    /etc/mysql/conf.d/mysql.cnf (Mysql 5.6+)

  2. Znajdź bind-address=127.0.0.1w zmianie pliku konfiguracyjnego bind-address=0.0.0.0(możesz ustawić adres wiązania na jeden z interfejsów ips lub tak jak ja użyj 0.0.0.0)

  3. Uruchom ponownie usługę mysql uruchomioną na konsoli: service restart mysql

  4. Utwórz użytkownika z bezpiecznym hasłem do zdalnego połączenia. Aby to zrobić, uruchom następujące polecenie w mysql (jeśli jesteś użytkownikiem Linuksa, aby uzyskać dostęp do konsoli mysql mysqli jeśli ustawiłeś hasło dla uruchomienia root mysql -p):

    GRANT ALL PRIVILEGES 
     ON *.* TO 'remote'@'%' 
     IDENTIFIED BY 'safe_password' 
     WITH GRANT OPTION;`

Teraz powinieneś mieć użytkownika z nazwą useri hasłem safe_passwordz możliwością zdalnego połączenia.

MSS
źródło
2
zmień adres-wiązania = 0.0.0.0 ... to działało dla mnie. i nadaj przywileje
zwitterion
12

dla jakiej bazy danych jest użytkownik? spójrz na ten przykład

mysql> create database databasename;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on databasename.* to cmsuser@localhost identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

więc wracając do pytania, operator „%” oznacza wszystkie komputery w Twojej sieci.

jak pokazuje aspesa, jestem również pewien, że musisz utworzyć lub zaktualizować użytkownika. poszukaj wszystkich swoich użytkowników mysql:

SELECT user,password,host FROM user;

jak tylko skonfigurujesz użytkownika, powinieneś być w stanie połączyć się w ten sposób:

mysql -h localhost -u gmeier -p

mam nadzieję, że to pomoże

caramba
źródło
ogólnie dla wszystkich db. Chcę tylko się połączyć, a nie wybierać DB. codemysql_connect („localhost: 3306”, „użytkownik”, „hasło”); code
user2333586
jaki system operacyjny używasz, Windows, Linux?
apesa
okna. serwer wamp.
user2333586
Będziesz musiał upewnić się, że twój adres IP jest powiązany z portem 3306. W Windows możesz użyć netstat -n, aby zobaczyć, które porty są powiązane z twoim IP. Jeśli zobaczysz 127.0.0.1:3306, nie będziesz w stanie połączyć się z niczego innego niż localhost
apesa