Heim  >  Artikel  >  Datenbank  >  Gründe für den MySQL-FEHLER 1045 und wie man ihn löst

Gründe für den MySQL-FEHLER 1045 und wie man ihn löst

王林
王林nach vorne
2023-05-26 22:31:044884Durchsuche

    Beim Eingeben von „mysql -u root –p“ in der Befehlszeile, beim Eingeben eines Passworts oder beim Herstellen einer Verbindung zur Datenbank über ein Tool wird meiner Meinung nach bei vielen Benutzern diese Fehlermeldung häufig angezeigt MySQL.

    FEHLER 1045 (28000): Zugriff für Benutzer 'root'@'localhost' verweigert (mit Passwort: JA)

    Lösungen finden Sie normalerweise online

    1. Stoppen Sie den Dienst

    Stoppen Sie den MySQL-Dienst;

     # windows
     net stop mysql 
     # linux
     service mysqld stop

    2. Verifizierung überspringen

    Ändern Sie die Konfigurationsdatei my.ini im MySQL-Installationsverzeichnis, um die Berechtigungsprüfung beim Anmelden zu überspringen.

     #到mysql根目录找到mysql配置文件 
     vim my.ini
     #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查
     skip_grant_tables

    3. Starten Sie den MySQL-Dienst und melden Sie sich bei MySQL an Sie werden aufgefordert, Ihr Passwort einzugeben. Geben Sie ein beliebiges Passwort ein und drücken Sie die Eingabetaste, um MySQL aufzurufen.

    #登录mysql
    mysql -u root -p

    Ändern Sie dann das Passwort des Root-Benutzers über SQL-Anweisungen.

    #将数据库切换至mysql库
    mysql> USE mysql;
    #修改密码
    mysql> UPDATE user SET password=PASSWORD(‘newpasswd')WHERE user='root'; 
    #刷新MySQL权限相关的表
    mysql> flush privileges;
    mysql> exit;

    4. Starten Sie den Dienst neu. Löschen Sie den Kommentar zum Überspringen oder fügen Sie einen #-Zeichen-Kommentar hinzu, der der Datei my.ini hinzugefügt wurde.

    Starten Sie den Dienst neu und melden Sie sich mit dem geänderten Passwort an.

    Ursachenanalyse

    Verwenden Sie den Root-Benutzer, um sich bei MySQL anzumelden und überprüfen Sie die Benutzerinformationen in der Benutzertabelle wie folgt. Sie können feststellen, dass die Felder von Host % bzw. Localhost sind.

    mysql>select host,user,password from user;

    In MySQL bedeutet „%“, dass Sie sich auf jedem Host bei der MySQL-Datenbank anmelden können. Warum müssen Sie also explizit einen Benutzer erstellen, dessen Anmeldehost localhost ist?

    Gründe für den MySQL-FEHLER 1045 und wie man ihn löstDabei geht es um den Initialisierungsbenutzer, den anonymen Benutzer und die Verbindungsüberprüfungsstrategie während der MySQL-Installation.

    Lassen Sie uns unten eine ausführliche Analyse durchführen.

    Bei der Installation von MySQL werden einige Benutzer standardmäßig initialisiert, z. B. der Root-Benutzer und Benutzer, deren Hostfeld „localhost“ lautet und deren Benutzerfeld leer ist. Ein Benutzer, dessen Benutzerfeld leer ist, ist ein anonymer Benutzer, und das Kennwort des Benutzers ist ebenfalls leer. Jeder kann sich mit einem anonymen Benutzer bei der MySQL-Datenbank anmelden, die Möglichkeiten sind jedoch begrenzt, z. B. die direkte Eingabe von MySQL Klicken Sie auf die Befehlszeile, um sich anzumelden. Sie können überprüfen, für welche Datenbanken der anonyme Benutzer Berechtigungen hat:

    mysql>select current_user;

    mysql>show databases;

    Gründe für den MySQL-FEHLER 1045 und wie man ihn löst

    Sie können dem obigen Bild entnehmen, dass der anonyme Benutzer nur Berechtigungen für die Datenbanken information_schema und test hat .

    Gründe für den MySQL-FEHLER 1045 und wie man ihn löst

    Und wie wirken sich anonyme Benutzer auf die Anmeldung anderer Benutzer aus, was zum Fehler 28000 führt?

    Beim Versuch, eine Verbindung zu einer MySQL-Datenbank herzustellen, entscheidet die Datenbank anhand der bereitgestellten Identität und des bereitgestellten Passworts, ob die Verbindungsanfrage akzeptiert wird. Die Identität besteht aus zwei Teilen: dem Benutzernamen und dem Client-Host (d. h. dem Host, auf dem sich die Verbindung befindet). mysql-Befehl eingegeben wird). Da das % im Host-Feld mit jedem Host übereinstimmt oder das Host-Feld Platzhalter enthält, muss der Server entscheiden, welche der Daten in der Benutzertabelle abgeglichen werden soll, und den Host und den Host koppeln Benutzerfelder werden sortiert.

    mysql>select host,user,password from user order by host desc,user desc;

    Wenn der Client versucht, eine Verbindung herzustellen, sucht der Server nach den sortierten Zeilen und verwendet die erste, die mit dem Host- und Benutzernamen des Clients übereinstimmt. Nachdem er die passende Zeile gefunden hat, überprüft er, ob die Passwörter konsistent sind konsistent, die Anmeldung ist erfolgreich.

    Gründe für den MySQL-FEHLER 1045 und wie man ihn löstWenn das Benutzerfeld leer ist, bedeutet dies, dass es mit jedem Benutzer übereinstimmen kann.

    Fokus hier:

    Benutzer ist leer, d. h. jeder Benutzer, der sich ohne Passwort bei localhost anmeldet, hat nur Berechtigungen für das Informationsschema und die Testdatenbanken. Bei Verwendung anderer Datenbanken schlägt dies fehl.

    Wenn der Benutzer root ist und das Passwort leer angezeigt wird oder das Hostfeld als nicht „%“ angezeigt wird, wird die standardmäßige Übereinstimmungsreihenfolge befolgt, oder das Passwort ist falsch oder es wird FEHLER 1045 angezeigt aufgefordert werden.

    Gründe für den MySQL-FEHLER 1045 und wie man ihn löstDas Bild unten wurde geändert und dient nur als Referenz. Wenn der Host beispielsweise localhost oder die Loopback-Adresse 127 ist, tritt ein Fehler 1045 auf.

    SO Lösung

    mysql> select host,user,password from user order by host desc,user desc;
    ## 将排序序列中最前面的用户修改host为'%'
    mysql> update user set host = '%' where host = 'oracle' and user = 'root';
    mysql> flush privileges;
    Gründe für den MySQL-FEHLER 1045 und wie man ihn löst

    Das obige ist der detaillierte Inhalt vonGründe für den MySQL-FEHLER 1045 und wie man ihn löst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen