Cum să acordați permisiuni de acces la distanță la serverul mysql pentru utilizator? (Programare, Mysql, Conexiune, Grant)

Aufwind a intrebat.

Dacă fac SHOW GRANTS în baza mea de date mysql obțin

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Dacă nu mă înșel, [email protected] înseamnă că utilizatorul root poate accesa serverul doar de la localhost. Cum îi pot spune lui MySQL să acorde root permisiunea de a accesa acest server mysql și de pe orice altă mașină (din aceeași rețea)?

Comentarii

  • Schimbare simplă localhost la % va acorda acces root la rețeaua publică. Nu uitați să flush privileges; – user972946
  • Adăugarea [email protected]% vă expune la multe riscuri și nu ar trebui să fie făcută. Știu că este o postare veche, dar acest avertisment ar trebui să fie aici. Contul root este primul cont vizat de atacatori, iar [email protected]’%’ înseamnă că utilizatorul root se poate conecta la contul dvs. MySQL de oriunde dorește. Sunt prea multe de acoperit în comentarii, dar ar trebui să încercați să eliminați cât mai mulți [email protected]’%’, iar cei care sunt declarați la acest nivel ar trebui să aibă privilegii foarte limitate. Indiferent de situație, cu siguranță nu ar trebui să adăugați [email protected]’%’, iar aplicațiile dvs. nu ar trebui să se aștepte ca acest cont să fie prezent. –  > Por Damon.
  • A se vedea, de asemenea, Enable remote MySQL connection –  > Por utilizator.
  • Hei, oameni buni, ar trebui să eliminați șirul PASSWORD din această comandă … provoacă o eroare … terminați cu IDENTIFIED BY și apoi cu parola propriu-zisă. –  > Por Mário de Sá Vera.
11 răspunsuri
Michael Berkowski

Acest lucru acordă acces root cu aceeași parolă de pe orice mașină din *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Dacă rezolvarea numelui nu va funcționa, puteți acorda, de asemenea, acces prin IP sau subnet:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%'
    IDENTIFIED BY 'some_characters'  
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

MySQL GRANT syntax docs.

Comentarii

    15

  • Presupun că ...TO 'root'@'%' IDENTIFIED... ar acorda acces de peste tot? –  > Por Aufwind.
  • Am executat comanda în mysql, dar SHOW GRANTS tot arată același lucru (ca în întrebarea mea). Am făcut chiar și FLUSH PRIVILGES. Este ceva ce mi-a scăpat? –  > Por Aufwind.
  • @Aufwind Nu m-aș aștepta să ai nevoie de altceva în afară de FLUSH PRIVILEGES. Ieșiți și intrați din nou, reporniți serviciul mysqld dacă aveți acces. De asemenea, asigurați-vă că skip networking nu este activată în fișierul dvs. my.cnf deși asta nu ar explica SHOW GRANTS să nu fie la fel. –  > Por Michael Berkowski.
  • @Aufwind Dacă nu reușești să faci asta, ar putea fi nevoie să întrebi la ServerFault.com. –  > Por Michael Berkowski.
  • Rețineți că IDENTIFIED BY PASSWORD este însoțit de un număr hexazecimal de 41 de cifre. Utilizați IDENTIFIED BY 'password' dacă doriți să includeți direct parola. –  > Por Rainulf.
moshe beeri

Încercați:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;

Comentarii

  • umm ce este Pa55w0rd pare o prostie, nu-mi spune că asta e parola pe care vrei să o faci. Pentru toți cei care încearcă să se conecteze la mysql-ul tău? –  > Por SSpoke.
  • 23

  • Este doar folosit în mod obișnuit pentru a da un suport pentru parolă, spunând „puneți parola bună de citit în acest loc”. –  > Por moshe beeri.
  • Această comandă cu avertismentul obișnuit că ați dori să o utilizați numai pentru aplicații în care securitatea nu este o preocupare, de exemplu, dev sau QA. –  > Por einnocent.
  • dacă nu funcționează pe mac, încercați să schimbați ‘root’@’%’ cu ‘root’@’localhost’ sau cu numele /etc/hosts al computerului căruia îi acordați privilegii. –  > Por moshe beeri.
  • Nu uitați să rulați acest lucru după: FLUSH PRIVILEGES; –  > Por dane.
Khashayar

