Willst du einen neuen User in MySQL anlegen, benötigst du neben dem Zugriff auf die Datenbank auch Ad­mi­nis­tra­tor­rech­te. Nur mit diesen Superuser-Pri­vi­le­gi­en kannst du Konten erstellen und Be­rech­ti­gun­gen verwalten. Überlege dir vorab, welche Zu­griffs­art nötig ist: Reicht reines Lesen aus oder sind Schreib­rech­te bzw. ad­mi­nis­tra­ti­ve Be­fug­nis­se er­for­der­lich?

MySQL-User erstellen

Direkt nach der In­stal­la­ti­on des Da­ten­bank­ma­nage­ment­sys­tems generiert MySQL ein Root-Konto. Damit hast du die volle Kontrolle über Da­ten­ban­ken, Tabellen und User. Suchst du Hilfe bei der Erst­ein­rich­tung? In unserem MySQL-Tutorial findest du alle Details.

Nutze deinen Root-Zugang, um weitere MySQL-User anzulegen und Rechte zu verteilen. Ein wichtiger Hinweis für Ubuntu-Systeme (ab Version 5.7): Der MySQL-Root ist oft so ein­ge­stellt, dass die Anmeldung via auth_socket-Plugin erfolgt statt per Passwort. Hierbei müssen die Namen des Sys­tem­be­nut­zers und des MySQL-Users identisch sein. Setze daher den Befehl sudo davor, um dich als Root ein­zu­log­gen:

$ sudo mysql
bash

Einen neuen Account legst du mit CREATE USER an. So de­fi­nierst du direkt Name und Passwort:

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

Ersetze username durch deinen Wunsch­na­men. Bei host gibst du den Host an, von dem die Ver­bin­dung kommt. Genügt der Zugriff über deinen lokalen Ubuntu-Server, nutzt du einfach localhost.

Beim Au­then­ti­fi­zie­rungs-Plugin hast du die Wahl: Das Plugin auth_socket gilt als sehr sicher, da immer ein Passwort verlangt wird. Es blockiert jedoch Remote-Ver­bin­dun­gen, was bei externen Pro­gram­men zu Mehr­auf­wand führen kann. Willst du das Standard-Plugin caching_sha2_password nutzen, lass den Teil WITH authentication_plugin weg. Der Befehl sieht dann so aus:

mysql> CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
bash

Sobald der User existiert, folgt die Zuweisung der Be­rech­ti­gun­gen.

Nut­zer­rech­te zuweisen mit MySQL create user

Die präzise Vergabe von Rechten ist die Basis für deine Da­ten­si­cher­heit. Der Stan­dard­be­fehl dafür lautet:

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

Mit PRIVILEGE de­fi­nierst du die erlaubten Aktionen. Typische Befehle sind:

  • CREATE: Erstellen von Da­ten­ban­ken oder Tabellen.
  • SELECT: Abrufen von Daten.
  • INSERT: Hin­zu­fü­gen neuer Da­ten­sät­ze.
  • UPDATE: Ändern be­stehen­der Einträge.
  • DELETE: Löschen einzelner Zeilen.
  • DROP: Entfernen kom­plet­ter Tabellen.

Du kannst auch mehrere Rechte kom­bi­nie­ren, indem du sie mit einem Komma trennst:

mysql> GRANT SELECT, INSERT, UPDATE ON database.table TO 'username'@'host';
bash

Sollen Rechte für alle Da­ten­ban­ken gelten, nutzt du das Platz­hal­ter-Symbol *. Im folgenden Beispiel darf der User überall Daten abfragen (SELECT), neu anlegen (INSERT) und be­ar­bei­ten (UPDATE):

mysql> GRANT SELECT, INSERT, UPDATE ON *.* TO 'username'@'host';
bash

Hast du CREATE USER oder GRANT genutzt, lade die Be­rech­ti­gungs­ta­bel­len mit FLUSH PRIVILEGES neu. So stellst du sicher, dass alle Än­de­run­gen sofort aktiv sind:

mysql> FLUSH PRIVILEGES;
bash

Gehe nach dem Mi­ni­mal­prin­zip vor: Gib nur so viele Rechte wie unbedingt nötig. Volle Kontrolle für jeden User bedeutet ein unnötiges Si­cher­heits­ri­si­ko.

MySQL-User verwalten: Rechte entziehen und löschen

Um Pri­vi­le­gi­en zu wi­der­ru­fen, nutzt du den REVOKE-Befehl. Er funk­tio­niert fast wie die Zuweisung, nutzt aber FROM statt TO:

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

Möchtest du prüfen, welche Rechte ein Account aktuell besitzt? Nutze diesen Befehl:

mysql> SHOW GRANTS FOR 'username'@'host';
bash

Soll ein Account komplett ver­schwin­den, hilft DROP:

mysql> DROP USER 'username'@'localhost';
bash
Zum Hauptmenü