Zum Inhalt springen

Mysql/Benutzer: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 10: Zeile 10:


== Benutzer anlegen ==
== Benutzer anlegen ==
Bei der Installation erstellt MySQL ein '''root'''-Benutzerkonto, das Sie zur Verwaltung Ihrer Datenbank verwenden können.
Bei der Installation erstellt MySQL ein '''root'''-Benutzerkonto, das Sie zur Verwaltung Ihrer Datenbank verwenden können
* Dieser Benutzer hat volle Rechte auf dem MySQL-Server, d. h. er hat die vollständige Kontrolle über alle Datenbanken, Tabellen, Benutzer usw.
* Dieser Benutzer hat volle Rechte auf dem MySQL-Server, d. h. er hat die vollständige Kontrolle über alle Datenbanken, Tabellen, Benutzer usw


Aus diesem Grund sollten Sie es vermeiden, dieses Konto außerhalb von Verwaltungsfunktionen zu verwenden.
Aus diesem Grund sollten Sie es vermeiden, dieses Konto außerhalb von Verwaltungsfunktionen zu verwenden
* In diesem Schritt wird beschrieben, wie Sie den '''root''' MySQL-Benutzer verwenden, um ein neues Benutzerkonto zu erstellen und ihm Rechte zu gewähren.
* In diesem Schritt wird beschrieben, wie Sie den '''root''' MySQL-Benutzer verwenden, um ein neues Benutzerkonto zu erstellen und ihm Rechte zu gewähren


; auth_socket
; auth_socket
MySQL 5.7 und später
Seit MySQL 5.7
'''root''' MySQL-Benutzer benutzt <code>auth_socket</code>-Plugin statt sich mit einem Passwort zu authentifizieren
* '''root''' MySQL-Benutzer benutzt <code>auth_socket</code>-Plugin statt sich mit einem Passwort zu authentifizieren
* Dieses Plugin erfordert, dass der Name des Betriebssystembenutzers, der den MySQL-Client aufruft, mit dem Namen des im Befehl angegebenen MySQL-Benutzers übereinstimmt.
* Dieses Plugin erfordert, dass der Name des Betriebssystembenutzers, der den MySQL-Client aufruft, mit dem Namen des im Befehl angegebenen MySQL-Benutzers übereinstimmt
* Das bedeutet, dass Sie dem <code>mysql</code>-Befehl <code>sudo</code> voranstellen müssen, um ihn mit den Rechten des '''root'''-Ubuntu-Benutzers aufzurufen, damit Sie Zugriff auf den '''root'''-MySQL-Benutzer erhalten:
 
Das bedeutet, dass Sie dem <code>mysql</code>-Befehl <code>sudo</code> voranstellen müssen, um ihn mit den Rechten des '''root'''-Ubuntu-Benutzers aufzurufen, damit Sie Zugriff auf den '''root'''-MySQL-Benutzer erhalten
<syntaxhighlight lang="bash" highlight="1" copy>
<syntaxhighlight lang="bash" highlight="1" copy>
sudo mysql
sudo mysql
Zeile 26: Zeile 27:


; Hinweis
; Hinweis
: Wenn Ihr '''root''' MySQL-Benutzer so konfiguriert ist, dass er sich mit einem Passwort authentifiziert, müssen Sie einen anderen Befehl verwenden, um auf die MySQL-Shell zuzugreifen.
: Wenn Ihr '''root''' MySQL-Benutzer so konfiguriert ist, dass er sich mit einem Passwort authentifiziert, müssen Sie einen anderen Befehl verwenden, um auf die MySQL-Shell zuzugreifen
* Mit dem folgenden Befehl wird Ihr MySQL-Client mit normalen Benutzerrechten ausgeführt, und Sie erhalten nur dann Administratorrechte in der Datenbank, wenn Sie sich mit dem richtigen Passwort authentifizieren:
 
Mit dem folgenden Befehl wird Ihr MySQL-Client mit normalen Benutzerrechten ausgeführt, und Sie erhalten nur dann Administratorrechte in der Datenbank, wenn Sie sich mit dem richtigen Passwort authentifizieren
<syntaxhighlight lang="bash" highlight="1" copy>
<syntaxhighlight lang="bash" highlight="1" copy>
mysql -u root -p
mysql -u root -p
</syntaxhighlight>
</syntaxhighlight>


Sobald Sie Zugriff auf die MySQL-Eingabeaufforderung haben, können Sie einen neuen Benutzer mit einer <code>CREATE USER</code>-Anweisung erstellen.
Sobald Sie Zugriff auf die MySQL-Eingabeaufforderung haben, können Sie einen neuen Benutzer mit einer <code>CREATE USER</code>-Anweisung erstellen
* Diese folgen dieser allgemeinen Syntax:
 
Allgemeinen Syntax
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
</syntaxhighlight>
</syntaxhighlight>


Nach <code>CREATE USER</code> geben Sie einen Benutzernamen an.
Nach <code>CREATE USER</code> geben Sie einen Benutzernamen an
* Direkt danach folgt ein <code>@</code>-Zeichen und dann der Hostname, von dem aus sich dieser Benutzer verbinden wird.
* Direkt danach folgt ein <code>@</code>-Zeichen und dann der Hostname, von dem aus sich dieser Benutzer verbinden wird
* Wenn Sie diesen Benutzer nur lokal von Ihrem Ubuntu-Server aus ansprechen wollen, können Sie <code>localhost</code> angeben.
* Wenn Sie diesen Benutzer nur lokal von Ihrem Ubuntu-Server aus ansprechen wollen, können Sie <code>localhost</code> angeben
* Es ist nicht immer notwendig, sowohl den Benutzernamen als auch den Host in einfache Anführungszeichen zu setzen, aber es kann helfen, Fehler zu vermeiden.
* Es ist nicht immer notwendig, sowohl den Benutzernamen als auch den Host in einfache Anführungszeichen zu setzen, aber es kann helfen, Fehler zu vermeiden


Bei der Auswahl des Plugins für die Benutzerauthentifizierung haben Sie mehrere Möglichkeiten.
Bei der Auswahl des Plugins für die Benutzerauthentifizierung haben Sie mehrere Möglichkeiten
* Das bereits erwähnte <code>auth_socket</code>-Plugin kann praktisch sein, da es starke Sicherheit bietet, ohne dass gültige Benutzer ein Passwort eingeben müssen, um auf die Datenbank zuzugreifen.
* Das bereits erwähnte <code>auth_socket</code>-Plugin kann praktisch sein, da es starke Sicherheit bietet, ohne dass gültige Benutzer ein Passwort eingeben müssen, um auf die Datenbank zuzugreifen
* Aber es verhindert auch Remote-Verbindungen, was die Sache verkomplizieren kann, wenn externe Programme mit MySQL interagieren müssen.
* Aber es verhindert auch Remote-Verbindungen, was die Sache verkomplizieren kann, wenn externe Programme mit MySQL interagieren müssen


Als Alternative können Sie den <code>WITH</code> Teil der Syntax ganz weglassen, um den Benutzer mit dem Standard-Plugin von MySQL, <code>caching_sha2_password</code>, zu authentifizieren.
Als Alternative können Sie den <code>WITH</code> Teil der Syntax ganz weglassen, um den Benutzer mit dem Standard-Plugin von MySQL, <code>caching_sha2_password</code>, zu authentifizieren
* Die MySQL-Dokumentation empfiehlt dieses Plugin für Benutzer, die sich mit einem Passwort anmelden wollen, da es starke Sicherheitsfunktionen bietet.
* Die MySQL-Dokumentation empfiehlt dieses Plugin für Benutzer, die sich mit einem Passwort anmelden wollen, da es starke Sicherheitsfunktionen bietet


Führen Sie den folgenden Befehl aus, um einen Benutzer zu erstellen, der sich mit <code>caching_sha2_password</code> authentifiziert. Ändern Sie in Ihren bevorzugten Benutzernamen und in ein sicheres Passwort Ihrer Wahl:
Führen Sie den folgenden Befehl aus, um einen Benutzer zu erstellen, der sich mit <code>caching_sha2_password</code> authentifiziert. Ändern Sie in Ihren bevorzugten Benutzernamen und in ein sicheres Passwort Ihrer Wahl
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
</syntaxhighlight>
</syntaxhighlight>


; Hinweis  
; Hinweis
: Es gibt ein bekanntes Problem mit einigen PHP-Versionen, das Probleme mit <code>caching_sha2_password</code> verursacht.
: Es gibt ein bekanntes Problem mit einigen PHP-Versionen, das Probleme mit <code>caching_sha2_password</code> verursacht
* Wenn Sie diese Datenbank mit einer PHP-Anwendung - zum Beispiel phpMyAdmin - verwenden wollen, sollten Sie stattdessen einen Benutzer anlegen, der sich mit dem älteren, aber immer noch sicheren <code>mysql_native_password</code>-Plugin authentifiziert:
* Wenn Sie diese Datenbank mit einer PHP-Anwendung - zum Beispiel phpMyAdmin - verwenden wollen, sollten Sie stattdessen einen Benutzer anlegen, der sich mit dem älteren, aber immer noch sicheren <code>mysql_native_password</code>-Plugin authentifiziert
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
</syntaxhighlight>
</syntaxhighlight>


Wenn Sie sich nicht sicher sind, können Sie immer einen Benutzer erstellen, der sich mit <code>caching_sha2_plugin</code> authentifiziert und ihn dann später mit diesem Befehl <code>ALTERN</code>:
Wenn Sie sich nicht sicher sind, können Sie immer einen Benutzer erstellen, der sich mit <code>caching_sha2_plugin</code> authentifiziert und ihn dann später mit diesem Befehl <code>ALTERN</code>
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
</syntaxhighlight>
</syntaxhighlight>


Nachdem Sie den neuen Benutzer erstellt haben, können Sie ihm die entsprechenden Berechtigungen erteilen.
Nachdem Sie den neuen Benutzer erstellt haben, können Sie ihm die entsprechenden Berechtigungen erteilen


== Berechtigungen erteilen ==
== Berechtigungen erteilen ==
Die allgemeine Syntax für die Gewährung von Benutzerprivilegien lautet wie folgt:
Die allgemeine Syntax für die Gewährung von Benutzerprivilegien lautet wie folgt
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
GRANT PRIVILEGE ON database.table TO 'username'@'host';
GRANT PRIVILEGE ON database.table TO 'username'@'host';
</syntaxhighlight>
</syntaxhighlight>


Der Wert in dieser Beispielsyntax definiert, welche Aktionen der Benutzer auf der angegebenen und durchführen darf.
Der Wert in dieser Beispielsyntax definiert, welche Aktionen der Benutzer auf der angegebenen und durchführen darf
* Sie können demselben Benutzer mehrere Berechtigungen in einem Befehl erteilen, indem Sie die einzelnen Befehle durch ein Komma trennen.
* Sie können demselben Benutzer mehrere Berechtigungen in einem Befehl erteilen, indem Sie die einzelnen Befehle durch ein Komma trennen
* Sie können einem Benutzer auch global Privilegien erteilen, indem Sie Sternchen (<code>*</code>) anstelle der Datenbank- und Tabellennamen eingeben.
* Sie können einem Benutzer auch global Privilegien erteilen, indem Sie Sternchen (<code>*</code>) anstelle der Datenbank- und Tabellennamen eingeben
* In SQL sind Sternchen Sonderzeichen, die für "alle" Datenbanken oder Tabellen stehen.
* In SQL sind Sternchen Sonderzeichen, die für "alle" Datenbanken oder Tabellen stehen


