MySQL ERROR 1045 (28000): Toegang geweigerd voor gebruiker ‘bill’@’localhost’ (met wachtwoord: JA)

Laat me eerst vermelden dat ik veel voorgestelde vragen heb doorgenomen en geen relevant antwoord heb gevonden. Dit is wat ik doe.

Ik ben verbonden met mijn Amazon EC2-instantie. Ik kan inloggen met MySQL root met dit commando:

mysql -u root -p

Vervolgens heb ik een nieuwe gebruikersrekening gemaakt met host %

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

Alle privileges toegekend aan gebruikersfactuur:

grant all privileges on *.* to 'bill'@'%' with grant option;

Vervolgens verlaat ik de root-gebruiker en probeer ik in te loggen met bill:

mysql -u bill -p

voer het juiste wachtwoord in en kreeg deze foutmelding:

ERROR 1045 (28000): Toegang geweigerd voor gebruiker ‘bill’@’localhost’ (met wachtwoord: JA)


Antwoord 1, autoriteit 100%

U heeft waarschijnlijk een anonieme gebruiker ''@'localhost'of ''@'127.0.0.1'.

Volgens de handleiding:

Als er meerdere overeenkomsten mogelijk zijn, moet de server bepalen welke van:
ze te gebruiken. Het lost dit probleem als volgt op: (…)

  • Als een client verbinding probeert te maken, doorzoekt de server de rijen [van tabel mysql.user]in gesorteerde volgorde.
  • De server gebruikt de eerste rij die overeenkomt met de hostnaam en gebruikersnaam van de client.

(…)
De server gebruikt sorteerregels die rijen rangschikken met de meest specifieke hostwaarden eerst.
Letterlijke hostnamen [zoals ‘localhost’]en IP-adressen zijn het meest specifiek.

Daarom zou zo’n anonieme gebruiker elke andere gebruiker zoals '[any_username]'@'%'“maskeren” wanneer hij verbinding maakt vanaf localhost.

'bill'@'localhost'komt overeen met 'bill'@'%', maar komt overeen met (bijv.) ''@'localhost'vooraf.

De aanbevolen oplossing is om deze anonieme gebruiker te verwijderen (dit is hoe dan ook meestal een goede zaak).


Bewerkingen hieronder zijn meestal niet relevant voor de hoofdvraag. Deze zijn alleen bedoeld om een aantal vragen te beantwoorden die in andere opmerkingen in deze thread zijn gesteld.

Bewerk 1

Authenticatie als 'bill'@'%'via een socket.

  [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
  Welkom bij de MySQL-monitor (...)
  mysql> SELECTEER gebruiker, host VAN mysql.user;
  +------+-----------+
  | gebruiker | gastheer |
  +------+-----------+
  | rekening | % |
  | wortel | 127.0.0.1 |
  | wortel | ::1 |
  | wortel | localhost |
  +------+-----------+
  4 rijen in set (0,00 sec)
  mysql> SELECTEER GEBRUIKER(), CURRENT_USER();
  +----------------+----------------+
  | GEBRUIKER() | CURRENT_USER() |
  +----------------+----------------+
  | [email protected] | [email protected]% |
  +----------------+----------------+
  1 rij in set (0,02 sec)
  mysql> TOON VARIABELEN ZOALS 'skip_networking';
  +-----------------+-------+
  | Variabele_naam | Waarde |
  +-----------------+-------+
  | skip_networking | AAN |
  +-----------------+-------+
  1 rij in set (0,00 sec)

Bewerk 2

Exact dezelfde instelling, behalve dat ik het netwerk opnieuw heb geactiveerd en nu een anonieme gebruiker ''@'localhost'aanmaak.

  [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
  Welkom bij de MySQL-monitor (...)
  mysql> MAAK GEBRUIKER ''@'localhost' GEDENTIFICEERD DOOR 'anotherpass';
  Query OK, 0 rijen beïnvloed (0,00 sec)
  mysql> Doei
  [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
    --socket=/tmp/mysql-5.5.sock
  FOUT 1045 (28000): Toegang geweigerd voor gebruiker 'bill'@'localhost' (met wachtwoord: JA)
  [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
    -h127.0.0.1 --protocol=TCP
  FOUT 1045 (28000): Toegang geweigerd voor gebruiker 'bill'@'localhost' (met wachtwoord: JA)
  [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
    -hlocalhost --protocol=TCP
  FOUT 1045 (28000): Toegang geweigerd voor gebruiker 'bill'@'localhost' (met wachtwoord: JA)

Bewerk 3

Dezelfde situatie als in bewerking 2, nu het wachtwoord van de anonieme gebruiker.

  [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
  Welkom bij de MySQL-monitor (...)
  mysql> SELECTEER GEBRUIKER(), CURRENT_USER();
  +----------------+----------------+
  | GEBRUIKER() | CURRENT_USER() |
  +----------------+----------------+
  | [email protected] | @localhost |
  +----------------+----------------+
  1 rij in set (0,01 sec)

Conclusie 1, uit bewerking 1: Men kan authenticeren als 'bill'@'%'via een socket.

Conclusie 2, uit bewerking 2: Of men verbinding maakt via TCP of via een socket heeft geen invloed op het authenticatieproces (behalve dat men geen verbinding kan maken als iemand anders dan 'something'@'localhost'via een stopcontact natuurlijk).

Conclusie 3, uit bewerking 3: Hoewel ik -ubillheb opgegeven, heb ik als anonieme gebruiker toegang gekregen. Dit vanwege de hierboven geadviseerde “sorteerregels”. Merk op dat in de meeste standaardinstallaties, een anonieme gebruiker zonder wachtwoord bestaat( en moet worden beveiligd/verwijderd).


Antwoord 2, autoriteit 33%

Probeer:

~$ mysql -u root -p
Enter Password:
mysql> grant all privileges on *.* to [email protected] identified by 'pass' with grant option;

Antwoord 3, autoriteit 19%

Toen je rende

mysql -u bill -p

en kreeg deze fout

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

mysqld verwacht dat u verbinding maakt als [email protected]

Probeer [email protected]

te maken

CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;

Als u op afstand verbinding wilt maken, moet u ofwel de DNS-naam, het openbare IP-adres of 127.0.0.1 met TCP/IP opgeven:

mysql -u bill -p [email protected]
mysql -u bill -p -h10.1.2.30
mysql -u bill -p -h127.0.0.1 --protocol=TCP

Voer dit uit nadat u bent ingelogd

SELECT USER(),CURRENT_USER();

USER()rapporteert hoe u geprobeerd te authenticeren in MySQL

CURRENT_USER()rapporten hoe u zich in MySQL kon authenticeren vanuit de tabel mysql.user

Hierdoor krijg je een beter beeld van hoe en waarom je mocht inloggen op mysql. Waarom is deze visie belangrijk om te weten? Het heeft te maken met het bestelprotocol voor gebruikersauthenticatie.

Hier is een voorbeeld: ik maak een anonieme gebruiker op mijn MySQL op mijn desktop

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 [email protected]'%';
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>

OK kijk hoe ik inlog als anonieme gebruiker:

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() |
+---------------+----------------+
| [email protected] | @%             |
+---------------+----------------+
1 row in set (0.00 sec)
mysql>

Authenticatie bestellen is erg streng. Het controleert van het meest specifieke naar het minst. Ik schreef over deze authenticatiestijl in de DBA StackExchange.

Vergeet niet expliciet om TCP aan te roepen als het protocol voor de mysql-client indien nodig.


Antwoord 4, autoriteit 8%

Super laat bij dit

Ik heb al deze andere antwoorden geprobeerd en veel verschillende versies van mysql -u root -puitgevoerd, maar heb nooit alleen

uitgevoerd


mysql -u root -p

En druk gewoon op [ENTER]voor het wachtwoord.


Toen ik dat eenmaal deed, werkte het. Hoop dat dit iemand helpt.


Antwoord 5, autoriteit 5%

Als je mysql -u root -ptypt, maak je verbinding met de mysql-server via een lokale unix-socket.

Hoe dan ook de subsidie die je hebt gegeven, 'bill'@'%'komt alleen vreemd genoeg overeen met TCP/IP-verbindingen.

Als je toegang wilt verlenen tot de lokale unix-socket, moet je rechten verlenen aan ‘bill’@’localhost’ , wat merkwaardig genoeg niet hetzelfde is als ‘bill’@’127.0.0.1’

U zou ook via TCP/IP verbinding kunnen maken met de mysql-opdrachtregelclient, zodat deze overeenkomt met de privileges die u al hebt verleend, b.v. voer mysql -u root -p -h 192.168.1.123uit of welk lokaal IP-adres je box ook heeft.


Antwoord 6, autoriteit 5%

Een gerelateerd probleem in mijn geval was proberen verbinding te maken met:

mysql -u mike -p mypass

WitruimteIS blijkbaar toegestaan tussen de -u #uname# maar NIETtussen de -p en #password#

Daarom nodig:

mysql -u mike -pmypass

Anders met witruimte tussen -p mypassmysql neemt ‘mypass’ als de dbnaam


Antwoord 7, autoriteit 4%

Als u uw wachtwoord bent vergeten of als u uw wachtwoord wilt wijzigen, kunt u deze stappen volgen:

1 :stop je mysql

[[email protected] ~]# service mysqld stop
MySQL stoppen: [ OK ]

2 :gebruik “–skip-grant-tables” om mysql opnieuw op te starten

[[email protected] ~]# mysqld_safe –skip-grant-tables
[[email protected] ~]# Mysqld-daemon starten met databases uit /var/lib/mysql

3 : open een nieuw venster en voer mysql -u root in

[[email protected] ~]# mysql -u root
Welkom bij de MySQL-monitor. Commando’s eindigen met ; of \g.

4 : verander de gebruikersdatabase

mysql> gebruik mysql
Tabelinformatie lezen voor het invullen van tabel- en kolomnamen
U kunt deze functie uitschakelen om sneller op te starten met -A
Database gewijzigd

5 : wijzig uw wachtwoord uw nieuwe wachtwoord moet worden ingevoerd in “()”

mysql> update gebruiker set password=password(‘root123′) waar user=’root’;
Zoekopdracht OK, 3 rijen aangetast (0,00 sec)
Overeenkomende rijen: 3 Gewijzigd: 3 Waarschuwingen: 0

6 : doorspoelen

mysql> doorspoelrechten;

7: stoppen

mysql> stoppen
Dag

8: herstart mysql

[[email protected] ~]# service mysqld herstart;
MySQL stoppen: [ OK ]
MySQL starten: [ OK ]

Bingo! U kunt uw database verbinden met uw gebruikersnaam en nieuw wachtwoord:

[[email protected] ~]# 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

Antwoord 8, autoriteit 4%

Bespaar uzelf een GROTE hoofdpijn… Uw probleem kan zijn dat u de aanhalingstekens rond het wachtwoord mist. Dat was tenminste mijn geval dat me 3 uur omleidde.

[client]
user = myusername
password = "mypassword"   # <----------------------- VERY IMPORTANT (quotes)
host = localhost

http://dev.mysql.com/doc/ refman/5.7/en/option-files.html

Zoek naar “Hier is een typisch gebruikersoptiebestand:” en bekijk het voorbeeld dat ze daarin geven. Veel succes en ik hoop iemand anders wat tijd te besparen.


Antwoord 9, autoriteit 4%

Ik had een enigszins vergelijkbaar probleem – bij mijn eerste poging om MySQL in te voeren, als root, kreeg ik te horen dat de toegang werd geweigerd. Blijkt dat ik vergeten ben de sudote gebruiken…

Dus, als je de eerste poging van rootniet lukt, probeer dan:

sudo mysql -u root -p

en voer vervolgens uw wachtwoord in, dit zou moeten werken.


Antwoord 10, autoriteit 3%

De oplossing is om de anonieme (Elke) gebruiker te verwijderen!

Ik heb hetzelfde probleem ook ondervonden bij een serverconfiguratie door iemand anders. Ik kies er normaal gesproken niet voor om een anonieme gebruiker aan te maken bij het installeren van MySQL, dus ik had dit niet opgemerkt. Aanvankelijk logde ik in als “root”-gebruiker en maakte een paar “normale” gebruikers (ook bekend als gebruikers met alleen privileges op dbs met hun gebruikersnaam als voorvoegsel), logde vervolgens uit en ging toen verder met het verifiëren van de eerste normale gebruiker. Ik kon niet inloggen. Noch via phpMyAdmin, noch via shell. Het blijkt dat de boosdoener deze “Elke” gebruiker is.


Antwoord 11, autoriteit 2%

De beste oplossing die ik voor mezelf heb gevonden is.

mijn gebruiker is sonar en wanneer ik vanaf een externe of andere machine verbinding probeer te maken met mijn database, krijg ik een foutmelding als

ERROR 1045 (28000): Access denied for user 'sonar'@'localhost' (using password: YES)

Ook omdat ik dit vanaf een andere machine probeer en via Jenkins-taak is mijn URL voor toegang

alm-lt-test.xyz.com

als u op afstand verbinding wilt maken, kunt u dit op verschillende manieren als volgt specificeren:

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

Om hier toegang toe te krijgen met een URL, hoeft u alleen maar de volgende zoekopdracht uit te voeren.

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';

Antwoord 12

Het is een verschil tussen:

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

en

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';

Controleer het:

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
+---------------+----------------------------+

Het commando

mysql -u bill -p

impliciete toegang tot ‘bill’@’localhost’ en NIET tot ‘bill’@’%’.

Er zijn geen rechten voor ‘bill’@’localhost’

je krijgt de foutmelding:

ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

het probleem oplossen:

CREATE USER 'bill'@'localhost' IDENTIFIED BY 'passpass';
grant all privileges on . to 'bill'@'localhost' with grant option;

Antwoord 13

Ok, ik weet het niet zeker, maar waarschijnlijk is dit mijn.cnf-bestand in de mysql-installatiemap de boosdoener.
Geef commentaar op deze regel en het probleem is mogelijk opgelost.

bind-address = 127.0.0.1

Antwoord 14

Ik weet niet zeker of iemand anders dit nuttig zal vinden, maar ik kwam dezelfde fout tegen en zocht overal naar anonieme gebruikers… en die waren er niet. Het probleem was uiteindelijk dat het gebruikersaccount was ingesteld op “SSL vereist” – wat ik vond in PHPMyAdmin door naar Gebruikersaccounts te gaan en op Rechten bewerken voor de gebruiker te klikken. Zodra ik deze optie uitschakelde, werkte alles zoals verwacht!


Antwoord 15

Update:op v8.0.15 (misschien deze versie) werkt de functie PASSWORD()niet.

Je moet:

  1. Zorg ervoor dat u eerst MySQL hebt gestopt.
  2. Laat de server draaien in veilige modus met privilege bypass: sudo mysqld_safe --skip-grant-tables
  3. Aanmelden: mysql -u root
  4. mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
  5. mysql> FLUSH PRIVILEGES;
  6. mysql> exit;
  7. Log opnieuw in: mysql -u root
  8. mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';

Antwoord 16

Ik wilde je even laten weten dat ik een ongewone omstandigheid heb ontvangen. Ik heb dezelfde foutmelding gekregen. Misschien helpt dit iemand in de toekomst.

Ik had een paar basisweergaven ontwikkeld, gemaakt op de ontwikkellocatie en overgebracht naar de productielocatie. Later die week veranderde ik een PHP-script en ineens kwamen er fouten naar voren dat de toegang werd geweigerd voor gebruiker ‘local-web-user’@’localhost’. Het gegevensbronobject was niet veranderd, dus ik concentreerde me op de databasegebruiker in MySQL, terwijl ik me zorgen maakte dat iemand in de tussentijd mijn website had gehackt. Gelukkig leek de rest van de site ongedeerd.

Later bleek dat de views de boosdoener(s) waren. Onze objectoverdrachten worden gedaan met behulp van een andere (en externe: [email protected]) gebruiker dan de lokale websitegebruiker. Dus de views zijn gemaakt met ‘admin’@’ip-address’ als de definitie. De standaard voor het maken van een weergave SECURITY is

SQL SECURITY DEFINER

Als local-web-user de view probeert te gebruiken, stuit hij op de ontbrekende privileges van de definier om de tabellen te gebruiken. Nadat de beveiliging is gewijzigd in:

SQL SECURITY INVOKER

het probleem is opgelost. Het werkelijke probleem was totaal anders dan verwacht op basis van de foutmelding.


Antwoord 17

Dit gebeurt ook wanneer uw wachtwoord enkele speciale tekens bevat, zoals @,$,etc.
Om deze situatie te voorkomen, kunt u het wachtwoord tussen enkele aanhalingstekens plaatsen:

$ mysql -usomeuser -p'[email protected]$$w0Rd'

Of gebruik in plaats daarvan geen wachtwoord tijdens het invoeren. Laat het leeg en typ het wanneer de terminal daarom vraagt. Dit is de aanbevolen manier.

$ 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>

Antwoord 18

Voor mij werd dit probleem veroorzaakt door een nieuwe functie van MySQL 5.7.2: user-vermeldingen worden genegeerdals hun veld pluginis leeg.

Stel het in op b.v. mysql_native_passwordom ze weer in te schakelen:

UPDATE user SET plugin='mysql_native_password' WHERE user='foo';
FLUSH PRIVILEGES;

Bekijk de release-opmerkingen voor MySQL 5.7.2, onder «Authenticatieopmerkingen».

Om de een of andere reden (misschien omdat mijn wachtwoordhashes van vóór 4.1 zijn verwijderd), heeft het mysql_upgrade-script geen standaard plug-inwaarde ingesteld.

Ik kwam erachter door het volgende waarschuwingsbericht te zien in /var/log/mysql/error.log:

[Waarschuwing] Gebruikersinvoer ‘foo’@’%’ heeft een lege plug-inwaarde. De gebruiker wordt genegeerd en niemand kan meer inloggen met deze gebruiker.

Ik plaats dit antwoord hier om misschien te voorkomen dat iemand hier dezelfde belachelijke hoeveelheid tijd aan besteedt als ik.


Antwoord 19

Ik ontdekte nog een ander geval dat op het eerste gezicht een randgeval lijkt te zijn; Ik kan exporteren naar het bestandssysteem, via SELECT INTO .. OUTFILE als root, maar niet als gewone gebruiker. Hoewel dit een kwestie van machtigingen kan zijn, heb ik daar naar gekeken en niets bijzonders gezien. Het enige wat ik kan zeggen is dat het uitvoeren van de query als een gewone gebruiker die alle rechten heeft op de database in kwestie, de fout ‘toegang geweigerd’ retourneert die me naar dit onderwerp leidde. Toen ik de transcriptie vond van een succesvol gebruik van SELECT INTO … OUTFILE in een oud project, merkte ik dat ik als root was ingelogd. En ja hoor, toen ik me aanmeldde als root, liep de query zoals verwacht.


Antwoord 20

Samenvatting foutopsporing

  • Controleer op typefout: gebruikersnaam of wachtwoord.
  • Controleer de hostnaam en vergelijk deze met de hostnaam van de mysql.user-tabel.
  • Controleer of de gebruiker bestaat of niet.
  • Controleer of host IP-adres of hostnaam bevat.

De kans is groot dat u dit probleem meerdere keren in uw werk bent tegengekomen. Dit probleem deed zich meestal voor als gevolg van het onjuist invoeren van de gebruikersnaam of het wachtwoord. Hoewel dit een van de redenen is, zijn er nog vele andere kansen dat u dit probleem krijgt. Soms lijkt het erg op elkaar, maar als je dieper graaft, zul je je realiseren dat meerdere factoren bijdragen aan deze fout. In dit bericht worden de meest voorkomende redenen in detail uitgelegd en wordt er gewerkt om dit probleem op te lossen.

Mogelijke redenen:

  • Geval 1: Typfout: gebruikersnaam of wachtwoord.

Dit is de meest voorkomende reden voor deze fout. Als je de gebruikersnaam of het wachtwoord verkeerd hebt ingevoerd, krijg je deze foutmelding zeker.

Oplossing:

De oplossing voor dit type fout is heel eenvoudig. Voer gewoon de juiste gebruikersnaam en wachtwoord in. Deze fout wordt opgelost. Als u het wachtwoord bent vergeten, kunt u de gebruikersnaam/het wachtwoord opnieuw instellen.
Als je het wachtwoord voor admin / root-account bent vergeten, zijn er veel manieren om het root-wachtwoord opnieuw in te stellen / terug te halen. Ik zal nog een bericht publiceren over hoe je het root-wachtwoord opnieuw kunt instellen voor het geval je het root-wachtwoord vergeet.

  • Geval 2: Toegang vanaf verkeerde host.

MySQL biedt als beveiligingsfunctie hostgebaseerde beperking voor gebruikerstoegang. In onze productieomgeving beperkten we het toegangsverzoek vroeger alleen tot de applicatieservers. Deze functie is erg handig in veel productiescenario’s.

Oplossing:

Als u met dit soort problemen wordt geconfronteerd, controleer dan eerst of uw host is toegestaan of niet door de tabel mysql.user te controleren.
Als het niet is gedefinieerd, kunt u een nieuw record bijwerken of invoegen in de tabel mysql.user.
Over het algemeen is toegang als rootgebruiker vanaf een externe machine uitgeschakeld en dit is vanwege veiligheidsoverwegingen geen best practice.
Als u vereisten hebt om toegang te krijgen tot uw server vanaf meerdere machines, geef dan alleen toegang tot die machines. Het is beter om geen wildcards (%) te gebruiken en geeft universele toegangen.
Laat me de mysql.user-tabel bijwerken, nu heeft de demouser toegang tot de MySQL-server vanaf elke host.

  • Geval 3: Gebruiker bestaat niet op de server.

Dit type fout treedt op wanneer de gebruiker, waartoe u toegang probeert te krijgen, niet bestaat op de MySQL-server.

Oplossingen:

Als u met dit soort problemen wordt geconfronteerd, controleer dan of de gebruiker al dan niet in de tabel mysql.user voorkomt. Als de record niet bestaat, heeft de gebruiker geen toegang. Als er een vereiste is voor die gebruiker om toegang te krijgen, maak dan een nieuwe gebruiker met die gebruikersnaam.

  • Geval 4: Mix van numerieke en op naam gebaseerde hosts.

Belangrijke punten

  • Het is niet aan te raden om jokertekens te gebruiken bij het definiëren van de gebruikershost, probeer de exacte hostnaam te gebruiken.

  • Schakel root-aanmelding uit vanaf een externe machine.

  • Gebruik proxy-gebruikersconcept.

Er zijn weinig andere concepten die verband houden met dit onderwerp en het in detail treden van deze onderwerpen is een heel ander doel van dit artikel. We zullen in de komende artikelen naar de volgende gerelateerde onderwerpen kijken.

  • Wat te doen als u het root-wachtwoord van de MySQL-server bent vergeten.
  • Problemen met MySQL-toegangsrechten en gebruikersgerelateerde tabellen.
  • MySQL-beveiligingsfuncties met best practices.

Ik hoop dat dit bericht je helpt bij het oplossen van de MySQL-foutcode 1045 Toegang geweigerd voor de gebruiker in MySQL.


Antwoord 21

Ik hoop dat je niet meer schade hebt aangericht door ook de debian-sys-maint-gebruiker in mysql te verwijderen

Laat uw mysql-daemon op de normale manier werken. Start uw mysql-client zoals hieronder weergegeven

mysql -u debian-sys-maint -p

In een andere terminal, cathet bestand /etc/mysql/debian.cnf. Dat bestand bevat een wachtwoord; plak dat wachtwoord wanneer daarom wordt gevraagd.

http://ubuntuforums.org/showthread.php?t=1836919


Antwoord 22

Ik had soortgelijke problemen omdat mijn wachtwoord “;” bevat. char mijn wachtwoord breken wanneer ik het op het eerste moment aanmaakt. Let hierbij op als het je kan helpen.


Antwoord 23

Dit is misschien van toepassing op heel weinig mensen, maar hier komt het. Gebruik geen uitroepteken !in je wachtwoord.

Dat heb ik gedaan en kreeg de bovenstaande fout bij het gebruik van MariaDB. Toen ik het vereenvoudigde tot alleen cijfers en letters, werkte het. Andere tekens zoals @en $werken prima – ik heb die tekens in dezelfde instantie in een andere gebruiker gebruikt.

De vijfde reactie op dit adresleidde mij op mijn gemak.


Antwoord 24

Tegenwoordig! Oplossing voor:

MySQL ERROR 1045 (28000): Toegang geweigerd voor gebruiker ‘gebruiker’@’localhost’
(met wachtwoord: JA);

Wampserver 3.2.0 nieuwe installatie of upgrade

Waarschijnlijk is xamphet gebruik van mariaDBals standaard goed.

Wamp-server wordt geleverd met mariaDBen mysql, en het installeren van mariaDBals standaard op 3306-poort en mysql op 3307, poort soms 3308.

Verbind met mysql!

Bij installatie vraagt het om mariaDBof mysqlte gebruiken, maar mariaDB is standaard aangevinkt en je kunt het niet wijzigen, vink de optie mysqlaan en installeren.

wanneer de installatie is voltooid, draaien beide mariaDBop standaardpoort 3306 en mysqlop een andere poort 3307 of 3308.

Klik met de rechtermuisknop op het wampserver-pictogram waar het moet worden uitgevoerd in de rechterbenedenhoek, ga naar tools en zie uw juiste mysql-uitvoerpoort.

En neem het op in uw databaseverbinding zoals hieronder:

$host = 'localhost';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$port = '3308';//Port
$dsn = "mysql:host=$host;dbname=$db;port=$port;charset=$charset"; //Add in connection
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

Note :ik gebruik pdo.

Zie hier voor meer informatie: https://sourceforge.net/projects/wampserver/


Antwoord 25

In Windows kunt u dit als volgt oplossen:

ERROR 1045 (28000): Toegang geweigerd voor gebruiker ‘root’@’localhost’ (met wachtwoord: NEE)

  1. Mysql verwijderen via het configuratiescherm
  2. Verwijder de MySql-map uit C:\Program Files,C:\Program Files (x86)en C:\ProgramData
  3. Installeer mysql

Antwoord 26

Voor mij had root een standaardwachtwoord

ik heb het wachtwoord gewijzigd met ALTER USER 'root'@'localhost' IDENTIFIED BY 'new Password';en het werkte


Antwoord 27

Wanneer u mysql -u bill -puitvoert, wordt localhostomgezet naar uw ip, aangezien het 127.0.0.1 is en in uw /etc/hostsbestand, zoals standaard 127.0.0.1 localhostbestaat. Dus, mysql interpreteert u als [email protected]wat niet wordt toegekend met [email protected]'%'. Dit is de reden waarom er 2 verschillende records zijn voor rootgebruiker in resultaat van select host, user from mysql.user;query.

Er zijn twee manieren om dit probleem op te lossen.

De ene specificeert een ip die niet omgekeerd wordt opgelost door het bestand /etc/hostswanneer u probeert in te loggen. Het IP-adres van de server is bijvoorbeeld 10.0.0.2. Als je het commando mysql -u bill -p -h 10.0.0.2uitvoert, kun je inloggen. Als u select user();typt, krijgt u [email protected]. Natuurlijk mag een domeinnaam niet worden omgezet naar dit IP-adres in uw /etc/hosts-bestand.

Ten tweede moet u toegang verlenen voor deze specifieke domeinnaam. Voor [email protected]moet je het commando grant all privileges on *.* to [email protected] identified by 'billpass';. In dit geval kunt u inloggen met het commando mysql -u bill -p. Eenmaal ingelogd, select user();commando retourneert [email protected].

Maar dit is alleen voor dat u probeert in te loggen op een mysql-server op dezelfde host. Van externe hosts gedraagt mysql zich naar verwachting, ‘%’ geeft je toestemming om in te loggen.


Antwoord 28

Ik heb dit opgelost door de oude ‘factuur’-items van de gebruiker met fouten te verwijderen (dit is het belangrijkste deel: zowel van mysql.userals mysql.db), en vervolgens gemaakt dezelfde gebruiker als eerder verdrietig:

FLUSH PRIVILEGES;
CREATE USER [email protected] IDENTIFIED BY 'passpass';
grant all privileges on *.* to [email protected] with grant option;
FLUSH PRIVILEGES;

Werkt, gebruiker maakt verbinding. Nu zal ik er enkele voorrechten uit verwijderen 🙂


Antwoord 29

Ik ben dezelfde fout tegengekomen. De setup die niet werkte is als volgt:

define("HOSTNAME", "localhost");
define("HOSTUSER", "van");
define("HOSTPASS", "helsing");
define("DBNAME", "crossbow");
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

De bewerkte setup hieronder is degene die het heeft laten werken. Merk je het verschil?

define('HOSTNAME', 'localhost');
define('HOSTUSER', 'van');
define('HOSTPASS', 'helsing');
define('DBNAME', 'crossbow');
$connection = mysqli_connect(HOSTNAME, HOSTUSER, HOSTPASS);

Het verschil zijn de dubbele aanhalingstekens. Ze lijken behoorlijk belangrijk te zijn in PHP in tegenstelling tot Java en ze hebben een impact als het gaat om het ontsnappen van tekens, het instellen van URL’s en nu het doorgeven van parameters aan een functie. Ze zijn mooier (ik weet het) maar gebruik altijd zoveel mogelijk enkele aanhalingstekens, dan kunnen dubbele aanhalingstekens daarbinnen worden genest indien nodig.

Deze fout deed zich voor toen ik mijn applicatie testte op een Linux-box in plaats van op een Windows-omgeving.


Antwoord 30

Dit kan ook gebeuren als MySQL draait op een hoofdletterongevoelig besturingssysteem, zoals Windows.

bijv. Ik ontdekte dat een poging om verbinding te maken met een database met behulp van deze inloggegevens is mislukt:

mysql> grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -p's3curepa5wrd' -h10.61.130.89 databaseV105

ERROR 1045 (28000): Toegang geweigerd voor gebruiker ‘specialuser’@’10.0.1.113’ (met wachtwoord: JA)

Maar dit is gelukt:

mysql> grant select on databaseV105.* to 'specialuser' identified by 's3curepa5wrd';

$ mysql -specialuser' -h10.300.300.400 databaseV105 -p

Voer wachtwoord in:

Other episodes