Permiteți toate conexiunile de la distanță, MySQL (Programare, Mysql)

stephen.hanson a intrebat.
a intrebat.

Am folosit SQL Server și acum folosesc MySQL pentru un proiect. Cu SQL Server, dezvoltatorii noștri se pot conecta la baza de date de la distanță de pe mașinile lor locale dacă cunosc gazda, numele de utilizator, parola. Cu MySQL, însă, pentru a oferi unui dezvoltator acces de pe mașinile lor locale, a trebuit să mă conectez la MySQL și să execut:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
flush privileges;

Unde address este adresa IP a mașinii dezvoltatorului. Bineînțeles, dacă aceștia schimbă rețelele, trebuie să o execut din nou. Există o modalitate de a permite toate conexiunile de la distanță, așa cum am experimentat cu SQL Server, sau este aceasta o idee proastă din anumite motive? Avem nume de utilizator și parolă încă… Evident, sunt puțin confuz.

De asemenea: aceasta este o bază de date de dezvoltare și este accesibilă numai din rețeaua noastră internă. Înțeleg de ce este o idee proastă să dai tuturor acces la o bază de date de producție.

7 răspunsuri
Icarus

După cum a subliniat Ryan mai sus, comanda de care aveți nevoie este

GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Cu toate acestea, rețineți că documentația indică faptul că, pentru ca acest lucru să funcționeze, un alt cont de utilizator de la localhost trebuie să fie creat pentru același utilizator; în caz contrar, contul anonim creat automat de către mysql_install_db are prioritate, deoarece are o coloană de gazdă mai specifică.

Cu alte cuvinte, pentru ca utilizatorul user să se poată conecta de pe orice server; trebuie create 2 conturi după cum urmează:

GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'password'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Citiți documentația completă aici.

Și aici este piesa relevantă pentru referință:

După ce vă conectați la server ca root, puteți adăuga conturi noi. Următoarele declarații folosesc GRANT pentru a configura patru conturi noi:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'admin'@'localhost';
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> CREATE USER 'dummy'@'localhost';

Conturile create de aceste declarații au următoarele proprietăți:

Două dintre conturi au un nume de utilizator monty și o parolă some_pass. Ambele conturi sunt conturi de superutilizator cu privilegii complete pentru a face orice. Contul ‘monty’@’localhost’ poate fi utilizat numai atunci când se conectează de pe gazda locală. Contul „monty’@’%” utilizează jokerul „%” pentru partea de gazdă, astfel încât poate fi utilizat pentru a se conecta de la orice gazdă.

Este necesar să aveți ambele conturi pentru ca monty să se poată conecta de oriunde ca monty.. Fără contul localhost, contul de utilizator anonim pentru localhost, creat de mysql_install_db, ar avea prioritate atunci când monty se conectează de pe gazda locală. Ca urmare, monty ar fi tratat ca un utilizator anonim. Motivul este că contul de utilizator anonim are o valoare mai specifică a coloanei Host decât contul „monty’@’%” și, prin urmare, apare mai devreme în ordinea de sortare a tabelului de utilizatori. (sortarea tabelului de utilizatori este discutată în secțiunea 6.2.4, „Controlul accesului, etapa 1: Verificarea conexiunii”).

David Tinker

Puteți dezactiva toate măsurile de securitate prin editarea fișierului /etc/my.cnf:

[mysqld]
skip-grant-tables

Comentarii

  • [mysqld] skip-grant-tables –  > Por Bảo Nam.
Ryan
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'password'; 

Va permite unui anumit utilizator să se conecteze de oriunde.

Este rău pentru că elimină un anumit control de securitate, de exemplu, dacă un cont este compromis.

Comentarii

  • Încă un lucru pe care a trebuit să îl schimb a fost interfața TCP bind. Deoarece trebuia să mă conectez la o instanță mysql găzduită în cloud, am schimbat „bind-address=0.0.0.0.0” în /etc/mysql/my.cnf, implicit este 127.0.0.1, unde mysql ascultă doar pe interfața locală loopback și nu primește apeluri din rețelele exterioare. –  > Por Abhijeet Apsunde.
  • M-am luptat să aflu cum să mă conectez de oriunde și aceste soluții m-au ajutat să rezolv această problemă inițială. Multe mulțumiri, dar m-am lovit de o altă problemă. Am încercat să schimb numărul portului de la 80 la 8080. Acum, când folosesc nume de server:8080/mysite acesta revine rapid la nume_serviciu/mysite dă o eroare 404 – file or directory not found. Cum pot face să funcționeze cu portul 8080? Bună treabă –  > Por Kenny.
  • @Kenny, creați o nouă întrebare –  > Por Nathan Basanese.
Pugazendhi Asaimuthu

Instalați și configurați mysql pentru a vă conecta de oriunde de la distanță NU FUNCȚIONEAZĂ CU mysql_secure_installation ! (https://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html)

Pe Ubuntu, instalați mysql folosind:

sudo apt-get install mysql-server

Aveți doar cele de mai jos în /etc/mysql/my.cnf

[mysqld]
#### Unix socket settings (making localhost work)
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock

#### TCP Socket settings (making all remote logins work)
port            = 3306
bind-address = 0.0.0.0

Autentificați-vă în BD de pe server folosind

mysql -u root -p

Creați utilizatorul DB folosind instrucțiunea de mai jos

grant all privileges on *.* to ‘username’@‘%’ identified by ‘password’;

Deschideți firewall-ul:

sudo ufw allow 3306

Reporniți mysql

sudo service mysql restart

Comentarii

  • dacă se întâmplă ceva, grant all privileges on *.* to 'username'@'%' identified by 'password';… dar oricum nu funcționează…  > Por Amit Kohli.
Anıl Özselgin

De asemenea, trebuie să dezactivați linia de mai jos în fișierul de configurare:bind-address = 127.0.0.0.1

Mike M
mysql> CREATE USER 'monty'@'192.168.%.%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'192.168.%.%'

Gregory Santana

Mabey aveți nevoie doar de:

Pasul 1:

grant all privileges on *.* to 'user'@'IP' identified by 'password';

sau

grant all privileges on *.* to 'user'@'%' identified by 'password';

Pasul doi:

sudo ufw allow 3306

Pasul trei:

sudo service mysql restart

Tags: