Dacă încercați să vă conectați la un server MySQL, întâlniți o eroare de acces refuzată. apoi utilizați lista de mai jos. Ea enumeră măsurile care pot fi luate pentru a rezolva această problemă:
Ați executat scriptul mysql_install_db după instalarea MySQL pentru a instala conținutul inițial al tabelelor de privilegii? Dacă nu, fă-o. Consultați secțiunea Descrierea privilegiilor primare MySQL. Verificați privilegiile inițiale cu următoarea comandă:
Conexiunea trebuie să aibă loc fără eșec. De asemenea, trebuie să vă asigurați că există un fișier user.MYD din directorul bază de date MySQL. Acesta este de obicei localizat în directorul PATH / var / mysql / user.MYD. unde PATH este calea către directorul rădăcină al instalării MySQL.
După o nouă instalare, trebuie să vă conectați la server și să creați utilizatori și să le stabiliți permisiunile:
Serverul va permite conexiunea, deoarece un utilizator MySQL cu un nume de utilizator root nu are inițial o parolă. Dar acest lucru este, de asemenea, riscul de a compromite securitatea sistemului, deci atunci când creați alți utilizatori MySQL, trebuie să setați, printre altele, o parolă pentru utilizatorul rădăcină. Dacă încercați să vă conectați ca root, primiți următoarea eroare:
acest lucru înseamnă că nu există o intrare în tabelul de utilizatori cu o valoare de "root" în coloana User și mysqld nu poate determina numele gazdei pentru clientul dvs. În acest caz, trebuie să reporniți serverul cu opțiunile --skip-grant-tables și să editați fișierul / etc / hosts sau \ windows \ hosts. adăugând o intrare pentru acesta la gazda dvs.
Dacă întâmpinați o astfel de eroare, cum ar fi:
acest lucru înseamnă că este utilizată o parolă greșită. Consultați secțiunea "Specificarea parolelor". Dacă ați uitat parola de root. apoi reporniți mysqld cu opțiunea -skip-grant-tables și schimbați parola. Consultați Cum se reinstalează parola de root uitată. Această eroare poate apărea chiar dacă nu ați specificat deloc o parolă - înseamnă că există o parolă incorectă în unele fișiere my.ini. Consultați secțiunea Fișierele din My.cnf. Aveți posibilitatea să înlocuiți fișierele opționale utilizând opțiunea --no-defaults. după cum urmează:
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, fă-o. Începând cu MySQL 3.22.11, când declarația GRANT a devenit funcțională, structura tabelelor de privilegii a fost modificată.
Dacă în timpul sesiunii privilegiile dvs. s-au schimbat, probabil, superuserul le-a schimbat. Tabelele de privilegiere de reîncărcare se reflectă nu numai pe noile conexiuni ale clienților, ci și pe cele existente, după cum se arată în secțiunea Când se produc modificări în privilegii.
Dacă nu puteți obține parola să funcționeze, rețineți că funcția PASSWORD () ar trebui folosită dacă specificați o parolă utilizând instrucțiunile INSERT. UPDATE sau SET PASSWORD. Dacă setați parola utilizând instrucțiunea GRANT. INDENTIFICAT de sau de comanda mysqladmin parola. funcția PASSWORD () nu este necesară. Consultați secțiunea "Specificarea parolelor".
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. Aceasta va stabili o conexiune la serverul mysqld folosind TCP / IP. În acest caz, în înregistrările tabelului de utilizatori. stocate pe gazda serverului, trebuie specificat numele real al gazdei. (Acest lucru este valabil chiar și atunci când programul client și serverul rulează pe aceeași gazdă).
Dacă încercați să vă conectați la baza de date utilizând comanda mysql -u user_name db_name, apare o eroare de acces refuzată. Motivul pentru aceasta poate fi în tabelul utilizatorilor. Pentru a verifica aceasta, rulați mysql -u mysql rădăcină și introduceți următoarea instrucțiune SQL:
Rezultatul este o înregistrare cu coloane Gazdă și Utilizator. corespunzătoare numelui 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. În mod obișnuit, tabela de utilizator va avea o intrare care se potrivește exact cu numele gazdă și cu numele de utilizator specificat în mesajul de eroare. De exemplu, dacă primiți un mesaj de eroare care spune Utilizarea parolei: NU. aceasta înseamnă că ați încercat să vă conectați fără a specifica o parolă.
Dacă încercați să vă conectați nu de la același computer pe care rulează serverul MySQL, ci de la altul, veți primi mesajul de eroare de mai jos, apoi tabela de utilizatori nu conține o linie cu acest nume de gazdă:
În Linux, motivul pentru această eroare ar putea fi faptul că versiunea binară a MySQL este compilată cu o versiune glibc care este diferită de cea pe care o utilizați. În acest caz, va trebui fie să actualizați sistemul de operare / glibc pe care îl utilizați, fie să descărcați codul sursă al MySQL și să vă compilați singur serverul. De regulă, RPM-ul sursei este compilat și instalat elementar, deci nu va fi o problemă serioasă.
Încercați să aflați ce este în neregulă cu serverul dvs. DNS și remediați problema.
Porniți mysqld cu opțiunea -skip-name-resolve.
Porniți mysqld cu opțiunea -skip-host-cache.
Conectați-vă la localhost dacă serverul și clientul dvs. rulează pe același computer.
Puneți numele mașinilor 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 afla cauza erorii de acces refuzată. eliminați toate intrările din tabelul de utilizatori, unde valoarea din câmpul gazdă include caractere de tip "wildcard" (intrări care conțin caracterele "%" sau "_"). O greșeală foarte frecventă este următoarea: utilizatorul introduce o intrare nouă cu valoarea "%" în câmpul gazdă și cu valoarea "un utilizator" în câmpul Utilizator. crezând că după aceea, pentru a se conecta de la aceeași mașină, poate folosi localhost. Acest calcul este incorect și motivul este că privilegiile implicite includ o intrare cu valoarea "localhost" în câmpul gazdă și un câmp gol pentru utilizator. Și din moment ce în această intrare valoarea "localhost" este mai specifică decât "%", atunci când se conectează cu localhost care precede noua înregistrare și, în consecință, va fi selectat și va funcționa! Corect în acest caz este inserați a doua intrare cu valoarea "localhost" în câmpul gazdă și valoarea "some_user" în câmpul User sau ștergeți înregistrarea cu valoarea "localhost" în câmpul gazdă și câmpul gol User.
Dacă apare următoarea eroare, această problemă poate fi legată de tabela db sau tabela de gazdă:
Dacă intrarea este selectată din tabelul db. coloana gazdă este goală, asigurați-vă că tabela gazdă are cel puțin o intrare corespunzătoare care indică la care gazdă aparține înregistrarea din tabelul db. Dacă se produce o eroare în timpul executării instrucțiunii SQL SELECT. IN OUTFILE sau INFORMAȚII DE ÎNCĂRCARE A DATELOR. apoi în intrarea dvs. din tabelul de utilizatori. probabil nu există permisiunea de a acorda privilegiul FILE.
Rețineți că programele client vor folosi parametrii de conexiune specificați de fișierele de configurare sau de variabilele de mediu. Consultați secțiunea Variabile de mediu. Dacă există o suspiciune că clientul trimite parametrii de conectare implicit greșit, în cazul în care nu îi specificați pe linia de comandă, verificați fișierul de mediu și fișierul my.cnf în directorul de acasă. De asemenea, puteți verifica fișierele de configurare MySQL referitoare la întregul sistem, deși setările de conectare ale clientului nu sunt specificate aici. Consultați secțiunea Fișierele din My.cnf. Dacă apare eroarea de acces refuzată atunci când rulează programul client fără opțiuni, asigurați-vă că nici unul dintre fișierele cu opțiuni nu are specificată parola veche! Consultați secțiunea Fișierele din My.cnf.
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 dvs. nu vor avea efect până când serverul nu va fi repornit. Rețineți că după ce ați setat parola în numele utilizatorului, va trebui să îl specificați numai după ce privilegiul este resetat, deoarece serverul nu va ști încă că 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. Dacă clientul dvs. mysql furnizează o conexiune, atunci problema nu este cu privilegiile de acces, ci cu programul dvs. (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 testați, rulați daemonul mysqld cu opțiunea -skip-grant-tables. Apoi puteți schimba tabelele de privilegii MySQL și puteți folosi scriptul mysqlaccess pentru a verifica dacă modificările efectuate au produs efectul dorit. Dacă sunteți mulțumit de rezultate, executați comanda mysqladmin flush-privileges. pentru a instrui serverul mysqld să înceapă să utilizeze noile tabele de privilegii. Atenție, vă rog. Reîncărcarea tabelelor de privilegii înlocuiește opțiunea -skip-grant-tables. Acest lucru permite serverului să înceapă să utilizeze noile tabele de privilegii fără a închide și a reporni.
Dacă nu ajută nimic, porniți daemonul daemon mysqld cu opțiunea de depanare (de exemplu --debug = d, general, interogare). Ca rezultat, vor fi afișate informații despre conexiunile nereușite, indicând gazda și utilizatorul, precum și toate comenzile procesate. Consultați secțiunea Crearea fișierelor de urmărire.
Dacă aveți vreo problemă cu tabelele de privilegii MySQL și considerați că trebuie să o raportați la lista de corespondență, trebuie să includeți întotdeauna o listă a tabelelor de privilegii MySQL în raportul dvs. Acest lucru se poate face cu mysql comanda mysqldump. Raportul despre această problemă, ca și în alte cazuri, este trimis folosind scriptul mysqlbug. Consultați Cum să: Raportați o eroare sau o problemă. În unele cazuri, pentru a rula scriptul mysqldump, poate fi necesar să reporniți mysqld cu opțiunea -skip-grant-tables.