Zur Veranschaulichung: Der folgende Befehl gewährt einem Benutzer globale Berechtigungen zum <code>CREATE</code>, <code>ALTER</code> und <code>DROP</code> von Datenbanken, Tabellen und Benutzern sowie die Befugnis zum <code>INSERT</code>, <code>UPDATE</code> und <code>DELETE</code> von Daten aus jeder Tabelle auf dem Server.
Zur Veranschaulichung: Der folgende Befehl gewährt einem Benutzer globale Berechtigungen zum <code>CREATE</code>, <code>ALTER</code> und <code>DROP</code> von Datenbanken, Tabellen und Benutzern sowie die Befugnis zum <code>INSERT</code>, <code>UPDATE</code> und <code>DELETE</code> von Daten aus jeder Tabelle auf dem Server
* Es gibt dem Benutzer auch die Möglichkeit, Daten mit <code>SELECT</code> abzufragen, Fremdschlüssel mit dem <code>REFERENCES</code> Schlüsselwort zu erstellen und <code>FLUSH</code> Operationen mit dem <code>RELOAD</code> Privileg durchzuführen.
* Es gibt dem Benutzer auch die Möglichkeit, Daten mit <code>SELECT</code> abzufragen, Fremdschlüssel mit dem <code>REFERENCES</code> Schlüsselwort zu erstellen und <code>FLUSH</code> Operationen mit dem <code>RELOAD</code> Privileg durchzuführen
* Sie sollten den Benutzern jedoch nur die Berechtigungen erteilen, die sie benötigen, daher können Sie die Berechtigungen Ihrer eigenen Benutzer nach Bedarf anpassen.
* Sie sollten den Benutzern jedoch nur die Berechtigungen erteilen, die sie benötigen, daher können Sie die Berechtigungen Ihrer eigenen Benutzer nach Bedarf anpassen


Sie können die vollständige Liste der verfügbaren Rechte in der offiziellen MySQL-Dokumentation finden.
Sie können die vollständige Liste der verfügbaren Rechte in der offiziellen MySQL-Dokumentation finden


Führen Sie diese <code>GRANT</code>-Anweisung aus und ersetzen Sie durch den Namen Ihres eigenen MySQL-Benutzers, um Ihrem Benutzer diese Rechte zu gewähren:
Führen Sie diese <code>GRANT</code>-Anweisung aus und ersetzen Sie durch den Namen Ihres eigenen MySQL-Benutzers, um Ihrem Benutzer diese Rechte zu gewähren
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
</syntaxhighlight>
</syntaxhighlight>


Beachten Sie, dass diese Anweisung auch <code>WITH GRANT OPTION</code> enthält.
Beachten Sie, dass diese Anweisung auch <code>WITH GRANT OPTION</code> enthält
* Damit kann Ihr MySQL-Benutzer anderen Benutzern im System alle Rechte erteilen, die er hat.
* Damit kann Ihr MySQL-Benutzer anderen Benutzern im System alle Rechte erteilen, die er hat


; Warnung
; Warnung
: Einige Benutzer möchten ihrem MySQL-Benutzer vielleicht das <code>ALL PRIVILEGES</code>-Recht gewähren, was ihnen weitreichende Superuser-Rechte ähnlich denen des '''root'''-Benutzers gibt, etwa so:
: Einige Benutzer möchten ihrem MySQL-Benutzer vielleicht das <code>ALL PRIVILEGES</code>-Recht gewähren, was ihnen weitreichende Superuser-Rechte ähnlich denen des '''root'''-Benutzers gibt, etwa so
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
</syntaxhighlight>
</syntaxhighlight>


Solch weitreichende Privilegien '''sollten nicht leichtfertig vergeben werden''', da jeder, der Zugriff auf diesen MySQL-Benutzer hat, die vollständige Kontrolle über jede Datenbank auf dem Server hat.
Solch weitreichende Privilegien '''sollten nicht leichtfertig vergeben werden''', da jeder, der Zugriff auf diesen MySQL-Benutzer hat, die vollständige Kontrolle über jede Datenbank auf dem Server hat


In vielen Handbüchern wird empfohlen, den Befehl <code>FLUSH PRIVILEGES</code> unmittelbar nach einer <code>CREATE USER</code>- oder <code>GRANT</code>-Anweisung auszuführen, um die Berechtigungstabellen neu zu laden und sicherzustellen, dass die neuen Berechtigungen in Kraft gesetzt werden:
In vielen Handbüchern wird empfohlen, den Befehl <code>FLUSH PRIVILEGES</code> unmittelbar nach einer <code>CREATE USER</code>- oder <code>GRANT</code>-Anweisung auszuführen, um die Berechtigungstabellen neu zu laden und sicherzustellen, dass die neuen Berechtigungen in Kraft gesetzt werden
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;
</syntaxhighlight>
</syntaxhighlight>


Laut der offiziellen MySQL-Dokumentation wird die Datenbank jedoch, wenn Sie die Berechtigungstabellen indirekt mit einer Kontoverwaltungsanweisung wie <code>GRANT</code> ändern, die Berechtigungstabellen sofort wieder in den Speicher laden, was bedeutet, dass der Befehl <code>FLUSH PRIVILEGES</code> in unserem Fall nicht notwendig ist.
Laut der offiziellen MySQL-Dokumentation wird die Datenbank jedoch, wenn Sie die Berechtigungstabellen indirekt mit einer Kontoverwaltungsanweisung wie <code>GRANT</code> ändern, die Berechtigungstabellen sofort wieder in den Speicher laden, was bedeutet, dass der Befehl <code>FLUSH PRIVILEGES</code> in unserem Fall nicht notwendig ist
* Andererseits hat die Ausführung des Befehls keine negativen Auswirkungen auf das System.
* Andererseits hat die Ausführung des Befehls keine negativen Auswirkungen auf das System


Wenn Sie eine Genehmigung widerrufen müssen, ist die Struktur fast identisch mit der Erteilung der Genehmigung:
Wenn Sie eine Genehmigung widerrufen müssen, ist die Struktur fast identisch mit der Erteilung der Genehmigung
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
</syntaxhighlight>
</syntaxhighlight>


Beachten Sie, dass beim Entzug von Berechtigungen die Syntax verlangt, dass Sie <code>FROM</code> verwenden, anstatt <code>TO</code>, das Sie beim Erteilen der Berechtigungen verwendet haben.
Beachten Sie, dass beim Entzug von Berechtigungen die Syntax verlangt, dass Sie <code>FROM</code> verwenden, anstatt <code>TO</code>, das Sie beim Erteilen der Berechtigungen verwendet haben


Sie können die aktuellen Berechtigungen eines Benutzers überprüfen, indem Sie den Befehl <code>SHOW GRANTS</code> ausführen:
Sie können die aktuellen Berechtigungen eines Benutzers überprüfen, indem Sie den Befehl <code>SHOW GRANTS</code> ausführen
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
SHOW GRANTS FOR 'username'@'host';
SHOW GRANTS FOR 'username'@'host';
</syntaxhighlight>
</syntaxhighlight>


Genauso wie Sie Datenbanken mit <code>DROP</code> löschen können, können Sie <code>DROP</code> verwenden, um einen Benutzer zu löschen:
Genauso wie Sie Datenbanken mit <code>DROP</code> löschen können, können Sie <code>DROP</code> verwenden, um einen Benutzer zu löschen
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
DROP USER 'username'@'localhost';
DROP USER 'username'@'localhost';
</syntaxhighlight>
</syntaxhighlight>


Nachdem Sie Ihren MySQL-Benutzer erstellt und ihm Rechte gewährt haben, können Sie den MySQL-Client beenden:
Nachdem Sie Ihren MySQL-Benutzer erstellt und ihm Rechte gewährt haben, können Sie den MySQL-Client beenden
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
exit
exit
</syntaxhighlight>
</syntaxhighlight>


Um sich in Zukunft als Ihr neuer MySQL-Benutzer anzumelden, verwenden Sie einen Befehl wie den folgenden:
Um sich in Zukunft als Ihr neuer MySQL-Benutzer anzumelden, verwenden Sie einen Befehl wie den folgenden
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
mysql -u sammy -p
mysql -u sammy -p
</syntaxhighlight>
</syntaxhighlight>


Das <code>-p</code>-Flag veranlasst den MySQL-Client, Sie nach dem Passwort Ihres MySQL-Benutzers zu fragen, um sich zu authentifizieren.
Das <code>-p</code>-Flag veranlasst den MySQL-Client, Sie nach dem Passwort Ihres MySQL-Benutzers zu fragen, um sich zu authentifizieren


== Benutzer entfernen ==
== Benutzer entfernen ==
Um einen MySQL-Benutzer zu entfernen, können Sie den Befehl <code>DROP USER</code> verwenden.
Um einen MySQL-Benutzer zu entfernen, können Sie den Befehl <code>DROP USER</code> verwenden


Die Syntax für diesen Befehl lautet wie folgt:
Die Syntax für diesen Befehl lautet wie folgt
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
DROP USER 'username'@'host';
DROP USER 'username'@'host';
</syntaxhighlight>
</syntaxhighlight>


Ersetzen Sie durch den tatsächlichen Benutzernamen, den Sie entfernen möchten, und durch den Hostnamen oder die IP-Adresse, von der aus sich der Benutzer verbinden kann.
Ersetzen Sie durch den tatsächlichen Benutzernamen, den Sie entfernen möchten, und durch den Hostnamen oder die IP-Adresse, von der aus sich der Benutzer verbinden kann


Um etwa einen Benutzer namens "sammy" zu entfernen, der sich von "localhost" aus verbinden kann, würden Sie Folgendes verwenden:
Um etwa einen Benutzer namens "sammy" zu entfernen, der sich von "localhost" aus verbinden kann, würden Sie Folgendes verwenden
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
DROP USER 'sammy'@'localhost';
DROP USER 'sammy'@'localhost';
</syntaxhighlight>
</syntaxhighlight>


Nach der Ausführung dieses Befehls wird der angegebene Benutzer vom MySQL-Server entfernt.
Nach der Ausführung dieses Befehls wird der angegebene Benutzer vom MySQL-Server entfernt
* Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann.
* Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann
* Verwenden Sie diesen Befehl daher mit Vorsicht und nur, wenn Sie sicher sind, dass Sie den Benutzer entfernen möchten.
* Verwenden Sie diesen Befehl daher mit Vorsicht und nur, wenn Sie sicher sind, dass Sie den Benutzer entfernen möchten


Es ist auch wichtig zu wissen, dass Sie einen Benutzer, der derzeit mit dem MySQL-Server verbunden ist, nicht entfernen können.
Es ist auch wichtig zu wissen, dass Sie einen Benutzer, der derzeit mit dem MySQL-Server verbunden ist, nicht entfernen können
* Wenn Sie dies versuchen, erhalten Sie eine Fehlermeldung, die besagt, dass der Benutzer noch verbunden ist.
* Wenn Sie dies versuchen, erhalten Sie eine Fehlermeldung, die besagt, dass der Benutzer noch verbunden ist
* Sie müssen die Verbindung des Benutzers trennen, bevor Sie versuchen, ihn zu entfernen.
* Sie müssen die Verbindung des Benutzers trennen, bevor Sie versuchen, ihn zu entfernen


== Häufige Fehler und Fehlersuche ==
== Häufige Fehler und Fehlersuche ==


=== Zugriff wegen Benutzerfehler verweigert ===
=== Zugriff wegen Benutzerfehler verweigert ===
Der Fehler <code>Zugriff für Benutzer verweigert</code> tritt typischerweise auf, wenn ein Benutzer versucht, eine Verbindung zu einer MySQL-Datenbank mit falschen Anmeldeinformationen oder unzureichenden Rechten herzustellen.
Der Fehler <code>Zugriff für Benutzer verweigert</code> tritt typischerweise auf, wenn ein Benutzer versucht, eine Verbindung zu einer MySQL-Datenbank mit falschen Anmeldeinformationen oder unzureichenden Rechten herzustellen
* Dieser Fehler kann frustrierend sein, lässt sich aber in der Regel leicht beheben, indem die Anmeldeinformationen und Berechtigungen des Benutzers überprüft und angepasst werden.
* Dieser Fehler kann frustrierend sein, lässt sich aber in der Regel leicht beheben, indem die Anmeldeinformationen und Berechtigungen des Benutzers überprüft und angepasst werden


