Cauzele erorii de acces refuzat

Dacă încercați să vă conectați la serverul MySQL, vă confruntați cu o eroare de acces refuzat. Utilizați lista de mai jos. Acesta enumeră măsurile care pot fi luate pentru a rezolva această problemă:

Alergați după instalare MySQL script mysql_install_db pentru a seta conținutul inițiale ale tabelelor de grant? Dacă nu, o fac. Verificați privilegiile inițiale cu următoarea comandă:

Conectarea să se întâmple fără greș. Ar trebui, de asemenea, să se asigure că baza de date director MySQL a user.MYD fișier. De obicei, este în / var / mysql directorul PATH / user.MYD. în cazul în care PATH - calea către directorul de instalare rădăcină MySQL.

După o instalare nouă ar trebui să se conecteze la server și de a crea utilizatori și permisiuni stabilite pentru acestea:

Server permite conectarea, deoarece utilizator MySQL cu numele utilizatorului root are nici o parolă inițial. Dar acest lucru este, de asemenea, un risc de securitate, astfel încât atunci când crearea altor utilizatori MySQL, va, printre altele, ar trebui să stabilească o parolă pentru utilizatorul root. Dacă încercați să vă conectați ca root, vei primi următoarea eroare:

acest lucru înseamnă că utilizatorul nu este de intrare, cu o valoare a tabelului „rădăcină“ în coloana de utilizator și mysqld nu se poate determina numele gazdei pentru clientul tau. În acest caz, trebuie să reporniți serverul cu opțiunea --skip-grant-tabele și editați fișierul / etc / hosts sau \ windows \ gazde. adăugați o intrare pentru gazda.

Dacă întâlniți această eroare:

aceasta înseamnă că utilizați parola greșită. Dacă uitați parola pentru utilizatorul root. apoi reporniți mysqld cu --skip-grant-tabele pentru a schimba parola. Această eroare poate apărea chiar dacă nu setați o parolă, la toate - ceea ce înseamnă că într-un fișier my.ini are parola greșită. Abolirea utilizarea fișierelor de opțiuni, puteți utiliza opțiunea --no-implicite. așa cum se arată mai jos:

Alergați un script mysql_fix_privilege_tables atunci când actualizarea unei instalații MySQL existente, în cazul în care versiunea instalată - mai devreme de 3.22.11, și este actualizat la 3.22.11 sau mai târziu? Dacă nu, o fac. Începând cu MySQL 3.22.11, când instrucțiunea GRANT a devenit structură funcțională de masă privilegiu schimbat.

Dacă în timpul sesiunii, privilegiile s-au schimbat, este posibil ca au schimbat superuser. Reîncărcarea tabelele de grant afectează nu numai clienți noi conectați, dar, de asemenea, la cele existente.

Dacă nu puteți obține parola pentru a lucra, amintiți-vă că funcția PASSWORD () trebuie utilizat dacă specificați parola folosind declarații INSERT. UPDATE sau parola setată. Dacă specificați o parolă utilizând instrucțiunea GRANT. Sau identificate de comanda parolă mysqladmin. nu este necesară funcția PASSWORD ().

localhost - este sinonim cu numele gazdei locale, iar în cazul în care gazda nu este specificat în mod explicit, de asemenea, este instalat în mod implicit, numele de gazdă la care clienții încearcă să se conecteze. Cu toate acestea, conexiunile la localhost nu funcționează în cazul în care sistemul de operare utilizează MIT-fluxuri și versiuni mai vechi de MySQL 3.23.27 (conectarea la localhost sunt realizate folosind socluri Unix, deoarece acestea nu au fost susținute de tehnologia MIT-time fluxuri). Pentru astfel de sisteme în jurul valorii de această problemă, ar trebui să specificați în mod explicit numele gazdei serverului folosind opțiunea --host. Astfel, se stabilește conexiunea la mysqld server pe protocolul TCP / IP. În acest caz, utilizatorul intrărilor de masă. stocate pe server gazdă, ar trebui să fie indicat numele real gazdă. (Acest lucru este valabil chiar și în cazurile în care programul client și serverul rulează pe aceeași gazdă).

Dacă încercați să vă conectați la o bază de date folosind mysql -u user_name DB_Name comanda apare Access denied eroare. Motivul pentru aceasta, probabil, se află în tabelul de utilizator. Pentru a testa acest lucru, executați comanda MySQL -u rădăcină și introduceți următorul SQL declarație:

Ca rezultat, înregistrarea va fi afișată cu coloanele de gazdă și de utilizare. numele relevant al computerului și numele de utilizator MySQL.

Mesaj de eroare de acces refuzat vă informează ce nume pe care încercați să vă conectați, numele gazdei de la care încearcă să stabilească o conexiune, și dacă ați folosit această parolă sau nu. Ca o regulă, masa de utilizator este o singură înregistrare care se potrivește exact cu numele de utilizator și numele de gazdă specificat în mesajul de eroare. De exemplu, dacă primiți un mesaj de eroare care spune utilizând parola: NO. Acest lucru înseamnă că ați încercat să vă conectați fără a introduce o parolă.

Dacă încercați să vă conectați nu pe computerul care execută serverul MySQL, iar celălalt, veți obține o eroare, următorul mesaj de eroare în tabelul de utilizator nu are un șir de caractere cu numele gazdei:

În Linux, cauza acestei erori poate fi faptul că versiunea binară a MySQL este compilat cu versiunea glibc decât cea folosită de tine. În acest caz, va trebui să actualizați fie OS / glibc-ul, folosit de tine, sau descărcați codul sursă și compila serverul MySQL tine. Ca o regulă, RPM sursă este compilat și instalat elementar, astfel că nu va fi o problemă gravă.

Încercați să dau seama ce este în neregulă cu serverul DNS și rezolva problema.

Începe mysqld cu --skip-name-a rezolva.

Start mysqld cu --skip-gazdă cache.

Conectați-vă la localhost dacă serverul și clientul rula pe același computer.

Pune numele mașină client în directorul / etc / hosts.

În cazul în care comanda mysql -u testare user_name funcționează bine, iar echipa mysql -u user_name other_db_nam e - nu, în tabelul db este nicio intrare corespunzătoare other_db_name.

Dacă mysql -u user_name DB_Name comanda este executat cu succes pe computer în cazul în care serverul MySQL -u host_name -u user_name DB_Name nu funcționează atunci când efectuează pe o altă mașină client, masa de utilizator sau db, această mașină client nu este înregistrat.

Dacă nu puteți găsi cauza de eroare accesare a negat. eliminați din tabelul de utilizator toate înregistrările în care valoarea în câmpul gazdă include wildcard (intrările care conțin caracterele „“% „“ sau „“ „_“). O greșeală foarte comună este următorul: utilizatorul introduce un nou record, cu valoarea „%“ în câmpul gazdă și valoarea „unii utilizator“ - în câmpul de utilizator. crezând apoi să se conecteze cu aceeași mașină, el va folosi localhost. Acest calcul este greșit, iar motivul este că setul de privilegii implicite includ înregistrare cu o valoare de „localhost“ în câmpul gazdă și câmpul gol Utilizator. Și din cauza acestei valori record de „localhost“ este mai specific decât „%“, atunci este atunci când vă conectați la localhost precede noua înregistrare și, în consecință, va fi selectat și locul de muncă! Chiar în acest caz este de a insera o a doua intrare, cu o valoare de „localhost“ în câmpul gazdă și valoarea „some_user“ - utilizatorului sau pentru a șterge o înregistrare cu o valoare de „localhost“ în câmpul gazdă și câmpul gol Utilizator.

Dacă primiți următoarea eroare, atunci problema este probabil legată de masa dB, sau tabelul de gazdă:

Dacă intrarea selectată din tabelul db. Coloana gazdă - martor, asigurați-vă că masa gazdă are cel puțin o intrare corespunzătoare indicând care găzduiește înregistrarea se aplică din tabelul db. În cazul în care apare o eroare atunci când SELECT SQL-comandă. ÎN outfile sau INFILE LOAD. ceva în dosarul dumneavoastră în tabelul de utilizator. probabil nu are permisiunea de a oferi privilegii de fișiere.

Amintiți-vă că programele client vor utiliza parametrii de conexiune specificate fișierele de configurare sau variabile de mediu. Dacă există suspiciunea că clientul trimite parametrul greșit este conexiunea implicită, în cazul în care nu le specificați în linia de comandă, verificați mediul și fișierul my.cnf în directorul de acasă. Puteți verifica, de asemenea, fișierele de configurare MySQL referitoare la toate sistemului, chiar dacă parametrii de conectare client cu greu prezentat aici. Dacă accesul eroare a negat apare atunci când programul client fără nici o opțiune, asigurați-vă că nici unul dintre opțiunea Necunoscute parola veche!

Dacă efectuați modificări la tabelele de grant direct (folosind un INSERT sau UPDATE), iar modificările par să fie ignorate, aceasta ar trebui să emită o declarație PRIVILEGII flush sau executa mysqladmin flush privilegii - în scopul de a provoca server pentru a reciti tabelele de grant. În caz contrar, modificările nu vor intra în vigoare până la următoarea este repornit serverul. Amintiți-vă că după ce setați parola numelui de utilizator, va trebui să-l specificați numai după privilegii de resetare, deoarece serverul nici nu va ști că v-ați schimbat parola!

Dacă întâmpinați probleme cu acces atunci când sunt utilizate Perl-, PHP-, Python- sau ODBC-programe care încearcă să se conecteze la serverul cu comanda mysql -u user_name DB_Name sau mysql comanda -u user_name -pyour_pass DB_Name. În cazul în care clientul MySQL oferă conexiunea, problema nu este cu privilegiile de acces, și programul. (De notat că între -p si parola nu este gol, pentru a seta parola, puteți utiliza, de asemenea, sintaxa --password = your_pass Dacă utilizați doar opțiunea foarte -p MySQL vă va cere parola.).

Când începe testarea mysqld daemon cu --skip-grant-tabele. Apoi, aveți posibilitatea să modificați tabelele de grant MySQL și de a folosi verificarea script mysqlaccess făcut dacă modificările pe care le-au făcut efectul dorit. Dacă sunteți mulțumit de rezultate, executați mysqladmin flush privilegii. pentru a comanda serverul mysqld pentru a începe să utilizați noile tabele de grant. Avertizare. reincarcarea tabelelor de grant înlocuiește opțiunea --skip-grant-tabele. Acest lucru vă permite să forțeze server pentru a începe să utilizați noile tabele de grant fără finalizarea lucrărilor și repornirea acestuia.

În cazul în care toate celelalte eșuează, începe daemon daemon mysqld cu opțiunea de depanare (de exemplu --debug = d, generală, interogare). Ca rezultat, veți vedea informații despre eșecul conectat, arătând gazda și utilizatorul, precum și toate comenzile procesate.

Dacă aveți vreo problemă cu tabelele MySQL privilegiu, și tu crezi că trebuie să-l raporteze la lista de discuții, este necesar să se atașeze la imprimat raportul său din tabelele de grant MySQL. Acest lucru se poate face folosind comanda mysqldump mysql. rapoarte de problemă, precum și în alte cazuri, este trimis prin intermediul script mysqlbug. În unele cazuri, executarea mysqldump script-ul poate fi necesar pentru a reporni mysqld cu --skip-grant-tabele.