Trebuie să luați câteva măsuri pentru a vă asigura că mai întâi mysql și apoi utilizatorul root este accesibil din exterior:

  1. Dezactivați skip-networking în my.cnf (de ex: /etc/mysql/my.cnf)

  2. Verificați valoarea lui bind-address în my.cnf, dacă aceasta este setată la 127.0.0.1, o puteți schimba la 0.0.0.0 pentru a permite accesul de la toate IP-urile sau de la orice ip de la care doriți să vă conectați.

  3. Acordă acces de la distanță utilizatorului root de la orice ip (sau specificați ip-ul dvs. în loc de %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
    
  4. Reporniți serviciul mysql:

    sudo service mysql restart
    

Comentarii

  • De asemenea, trebuie să deschideți portul mysql 3306 din firewall, altfel clienții de la distanță nu se vor conecta –  > Por David Okwii.
  • Doar o scurtă observație la punctul 2 de la @Khashayar: 0.0.0.0.0 înseamnă orice adresă IPv4. * înseamnă ORICE adresă, fie că este IPv4 sau IPv6. –  > Por Gustavo Pinsard.
Wasim A.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE puteți restricționa utilizatorul la o anumită bază de date și la o anumită tabelă.

'root'@'%' puteți schimba root cu orice utilizator pe care l-ați creat, iar % este pentru a permite toate IP-urile. Poți să restricționezi și prin schimbarea %.168.1.1.1 etc.


Dacă nu se rezolvă, atunci modificați și my.cnf sau my.ini și comentați aceste linii

bind-address = 127.0.0.1 la #bind-address = 127.0.0.1
și
skip-networking la #skip-networking

  • Reporniți MySQL și repetați din nou pașii de mai sus.

Raspberry Pi, am găsit configurația bind-address sub etcmysqlmariadb.conf.d50-server.cnf

Comentarii

  • Singurul răspuns care explică *.* și 'user'@'address' parte. Mulțumesc! 🙂 –  > Por Philipp.
  • Acordarea de ALL pe . invită hackerii să intre. –  > Por Rick James.
  • de aceea am explicat *.* –  > Por Wasim A..
user17121212

Acele granturi SQL pe care ceilalți le împărtășesc funcționează. Dacă tot nu puteți accesa baza de date, este posibil să aveți doar o restricție de firewall pentru port. Depinde de tipul de server (și de orice router între ele) cum să deschizi conexiunea. Deschideți portul TCP 3306 la intrare și dați-i o regulă de acces similară pentru mașinile externe (all/subnet/single IP/etc.).

Mehdi Golzadeh

Prin mysql 8 și versiunile ulterioare, nu puteți adăuga un utilizator prin acordarea de privilegii. înseamnă cu această interogare:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql va returna această eroare:

EROARE 1064 (42000): Aveți o eroare în sintaxa SQL; consultați manualul care corespunde versiunii serverului MySQL pentru a afla sintaxa corectă de utilizat în apropierea lui ‘IDENTIFIED BY ‘written password’ la linia 1

aceasta înseamnă că nu aveți un utilizator root pentru domeniul %. deci trebuie mai întâi să introduceți utilizatorul și apoi să acordați privilegii, astfel:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

Nu uitați să înlocuiți parolele cu parolele dvs. specifice.

Comentarii

  • Se aruncă o eroare: EROARE 1396 (HY000): Operațiunea CREATE USER a eșuat pentru ‘root’@’%’ –  > Por Pachet.JSON.
studio1057

Doi pași:

  1. configurați un utilizator cu wildcard:
    create user 'root'@'%' identified by 'some_characters';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
    IDENTIFIED BY PASSWORD 'some_characters'
    WITH GRANT OPTION

  2. vim /etc/my.cnf
    adăugați următoarele:
    bind-address=0.0.0.0

reporniți serverul, nu ar trebui să aveți nicio problemă în a vă conecta la el.

Comentarii

  • Urmărind, primesc „ERROR 1827 (HY000): Hash-ul parolei nu are formatul așteptat. Verificați dacă se utilizează algoritmul corect al parolei cu ajutorul funcției PASSWORD().” Puteți să-mi explicați ce am greșit aici? –  > Por lampShadesDrifter.
Vik2696

Deschideți fișierul /etc/mysql/mysql.conf.d/mysqld.cnf și comentați următoarea linie:

#bind-address = 127.0.0.1

Comentarii

  • Funcționează pe Ubuntu 19.4 –  > Por Ngô Văn Thao.
Kushal

În cazul meu, încercam să mă conectez la un server mysql la distanță pe cent OS. După ce am trecut printr-o mulțime de soluții (acordarea tuturor privilegiilor, eliminarea legăturilor ip,activarea rețelei) problema tot nu se rezolva.

După cum s-a dovedit, în timp ce căutam diverse soluții,am dat peste iptables, care m-a făcut să realizez că portul mysql 3306 nu accepta conexiuni.

Iată o mică notă despre cum am verificat și rezolvat această problemă.

  • Verificarea dacă portul acceptă conexiuni:
telnet (mysql server ip) [portNo]

-Adăugarea unei reguli de tabel ip pentru a permite conexiuni pe port:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

-Nu aș recomanda acest lucru pentru un mediu de producție, dar dacă iptables nu este configurat corect, este posibil ca adăugarea regulilor să nu rezolve problema. În acest caz, ar trebui să se facă următoarele:

service iptables stop

Sper că acest lucru vă ajută.

user456814

icemanzzz

Acest lucru a funcționat pentru mine. Dar a existat o problemă ciudată pe care chiar am încercat mai întâi cele pe care nu le-a afectat. Am actualizat pagina phpmyadmin și am reușit cumva să funcționeze.

Dacă aveți nevoie de acces la local-xampp-mysql. Puteți merge la xampp-shell -> deschiderea promptului de comandă.

Apoi mysql -uroot -p –port=3306 sau mysql -uroot -p (dacă există o parolă setată). După aceea, puteți acorda aceste accese din pagina mysql shell (poate funcționa și de la localhost/phpmyadmin).

Doar adăugând acestea în cazul în care cineva găsește acest subiect și are probleme de începător.

Peter Prographo

Ubuntu 18.04

Instalați și asigurați-vă că mysqld us rulează..

Mergeți în baza de date și configurați utilizatorul root:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Editați permisiunile mysqld și reporniți:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

De pe o altă mașină, testați.. Obvs portul (3306) de pe mașina mysqld trebuie să permită conexiunea de pe mașina de test.

mysql -u root -p -h 123.456.789.666

Toată „securitatea” suplimentară a MySql nu ajută deloc la securitate, ci doar complică și ofuscă, acum este de fapt mai ușor să o dai în bară decât în vremurile vechi, când foloseai doar o parolă foarte lungă.