În primul rând permiteți-mi să menționez că m-am'am trecut prin multe, a sugerat întrebări și găsit nici o relevanta răspuns. Aici este ceea ce am'm a face.
Am'm conectat la Amazon EC2. Eu pot autentifica cu MySQL root cu comanda asta:
mysql -u root -p
Apoi am creat un utilizator nou proiect de lege cu gazda %
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
Acordat toate privilegiile de utilizator proiect de lege:
grant all privileges on *.* to 'bill'@'%' with grant option;
Apoi am ieșit din rădăcină de utilizator și încercați să vă conectați cu factura:
mysql -u bill -p
introdus corect parola si am aceasta eroare:
EROARE 1045 (28000): Acces interzis pentru utilizatorul 'de lege'@'localhost' (folosind parola: DA)
Probabil că aveți un utilizator anonim''@'localhost' sau
''@'127.0.0.1'`.
Ca pe manual:
atunci Când mai multe meciuri sunt posibile, serverul trebuie să determine care dintre le folosi. Se rezolvă această problemă, după cum urmează: (...)
- atunci Când un client încearcă să se conecteze, serverul arata prin rânduri [din tabelul mysql.utilizator] în ordine sortată.
- serverul foloseste primul rând, care corespunde client nume de gazdă și un nume de utilizator.
(...) server utilizează reguli de sortare că scopul rânduri cu cele mai specifice Gazdă valorile prima. Literal nume de gazdă [cum ar fi 'localhost'] și adresele IP sunt cele mai specifice.
Prin urmare, astfel de un utilizator anonim ar fi "masca" orice alt utilizator ca '[any_username]'@'%'
atunci când conectarea la "localhost".
'de lege'@'localhost'
se potriveste 'proiect de lege'@'%'
, dar s-ar potrivi (de exemplu,) ''@' localhost'
beforehands.
Soluția recomandată este să renunțe la acest utilizator anonim (acest lucru este, de obicei, un lucru bun de a face oricum).
Mai jos modificări sunt în mare parte irelevante la întrebarea principală. Acestea sunt menite doar pentru a răspunde la unele întrebări ridicate în alte comentarii în acest thread.
Edit 1
Autentificarea ca 'proiect de lege'@'%'
printr-un socket.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock Welcome to the MySQL monitor (...) mysql> SELECT user, host FROM mysql.user; +------+-----------+ | user | host | +------+-----------+ | bill | % | | root | 127.0.0.1 | | root | ::1 | | root | localhost | +------+-----------+ 4 rows in set (0.00 sec) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | bill@% | +----------------+----------------+ 1 row in set (0.02 sec) mysql> SHOW VARIABLES LIKE 'skip_networking'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | skip_networking | ON | +-----------------+-------+ 1 row in set (0.00 sec)
Edit 2
Exact acelasi setup, doar am re-activat de rețele, și acum am crea un utilizator anonim''@'localhost'
.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql Welcome to the MySQL monitor (...) mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass'; Query OK, 0 rows affected (0.00 sec) mysql> Bye root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ --socket=/tmp/mysql-5.5.sock ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -h127.0.0.1 --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES) root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \ -hlocalhost --protocol=TCP ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
Edit 3
Aceeași situație ca în edit 2, acum furnizarea de utilizatorul anonim's parolă.
root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost Welcome to the MySQL monitor (...) mysql> SELECT USER(), CURRENT_USER(); +----------------+----------------+ | USER() | CURRENT_USER() | +----------------+----------------+ | bill@localhost | @localhost | +----------------+----------------+ 1 row in set (0.01 sec)
Concluzia 1, de la edit 1: se poate autentifica ca 'proiect de lege'@'%'
printr-un socket.
Concluzie 2, de la edit 2: Dacă unul se conecteaza prin TCP sau printr-o priza nu are impact asupra procesului de autentificare (cu o singură excepție nu se poate conecta ca oricine altcineva, dar `'ceva'@'localhost' printr-un socket, evident).
Concluzie 3, de la edit 3: Deși am specificat -ubill
, I-a fost acordat accesul ca utilizator anonim. Acest lucru este din cauza "reguli de sortare" sfătuit de mai sus. Observați că în cele mai multe instalații implicite, o parola, utilizator anonim există (și ar trebui să fie asigurată/eliminate).
Când ai fugit
mysql -u bill -p
și a primit această eroare
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
mysqld așteaptă să vă conectați ca bill@localhost`
Încercați să creați bill@localhost`
CREATE USER bill@localhost IDENTIFIED BY 'passpass';
grant all privileges on *.* to bill@localhost with grant option;
Dacă doriți să vă conectați de la distanță, trebuie să specificați fie numele DNS, IP publică, sau 127.0.0.1 folosind TCP/IP:
mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP
Odată ce vă conectați, vă rugăm să rulați acest
SELECT USER(),CURRENT_USER();
USER() rapoarte cum ai încercat să autentifice în MySQL
CURRENT_USER() rapoarte cum ți s-a permis să se autentifice în MySQL de la mysql.utilizator tabelul
Acest lucru vă va oferi o vedere mai bună de cum și de ce ți s-a permis să vă conectați la mysql. De ce este acest punct de vedere important să știi? Are de-a face cu autentificarea utilizatorului comanda protocol.
Aici este un exemplu: voi crea un utilizator anonim de pe desktop-ul meu MySQL
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
7 rows in set (0.00 sec)
mysql> grant all on *.* to x@'%';
Query OK, 0 rows affected (0.02 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| lwdba | % |
| mywife | % |
| x | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql> update mysql.user set user='' where user='x';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> select user,host from mysql.user;
+---------+-----------+
| user | host |
+---------+-----------+
| | % |
| lwdba | % |
| mywife | % |
| lwdba | 127.0.0.1 |
| root | 127.0.0.1 |
| lwdba | localhost |
| root | localhost |
| vanilla | localhost |
+---------+-----------+
8 rows in set (0.00 sec)
mysql>
BINE uita-ma de conectare ca utilizator anonim:
C:\MySQL_5.5.12>mysql -urol -Dtest -h127.0.0.1 --protocol=TCP
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user(),current_user();
+---------------+----------------+
| user() | current_user() |
+---------------+----------------+
| rol@localhost | @% |
+---------------+----------------+
1 row in set (0.00 sec)
mysql>
Autentificare comanda este foarte strict. Se verifică de la cel mai specific la cel mai puțin. Am scris despre asta authentiation stil în DBA StackExchange.
Don't uita pentru a apela în mod explicit pentru TCP ca protocol pentru mysql client atunci când este necesar.
Super târziu pentru asta
Am încercat toate aceste răspunsuri și a fugit de mai multe diferite versiuni de mysql -u root -p ` dar niciodată nu a fugit
mysql -u root -p
Și doar apăsând `[ENTER] pentru parola.
Odată ce am facut asta a mers. Sper că acest lucru ajută cineva.
Atunci când tastați mysql -u root -p
, ai're conectarea la serverul mysql peste un local unix socket.
Cu toate acestea grant-ai dat, 'proiect de lege'@'%'
numai meciuri conexiuni TCP/IP, destul de curios.
Dacă doriți să acorde acces la locale unix socket, aveți nevoie pentru a acorda privilegii 'de lege'@'localhost' , care, destul de curios, nu este același lucru ca 'proiect de lege'@'127.0.0.1'
Ai putea conecta, de asemenea, folosind TCP/IP cu mysql command line client, ca să se potrivească privilegiile deja acordate, de exemplu, a alerga mysql -u root -p -h 192.168.1.123
sau oricare locală adresa IP cutie.
O problemă conexă în cazul meu a fost încercarea de a conecta folosind :
mysql -u mike -p mypass
Spațiu ESTE aparent permise între -u #uname# dar NU între -p și #parola#
Prin urmare, este necesar:
mysql -u mike -pmypass
În caz contrar, cu alb-spațiu între -p mypass mysql ia 'mypass' ca db numele
Dacă ați uitat parola sau dacă doriți să modificați parola.Puteți urmați acești pași :
1 :stop mysql
[root@maomao ~]# service mysqld opri Oprirea MySQL: [ OK ]
2 :utilizarea "--skip-grant-tables" pentru a reporni mysql
[root@mcy400 ~]# mysqld_safe --skip-grant-tables
[root@cy400 ~]# de Pornire mysqld daemon cu baze de date din /var/lib/mysql
3 : deschideți o fereastră nouă și de intrare mysql -u root
[root@cy400 ~]# mysql -u root
Bun venit la MySQL monitorizeze. Comenzile se încheie cu, sau g.
4 : schimba baza de date de utilizator
mysql> utilizați mysql
Tabel de lectură informații pentru completarea tabelului și numele de coloane Puteți dezactiva această caracteristică pentru a obține o mai repede de pornire cu -O Baza de date a schimbat
5 : modifica parola, noua parola trebuie să fie de intrare în "()"
mysql> update user set password=password('root123'), unde utilizator='rădăcină';
Query OK, 3 randuri afectate (0.00 sec)
Rânduri potrivesc: 3 s-a Schimbat: 3 Avertismente: 0
6 : flush
mysql> culoare privilegii;
7: demisia
mysql> quit
Pa
8: restart mysql
[root@cy400 ~]# service mysqld restart;
Oprirea MySQL: [ OK ]
Incepand MySQL: [ OK ]
Bingo! Puteți conecta baza de date cu numele dvs. de utilizator și parola nouă:
[root@cy400 ~]# mysql -u root -p <br>
Enter password: admin123 <br>
Welcome to the MySQL monitor. Commands end with ; or \g. <br>
Your MySQL connection id is 2 <br>
Server version: 5.0.77 Source distribution <br>
Type 'help;' or '\h' for help. Type '\c' to clear the buffer. <br>
mysql> quit <br>
Bye
Salvați-vă de o mare durere de cap... problema Ta ar putea fi faptul că vă lipsesc ghilimele parola. Cel putin asta a fost cazul meu, care de ocolit mine timp de 3 ore.
[client]
user = myusername
password = "mypassword" # <----------------------- VERY IMPORTANT (quotes)
host = localhost
http://dev.mysql.com/doc/refman/5.7/en/option-files.html
Căutare pentru "Aici este un utilizator tipic opțiunea fișier:" și a se vedea exemplul ei au stat acolo. Baftă, și sper să salveze pe cineva de ceva timp.
Soluția este de a șterge anonim (Orice) de utilizator!
M-am confruntat cu aceeasi problema pe un server de configurare de altcineva. În mod normal, eu nu't alegeți pentru a crea un utilizator anonim la instalarea MySQL, deci nu - 't a observat acest lucru. Inițial m-am logat ca "rădăcină" utilizator și a creat o pereche de "normale" utilizatorii (aka utilizatorii cu privilegii doar pe dbs cu numele de utilizator ca prefix), apoi deconectat, apoi a mers pe pentru a verifica primul utilizator normal. Nu puteam't vă conectați. Nici prin phpMyAdmin, nici prin shell. Se pare, vinovat este acest "Orice" utilizator.
Cea mai bună soluție am găsit pentru mine este.
meu de utilizator este sonar și ori de câte ori am încercat să se conecteze la baza de date de la externe sau altă mașină primesc eroare ca
ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)
De asemenea, după cum am încercat acest lucru de la un alt aparat și prin Jenkins treaba mea URL-ul pentru accesarea
alm-lt-test.xyz.com
dacă doriți să vă conectați de la distanță, aveți posibilitatea să specificați cu diferite moduri, după cum urmează:
mysql -u sonar -p -halm-lt-test.xyz.com
mysql -u sonar -p -h101.33.65.94
mysql -u sonar -p -h127.0.0.1 --protocol=TCP
mysql -u sonar -p -h172.27.59.54 --protocol=TCP
Pentru a accesa acest cu URL-ul trebuie doar să executați următoarea interogare.
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'alm-lt-test.xyz.com' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'127.0.0.1' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'172.27.59.54' IDENTIFIED BY 'sonar';
Am avut o problema oarecum asemănătoare - în prima mea încercare de a intra MySQL, ca "radacina", mi-a spus access denied. Se pare că am uitat să utilizați "sudo"...
Deci, dacă nu pe "radacina" prima încercare, încercați:
sudo mysql -u root -p
și apoi introduceți parola, acest lucru ar trebui să funcționeze.
Am vrut doar să știi o circumstanță neobișnuită am primit aceeasi eroare. Poate că acest lucru ajută cineva în viitor.
Am dezvoltat câteva baze de vedere, creat la dezvoltarea site-ului și le-a transferat producția-ului. Mai târziu în acea săptămână am schimbat un script PHP și dintr-o dată erori venit care Accesul a fost interzis pentru utilizatorul 'locale-web-utilizator'@'localhost'. O sursă de date obiect nu s-au schimbat, așa că m-am concentrat pe utilizator de bază de date în MySQL, îngrijorătoare între timp cineva mi-a spart site-ul. Din fericire restul site-ului părea nevătămat.
Mai târziu sa dovedit că opiniile au fost vinovatul(s). Obiectul nostru transferurile se fac cu ajutorul altul (și de la distanță: admin@ip-adresa) utilizator decât cele locale ul utilizatorului. Astfel de opinii au fost create cu 'admin'@'ip-adresa' ca definer. Vederea creării de SECURITATE implicit este
SQL SECURITY DEFINER
Când locală-web-utilizator încearcă să folosească vedere că se împiedică pe lipsite de privilegii de contur pentru a utiliza tabele. Odată ce securitatea a fost schimbat la:
SQL SECURITY INVOKER
problema a fost rezolvată. Problema reală a fost complet diferit decât s-a anticipat pe baza mesaj de eroare.
L's o diferență între:
CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';
și
CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
Verifica:
mysql> select user,host from mysql.user;
+---------------+----------------------------+
| user | host |
+---------------+----------------------------+
| bill | % | <=== created by first
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| bill | localhost | <=== created by second
+---------------+----------------------------+
Comanda
mysql -u bill -p
acces implicit la 'de lege'@'localhost' si NU 'proiect de lege'@'%'.
Nu există permisiuni pentru 'de lege'@'localhost'
primiți eroare:
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
rezolvarea problemei:
CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
grant all privileges on . to 'bill'@'localhost' with grant option;
Acest lucru se întâmplă atunci când parola conține unele caractere speciale cum ar fi @,$,etc. Pentru a evita această situație, puteți încheia parola în ghilimele simple:
$ mysql -usomeuser -p's0mep@$$w0Rd'
Sau în loc să don't de a folosi parola în timp ce intra. Lăsați-l gol și apoi introduceți-l atunci când terminalul cere. Acesta este modul recomandat.
$ mysql -usomeuser -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 191
Server version: 5.5.46-0ubuntu0.14.04.2 (Ubuntu)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Pentru mine, această problemă a fost cauzată de o nouă caracteristică de MySQL 5.7.2: "utilizator" intrările sunt ignorat dacă lor "plugin" câmp este gol.
Setați-l pentru a ex mysql_native_password
pentru a le reactiva:
UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;
A se vedea notele de lansare pentru MySQL 5.7.2, sub «Autentificare Note».
Pentru un motiv oarecare (poate pentru că-mi pre-4.1 hash-uri de parole au fost eliminate), la mysql_upgrade
script-am't stabilit un plugin implicit valoarea.
Am aflat de observat următorul mesaj de avertizare în /var/log/mysql/eroare.log
:
[Avertizare] intrare de Utilizator 'foo'@'%' are un gol plugin valoare. Utilizatorul va fi ignorat și nimeni nu poate autentifica-te cu acest utilizator mai.
Am posta acest raspuns aici, poate salva pe cineva de la folosind aceeași sumă ridicol de timp pe asta, așa cum am făcut-o.
Nu sunt sigur dacă cineva va găsi acest ajutor, dar am intampinat aceeasi eroare și am căutat peste tot pentru orice utilizatorii anonimi...si nu erau't orice. Problema s-a încheiat fiind că contul de utilizator a fost setat la "Solicita SSL" - care am găsit-o în PHPMyAdmin de a merge la Conturi de Utilizator și faceți clic pe Editare Privilegii pentru utilizator. De indata ce am bifat această opțiune, totul a mers cum era de așteptat!
Depanare Rezumat
Există o mare șansă că, ați putea fi confruntat cu aceasta problema de mai multe ori în munca ta. Această problemă a avut loc pentru mine de cele mai multe ori din cauza incorect introducerea numelui de utilizator sau parola. Deși acesta este unul dintre motive, există și alte multe șanse s-ar putea obține această problemă. Uneori, se pare foarte similare, dar cand sapi mai adânc, vă veți da seama mai multor factori care contribuie la această eroare. Acest post vă va explica în detaliu, cele mai comune motive și de a lucra în jurul valorii de pentru a rezolva această problemă.
Motive posibile:
Acesta este cel mai comun motiv pentru această eroare. Dacă ați introdus numele de utilizator sau parola greșit, cu siguranță veți obține această eroare.
Soluție:
Soluție pentru acest tip de eroare este foarte simplu. Trebuie doar să introduceți corect numele de utilizator și parola. Această eroare va fi rezolvată. În cazul în care ați uitat parola, o puteți reseta numele de utilizator/parola. Dacă ați uitat parola pentru admin / root cont, există multe moduri de a reseta / recupereze parola de root. Voi publica un alt post despre cum să resetați parola de root în caz dacă ați uitat parola de root.
MySQL oferă bazat pe gazdă restricții pentru accesul utilizatorului ca o caracteristici de securitate. În producția noastră de mediu, am folosit pentru a restricționa accesul cererea doar la serverele de Aplicații. Această caracteristică este foarte util în multe scenarii de producție.
Soluție:
Când vă confruntați cu acest tip de problemă, verificați mai întâi dacă gazda este permis sau nu prin verificarea mysql.tabelul de utilizator. Dacă nu este definit, puteți actualiza sau de a introduce nou record pentru mysql.tabelul de utilizator. În general, accesul ca root de mașină de la distanță este dezactivată și nu este o bună practică, din motive de securitate. Dacă aveți cerințe pentru a accesa server-ul dvs. de la mai multe masini, dau acces doar la acele masini. Este mai bine să nu utilizați metacaractere (%) și dă universal accesează. Lasă-mă să actualizați mysql.masa de utilizator, acum demouser pot accesa serverul MySQL de la orice gazdă.
Acest tip de eroare apare atunci când utilizatorul, care incercati sa o accesati nu exista pe serverul MySQL.
Soluții:
Când vă confruntați cu acest tip de problemă, trebuie doar să verificați dacă utilizatorul este există în mysql.masa de utilizator sau nu. Dacă înregistrarea nu există, utilizatorul nu poate accesa. Dacă există o cerință pentru utilizator de a accesa, de a crea un nou utilizator cu numele de utilizator.
Puncte importante
Nu este recomandabil să utilizați metacaractere în timp ce definirea utilizator gazdă, încercați să utilizați exact numele de gazdă.
Dezactivați autentificarea ca root de mașină de la distanță.
Utilizați proxy utilizator concept.
Există alte câteva concepte legate de acest subiect și a intra în detaliile acestor teme este foarte diferit de domeniul de aplicare a prezentului articol. Ne vom uita în următoarele subiecte conexe în articole viitoare.
Sper ca acest post va ajuta pentru a repara MySQL Cod de Eroare 1045 Acces interzis pentru utilizatorul în MySQL.
Am descoperit încă un alt caz care apare pe suprafața să fie un avantaj caz; pot exporta la sistemul de fișiere, prin intermediul SELECTAȚI ÎN .. OUTFILE ca root, dar nu ca utilizator obișnuit. În timp ce acest lucru poate fi o problemă de permisiuni, am'am uitat la asta, și nu văd nimic deosebit de evident. Tot ce pot spune este că de executare interogare ca un utilizator normal care are toate permisiunile pe baza de date în cauză revine la acces refuzat de eroare care m-a condus la acest subiect. Când am găsit transcrierea o utilizare cu succes a SELECTA ÎN ... OUTFILE într-un proiect vechi, am observat că am fost logat ca root. Destul de sigur, atunci când m-am logat ca root, interogarea fugit cum era de așteptat.
Sper că nu ați făcut mai multe daune, de asemenea, ștergerea debian-sys-activita utilizator în mysql
Au mysql daemon rulează în mod normal. Începe client mysql așa cum se arată mai jos
mysql -u debian-sys-maint -p
Într-un alt terminal, " cat " fisierul /etc/mysql/debian.cnf
. Că fișierul conține o parolă; pastă parola când vi se solicită pentru ea.