Gehen Sie folgendermaßen vor, um diesen Fehler zu beheben:
Gehen Sie folgendermaßen vor, um diesen Fehler zu beheben


; Überprüfen Sie die Anmeldedaten des Benutzers
; Überprüfen Sie die Anmeldedaten des Benutzers
Stellen Sie sicher, dass der Benutzername, das Passwort und der Host korrekt sind. Überprüfen Sie, ob der Benutzername und das Kennwort richtig geschrieben sind und ob der Host auf den richtigen Wert gesetzt ist (z.&nbsp;B.&nbsp;"localhost", "%" oder eine bestimmte IP-Adresse).
Stellen Sie sicher, dass der Benutzername, das Passwort und der Host korrekt sind. Überprüfen Sie, ob der Benutzername und das Kennwort richtig geschrieben sind und ob der Host auf den richtigen Wert gesetzt ist (z.&nbsp;B.&nbsp;"localhost", "%" oder eine bestimmte IP-Adresse)


; Privilegien prüfen
; Privilegien prüfen
Vergewissern Sie sich, dass der Benutzer über die notwendigen Rechte für den Zugriff auf die Datenbank verfügt.
Vergewissern Sie sich, dass der Benutzer über die notwendigen Rechte für den Zugriff auf die Datenbank verfügt
* Sie können dies tun, indem Sie den Befehl <code>SHOW GRANTS</code> ausführen, um die aktuellen Berechtigungen des Benutzers zu überprüfen:
* Sie können dies tun, indem Sie den Befehl <code>SHOW GRANTS</code> ausführen, um die aktuellen Berechtigungen des Benutzers zu überprüfen
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
SHOW GRANTS FOR 'username'@'localhost';
SHOW GRANTS FOR 'username'@'localhost';
</syntaxhighlight>
</syntaxhighlight>


Dadurch werden die dem Benutzer derzeit gewährten Rechte angezeigt.
Dadurch werden die dem Benutzer derzeit gewährten Rechte angezeigt
* Wenn der Benutzer nicht über die erforderlichen Berechtigungen verfügt, können Sie diese mit dem Befehl <code>GRANT</code> erteilen.
* Wenn der Benutzer nicht über die erforderlichen Berechtigungen verfügt, können Sie diese mit dem Befehl <code>GRANT</code> erteilen


; Spezifischer Datenbank- oder Tabellenzugriff
; Spezifischer Datenbank- oder Tabellenzugriff
Wenn der Benutzer versucht, auf eine bestimmte Datenbank oder Tabelle zuzugreifen, vergewissern Sie sich, dass dem Benutzer Berechtigungen für diese spezielle Datenbank oder Tabelle gewährt wurden.
Wenn der Benutzer versucht, auf eine bestimmte Datenbank oder Tabelle zuzugreifen, vergewissern Sie sich, dass dem Benutzer Berechtigungen für diese spezielle Datenbank oder Tabelle gewährt wurden


; Beispiel: Rechte für eine bestimmte Datenbank gewähren
; Beispiel: Rechte für eine bestimmte Datenbank gewähren
Zeile 191: Zeile 194:
</syntaxhighlight>
</syntaxhighlight>


Oder, um Privilegien für eine bestimmte Tabelle zu gewähren:
Oder, um Privilegien für eine bestimmte Tabelle zu gewähren
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table_name TO 'username'@'localhost';
GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table_name TO 'username'@'localhost';
</syntaxhighlight>
</syntaxhighlight>


Wenn Sie diese Schritte befolgen, sollten Sie in der Lage sein, den Fehler <code>Zugriff für Benutzer verweigert</code> zu beheben und sicherzustellen, dass der Benutzer den erforderlichen Zugriff auf die MySQL-Datenbank hat.
Wenn Sie diese Schritte befolgen, sollten Sie in der Lage sein, den Fehler <code>Zugriff für Benutzer verweigert</code> zu beheben und sicherzustellen, dass der Benutzer den erforderlichen Zugriff auf die MySQL-Datenbank hat


=== Benutzer kann sich nicht aus der Ferne verbinden ===
=== Benutzer kann sich nicht aus der Ferne verbinden ===
Um Remote-Verbindungen für einen Benutzer zu ermöglichen, stellen Sie sicher, dass das Benutzerkonto so konfiguriert ist, dass es Verbindungen von einem bestimmten Host oder einer IP-Adresse zulässt.
Um Remote-Verbindungen für einen Benutzer zu ermöglichen, stellen Sie sicher, dass das Benutzerkonto so konfiguriert ist, dass es Verbindungen von einem bestimmten Host oder einer IP-Adresse zulässt
* Dies kann geschehen, indem Sie dem Benutzer mit dem richtigen Hostnamen oder der richtigen IP-Adresse Berechtigungen erteilen.
* Dies kann geschehen, indem Sie dem Benutzer mit dem richtigen Hostnamen oder der richtigen IP-Adresse Berechtigungen erteilen


; Beispiel
; Beispiel
Zeile 207: Zeile 210:
</syntaxhighlight>
</syntaxhighlight>


Dies gewährt dem Benutzer 'username' alle Privilegien von einem beliebigen Rechner (%).
Dies gewährt dem Benutzer 'username' alle Privilegien von einem beliebigen Rechner (%)


=== Fehler 1396: Operation CREATE USER fehlgeschlagen ===
=== Fehler 1396: Operation CREATE USER fehlgeschlagen ===
Der Fehler 1396 tritt typischerweise auf, wenn versucht wird, einen bereits existierenden Benutzer zu erstellen.
Der Fehler 1396 tritt typischerweise auf, wenn versucht wird, einen bereits existierenden Benutzer zu erstellen
* Um diesen Fehler zu beheben, stellen Sie sicher, dass der Benutzer nicht bereits in der MySQL-Datenbank vorhanden ist.
* Um diesen Fehler zu beheben, stellen Sie sicher, dass der Benutzer nicht bereits in der MySQL-Datenbank vorhanden ist
* Wenn der Benutzer existiert, können Sie versuchen, das bestehende Benutzerkonto zu ändern, anstatt ein neues zu erstellen.
* Wenn der Benutzer existiert, können Sie versuchen, das bestehende Benutzerkonto zu ändern, anstatt ein neues zu erstellen
* Wenn Sie einen neuen Benutzer mit demselben Namen erstellen möchten, können Sie zuerst den bestehenden Benutzer löschen und dann den neuen erstellen.
* Wenn Sie einen neuen Benutzer mit demselben Namen erstellen möchten, können Sie zuerst den bestehenden Benutzer löschen und dann den neuen erstellen


Wenn Sie beispielsweise versuchen, einen Benutzer namens "newuser" zu erstellen, aber die Fehlermeldung 1396 erscheint, können Sie zunächst mit dem folgenden Befehl überprüfen, ob der Benutzer bereits existiert:
Wenn Sie beispielsweise versuchen, einen Benutzer namens "newuser" zu erstellen, aber die Fehlermeldung 1396 erscheint, können Sie zunächst mit dem folgenden Befehl überprüfen, ob der Benutzer bereits existiert
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
SELECT * FROM mysql.user WHERE User = 'newuser';
SELECT * FROM mysql.user WHERE User = 'newuser';
</syntaxhighlight>
</syntaxhighlight>


Wenn der Benutzer existiert, können Sie das bestehende Benutzerkonto mit dem folgenden Befehl löschen:
Wenn der Benutzer existiert, können Sie das bestehende Benutzerkonto mit dem folgenden Befehl löschen
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
DROP USER 'newuser'@'%';
DROP USER 'newuser'@'%';
</syntaxhighlight>
</syntaxhighlight>


Nachdem Sie den bestehenden Benutzer gelöscht haben, können Sie das neue Benutzerkonto mit dem folgenden Befehl erstellen:
Nachdem Sie den bestehenden Benutzer gelöscht haben, können Sie das neue Benutzerkonto mit dem folgenden Befehl erstellen
<syntaxhighlight lang="sql" highlight="1" copy>
<syntaxhighlight lang="sql" highlight="1" copy>
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
Zeile 273: Zeile 276:
! Datei !! Beschreibung
! Datei !! Beschreibung
|-
|-
| ||  
| ||
|-
|-
| ||  
| ||
|}
|}


Zeile 294: Zeile 297:
=== Dokumentation ===
=== Dokumentation ===
<!--
<!--
; Man-Page  
; Man-Page
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]


; Info-Pages  
; Info-Pages
-->
-->



Version vom 20. Juli 2026, 11:45 Uhr

Mysql/Benutzer


Benutzer anlegen

Bei der Installation erstellt MySQL ein root-Benutzerkonto, das Sie zur Verwaltung Ihrer Datenbank verwenden können

  • Dieser Benutzer hat volle Rechte auf dem MySQL-Server, d. h. er hat die vollständige Kontrolle über alle Datenbanken, Tabellen, Benutzer usw

Aus diesem Grund sollten Sie es vermeiden, dieses Konto außerhalb von Verwaltungsfunktionen zu verwenden

  • In diesem Schritt wird beschrieben, wie Sie den root MySQL-Benutzer verwenden, um ein neues Benutzerkonto zu erstellen und ihm Rechte zu gewähren
auth_socket

Seit MySQL 5.7

  • root MySQL-Benutzer benutzt auth_socket-Plugin statt sich mit einem Passwort zu authentifizieren
  • Dieses Plugin erfordert, dass der Name des Betriebssystembenutzers, der den MySQL-Client aufruft, mit dem Namen des im Befehl angegebenen MySQL-Benutzers übereinstimmt

Das bedeutet, dass Sie dem mysql-Befehl sudo voranstellen müssen, um ihn mit den Rechten des root-Ubuntu-Benutzers aufzurufen, damit Sie Zugriff auf den root-MySQL-Benutzer erhalten

sudo mysql
Hinweis
Wenn Ihr root MySQL-Benutzer so konfiguriert ist, dass er sich mit einem Passwort authentifiziert, müssen Sie einen anderen Befehl verwenden, um auf die MySQL-Shell zuzugreifen

Mit dem folgenden Befehl wird Ihr MySQL-Client mit normalen Benutzerrechten ausgeführt, und Sie erhalten nur dann Administratorrechte in der Datenbank, wenn Sie sich mit dem richtigen Passwort authentifizieren

mysql -u root -p

Sobald Sie Zugriff auf die MySQL-Eingabeaufforderung haben, können Sie einen neuen Benutzer mit einer CREATE USER-Anweisung erstellen

Allgemeinen Syntax

CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

Nach CREATE USER geben Sie einen Benutzernamen an

  • Direkt danach folgt ein @-Zeichen und dann der Hostname, von dem aus sich dieser Benutzer verbinden wird
  • Wenn Sie diesen Benutzer nur lokal von Ihrem Ubuntu-Server aus ansprechen wollen, können Sie localhost angeben
  • Es ist nicht immer notwendig, sowohl den Benutzernamen als auch den Host in einfache Anführungszeichen zu setzen, aber es kann helfen, Fehler zu vermeiden

Bei der Auswahl des Plugins für die Benutzerauthentifizierung haben Sie mehrere Möglichkeiten

  • Das bereits erwähnte auth_socket-Plugin kann praktisch sein, da es starke Sicherheit bietet, ohne dass gültige Benutzer ein Passwort eingeben müssen, um auf die Datenbank zuzugreifen
  • Aber es verhindert auch Remote-Verbindungen, was die Sache verkomplizieren kann, wenn externe Programme mit MySQL interagieren müssen

Als Alternative können Sie den WITH Teil der Syntax ganz weglassen, um den Benutzer mit dem Standard-Plugin von MySQL, caching_sha2_password, zu authentifizieren

  • Die MySQL-Dokumentation empfiehlt dieses Plugin für Benutzer, die sich mit einem Passwort anmelden wollen, da es starke Sicherheitsfunktionen bietet

