Zum Inhalt springen

Mysql/Benutzer

Aus Foxwiki
Version vom 31. Oktober 2025, 07:29 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Einen neuen 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 '…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Einen neuen 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.

In Ubuntu-Systemen, auf denen MySQL 5.7 (und spätere Versionen) läuft, ist der root MySQL-Benutzer standardmäßig so eingestellt, dass er sich mit dem auth_socket-Plugin statt mit einem Passwort authentifiziert. 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. Diese folgen dieser 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 für einen Benutzer 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.

Entfernen eines MySQL-Benutzers

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 zum Beispiel 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

1. 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. Zum Beispiel, um Rechte für eine bestimmte Datenbank zu 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.

2. 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. Zum Beispiel:

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';

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

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