Führen Sie den folgenden Befehl aus, um einen Benutzer zu erstellen, der sich mit caching_sha2_password authentifiziert. Ändern Sie in Ihren bevorzugten Benutzernamen und in ein sicheres Passwort Ihrer Wahl

CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Hinweis
Es gibt ein bekanntes Problem mit einigen PHP-Versionen, das Probleme mit caching_sha2_password verursacht
  • Wenn Sie diese Datenbank mit einer PHP-Anwendung - zum Beispiel phpMyAdmin - verwenden wollen, sollten Sie stattdessen einen Benutzer anlegen, der sich mit dem älteren, aber immer noch sicheren mysql_native_password-Plugin authentifiziert
CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Wenn Sie sich nicht sicher sind, können Sie immer einen Benutzer erstellen, der sich mit caching_sha2_plugin authentifiziert und ihn dann später mit diesem Befehl ALTERN

ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Nachdem Sie den neuen Benutzer erstellt haben, können Sie ihm die entsprechenden Berechtigungen erteilen

Berechtigungen erteilen

Die allgemeine Syntax für die Gewährung von Benutzerprivilegien lautet wie folgt

GRANT PRIVILEGE ON database.table TO 'username'@'host';

Der Wert in dieser Beispielsyntax definiert, welche Aktionen der Benutzer auf der angegebenen und durchführen darf

  • Sie können demselben Benutzer mehrere Berechtigungen in einem Befehl erteilen, indem Sie die einzelnen Befehle durch ein Komma trennen
  • Sie können einem Benutzer auch global Privilegien erteilen, indem Sie Sternchen (*) anstelle der Datenbank- und Tabellennamen eingeben
  • In SQL sind Sternchen Sonderzeichen, die für "alle" Datenbanken oder Tabellen stehen

Zur Veranschaulichung: Der folgende Befehl gewährt einem Benutzer globale Berechtigungen zum CREATE, ALTER und DROP von Datenbanken, Tabellen und Benutzern sowie die Befugnis zum INSERT, UPDATE und DELETE von Daten aus jeder Tabelle auf dem Server

  • Es gibt dem Benutzer auch die Möglichkeit, Daten mit SELECT abzufragen, Fremdschlüssel mit dem REFERENCES Schlüsselwort zu erstellen und FLUSH Operationen mit dem RELOAD Privileg durchzuführen
  • Sie sollten den Benutzern jedoch nur die Berechtigungen erteilen, die sie benötigen, daher können Sie die Berechtigungen Ihrer eigenen Benutzer nach Bedarf anpassen

Sie können die vollständige Liste der verfügbaren Rechte in der offiziellen MySQL-Dokumentation finden

Führen Sie diese GRANT-Anweisung aus und ersetzen Sie durch den Namen Ihres eigenen MySQL-Benutzers, um Ihrem Benutzer diese Rechte zu gewähren

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Beachten Sie, dass diese Anweisung auch WITH GRANT OPTION enthält

  • Damit kann Ihr MySQL-Benutzer anderen Benutzern im System alle Rechte erteilen, die er hat
Warnung
Einige Benutzer möchten ihrem MySQL-Benutzer vielleicht das ALL PRIVILEGES-Recht gewähren, was ihnen weitreichende Superuser-Rechte ähnlich denen des root-Benutzers gibt, etwa so
GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Solch weitreichende Privilegien sollten nicht leichtfertig vergeben werden, da jeder, der Zugriff auf diesen MySQL-Benutzer hat, die vollständige Kontrolle über jede Datenbank auf dem Server hat

In vielen Handbüchern wird empfohlen, den Befehl FLUSH PRIVILEGES unmittelbar nach einer CREATE USER- oder GRANT-Anweisung auszuführen, um die Berechtigungstabellen neu zu laden und sicherzustellen, dass die neuen Berechtigungen in Kraft gesetzt werden

FLUSH PRIVILEGES;

Laut der offiziellen MySQL-Dokumentation wird die Datenbank jedoch, wenn Sie die Berechtigungstabellen indirekt mit einer Kontoverwaltungsanweisung wie GRANT ändern, die Berechtigungstabellen sofort wieder in den Speicher laden, was bedeutet, dass der Befehl FLUSH PRIVILEGES in unserem Fall nicht notwendig ist

  • Andererseits hat die Ausführung des Befehls keine negativen Auswirkungen auf das System

Wenn Sie eine Genehmigung widerrufen müssen, ist die Struktur fast identisch mit der Erteilung der Genehmigung

REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

Beachten Sie, dass beim Entzug von Berechtigungen die Syntax verlangt, dass Sie FROM verwenden, anstatt TO, das Sie beim Erteilen der Berechtigungen verwendet haben

Sie können die aktuellen Berechtigungen eines Benutzers überprüfen, indem Sie den Befehl SHOW GRANTS ausführen

SHOW GRANTS FOR 'username'@'host';

Genauso wie Sie Datenbanken mit DROP löschen können, können Sie DROP verwenden, um einen Benutzer zu löschen

DROP USER 'username'@'localhost';

Nachdem Sie Ihren MySQL-Benutzer erstellt und ihm Rechte gewährt haben, können Sie den MySQL-Client beenden

exit

Um sich in Zukunft als Ihr neuer MySQL-Benutzer anzumelden, verwenden Sie einen Befehl wie den folgenden

mysql -u sammy -p

Das -p-Flag veranlasst den MySQL-Client, Sie nach dem Passwort Ihres MySQL-Benutzers zu fragen, um sich zu authentifizieren

Benutzer entfernen

Um einen MySQL-Benutzer zu entfernen, können Sie den Befehl DROP USER verwenden

Die Syntax für diesen Befehl lautet wie folgt

DROP USER 'username'@'host';

Ersetzen Sie durch den tatsächlichen Benutzernamen, den Sie entfernen möchten, und durch den Hostnamen oder die IP-Adresse, von der aus sich der Benutzer verbinden kann

Um etwa einen Benutzer namens "sammy" zu entfernen, der sich von "localhost" aus verbinden kann, würden Sie Folgendes verwenden

DROP USER 'sammy'@'localhost';

Nach der Ausführung dieses Befehls wird der angegebene Benutzer vom MySQL-Server entfernt

  • Beachten Sie, dass diese Aktion nicht rückgängig gemacht werden kann
  • Verwenden Sie diesen Befehl daher mit Vorsicht und nur, wenn Sie sicher sind, dass Sie den Benutzer entfernen möchten

Es ist auch wichtig zu wissen, dass Sie einen Benutzer, der derzeit mit dem MySQL-Server verbunden ist, nicht entfernen können

  • Wenn Sie dies versuchen, erhalten Sie eine Fehlermeldung, die besagt, dass der Benutzer noch verbunden ist
  • Sie müssen die Verbindung des Benutzers trennen, bevor Sie versuchen, ihn zu entfernen

Häufige Fehler und Fehlersuche

Zugriff wegen Benutzerfehler verweigert

Der Fehler Zugriff für Benutzer verweigert tritt typischerweise auf, wenn ein Benutzer versucht, eine Verbindung zu einer MySQL-Datenbank mit falschen Anmeldeinformationen oder unzureichenden Rechten herzustellen

  • Dieser Fehler kann frustrierend sein, lässt sich aber in der Regel leicht beheben, indem die Anmeldeinformationen und Berechtigungen des Benutzers überprüft und angepasst werden

Gehen Sie folgendermaßen vor, um diesen Fehler zu beheben

Überprüfen Sie die Anmeldedaten des Benutzers

Stellen Sie sicher, dass der Benutzername, das Passwort und der Host korrekt sind. Überprüfen Sie, ob der Benutzername und das Kennwort richtig geschrieben sind und ob der Host auf den richtigen Wert gesetzt ist (z. B. "localhost", "%" oder eine bestimmte IP-Adresse)

Privilegien prüfen

Vergewissern Sie sich, dass der Benutzer über die notwendigen Rechte für den Zugriff auf die Datenbank verfügt

  • Sie können dies tun, indem Sie den Befehl SHOW GRANTS ausführen, um die aktuellen Berechtigungen des Benutzers zu überprüfen
SHOW GRANTS FOR 'username'@'localhost';

Dadurch werden die dem Benutzer derzeit gewährten Rechte angezeigt

  • Wenn der Benutzer nicht über die erforderlichen Berechtigungen verfügt, können Sie diese mit dem Befehl GRANT erteilen
Spezifischer Datenbank- oder Tabellenzugriff

Wenn der Benutzer versucht, auf eine bestimmte Datenbank oder Tabelle zuzugreifen, vergewissern Sie sich, dass dem Benutzer Berechtigungen für diese spezielle Datenbank oder Tabelle gewährt wurden

Beispiel
Rechte für eine bestimmte Datenbank gewähren
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

Oder, um Privilegien für eine bestimmte Tabelle zu gewähren

GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.table_name TO 'username'@'localhost';

Wenn Sie diese Schritte befolgen, sollten Sie in der Lage sein, den Fehler Zugriff für Benutzer verweigert zu beheben und sicherzustellen, dass der Benutzer den erforderlichen Zugriff auf die MySQL-Datenbank hat

Benutzer kann sich nicht aus der Ferne verbinden

Um Remote-Verbindungen für einen Benutzer zu ermöglichen, stellen Sie sicher, dass das Benutzerkonto so konfiguriert ist, dass es Verbindungen von einem bestimmten Host oder einer IP-Adresse zulässt

  • Dies kann geschehen, indem Sie dem Benutzer mit dem richtigen Hostnamen oder der richtigen IP-Adresse Berechtigungen erteilen
Beispiel
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

Dies gewährt dem Benutzer 'username' alle Privilegien von einem beliebigen Rechner (%)

Fehler 1396: Operation CREATE USER fehlgeschlagen

Der Fehler 1396 tritt typischerweise auf, wenn versucht wird, einen bereits existierenden Benutzer zu erstellen

  • Um diesen Fehler zu beheben, stellen Sie sicher, dass der Benutzer nicht bereits in der MySQL-Datenbank vorhanden ist
  • Wenn der Benutzer existiert, können Sie versuchen, das bestehende Benutzerkonto zu ändern, anstatt ein neues zu erstellen
  • Wenn Sie einen neuen Benutzer mit demselben Namen erstellen möchten, können Sie zuerst den bestehenden Benutzer löschen und dann den neuen erstellen

Wenn Sie beispielsweise versuchen, einen Benutzer namens "newuser" zu erstellen, aber die Fehlermeldung 1396 erscheint, können Sie zunächst mit dem folgenden Befehl überprüfen, ob der Benutzer bereits existiert

SELECT * FROM mysql.user WHERE User = 'newuser';

Wenn der Benutzer existiert, können Sie das bestehende Benutzerkonto mit dem folgenden Befehl löschen

DROP USER 'newuser'@'%';

Nachdem Sie den bestehenden Benutzer gelöscht haben, können Sie das neue Benutzerkonto mit dem folgenden Befehl erstellen

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

Root-Passwort zurücksetzen

Wenn Sie über Administrator-/sudo-Zugriff auf Ihren Server verfügen, können Sie das MySQL-Root-Passwort zurücksetzen, indem Sie die Berechtigungstabellen umgehen

1. MySQL-Dienst anhalten
sudo systemctl stop mysql
2. MySQL ohne Passwortüberprüfung starten
sudo mysqld_safe --skip-grant-tables &
3. An MySQL anmelden

root ohne Passwort

mysql -u root
4. Privilegien aktualisieren

Bearbeitung ermöglichen

FLUSH PRIVILEGES;
5. Neues Passwort setzen
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOUR_NEW_PASSWORD';
6. MySQL normal neu starten
sudo systemctl restart mysql

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Projekt