GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Leitfaden für Anfänger zur MySQL-Benutzerverwaltung

Durch die Verwaltung von Benutzern in MySQL können Sie steuern, was Benutzer tun können und was nicht.

  • Erstellen Sie Benutzerkonten mit unterschiedlichen Berechtigungen, die ihrer Funktion entsprechen.
  • Vermeiden Sie die Verwendung des Root-Kontos – Beschränken Sie kompromittierte Anwendungen und schützen Sie sich vor Fehlern während der routinemäßigen Wartung.
  • Gewährleistung der Datenintegrität durch ordnungsgemäße Zuweisung individueller Benutzerrechte. Erlauben Sie autorisierten Benutzern, ihre Arbeit zu erledigen. Verhindern Sie, dass unbefugte Benutzer über ihre Berechtigungen hinaus auf Daten zugreifen.

Verifizierung des Benutzerkontos

Wenn Sie sich mit einem MySQL-Server verbinden und eine Abfrage ausführen, werden Sie authentifiziert und Ihre Aktivität autorisiert.

  • Authentifizierung :Verifiziert die Identität des Benutzers. Dies ist die erste Stufe der Zugangskontrolle. Sie müssen sich bei jeder Verbindung erfolgreich authentifizieren. Wenn Sie sich nicht authentifizieren, schlägt Ihre Verbindung fehl und Ihr Client trennt die Verbindung.
  • Autorisierung :Überprüft die Berechtigungen des Benutzers. Diese zweite Stufe der Zugriffskontrolle findet für jede Anforderung auf einer aktiven Verbindung statt, auf der die Authentifizierung erfolgreich war. Bei jeder Anfrage bestimmt MySQL, welche Operation Sie ausführen möchten, und prüft dann, ob Sie über ausreichende Berechtigungen dafür verfügen.

Benutzerkontoeinstellungen anzeigen

– Fragen Sie die MySQL-Datenbank ab, um Informationen zur Benutzeridentifikation anzuzeigen:

mysql> SELECT user, host, password
-> FROM mysql.user WHERE user='root'; 
+------+-----------+-------------------------------------------+ 
| user | host      | password                                  | 
+------+-----------+-------------------------------------------+ 
| root | localhost | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | 127.0.0.1 | *2447D497B9A6A15F2776055CB2D1E9F86758182F | 
| root | ::1       | *2447D497B9A6A15F2776055CB2D1E9F86758182F |
+------+-----------+-------------------------------------------+ 
3 rows in set (0.00 sec)

Alle Benutzerinformationen anzeigen, einschließlich Berechtigungen:

mysql> SELECT * FROM mysql.user\G 
***************** 1. row ***************** 
...
   Select_priv: Y
   Insert_priv: Y
   Update_priv: Y
   Delete_priv: Y
...

Die MySQL-Datenbank enthält die Informationen für alle Benutzerkonten auf dem Server. Um diese Informationen anzuzeigen, führen Sie die oben gezeigten SELECT-Anweisungen aus. Der Wert Y in einem *_priv Feld zeigt an, dass das Privileg aktiviert ist. Das Root-Konto hat vollen Zugriff. Alle seine Berechtigungsspalten haben den Wert Y.

Neben Berechtigungen enthält die Benutzertabelle weitere Informationen, die für den Authentifizierungsprozess nützlich sind. Beispielsweise können Sie in der folgenden Ausgabe sehen, dass der Tester-Benutzer:

  • hat ein Passwort (sichtbar in verschlüsselter Form in der Spalte Passwort) und dieses Passwort ist nicht abgelaufen (gekennzeichnet durch das N in der Spalte password_expired)
  • Hat keine definierten Ressourcengrenzen (angezeigt durch die Nullen in den max_*-Spalten)
  • Hat keine SSL- oder x509-Einstellungen (angezeigt durch die leeren Werte in den Spalten ssl_* und x509_*)
  • Verwendet das Plugin mysql_native_password zur Authentifizierung (Der Plugin-Name ist in der Plugin-Spalte aufgeführt.)
*************************** 1. row ***************************
                  Host: localhost
                  User: testuser
              Password: *14E65567ABDB5135D0CFD9A70B3032C179A49EE7
           Select_priv: Y
           Insert_priv: N
...
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type:
            ssl_cipher:
           x509_issuer:
          x509_subject:
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: mysql_native_password
 authentication_string:
      password_expired: N

Native Authentifizierung

Wenn Sie mit dem nativen Passwort-Authentifizierungs-Plug-in (dem Standard-Authentifizierungsmechanismus) eine Verbindung zu einem MySQL-Server herstellen, gleicht es den von Ihnen angegebenen Benutzernamen, den Host, von dem aus Sie sich verbinden, und Ihr Passwort mit Zeilen in der Tabelle mysql.user ab, um festzustellen, ob Sie können sich verbinden und Aktionen ausführen.

Um sich mit dem mysql-Client mit dem lokalen Server zu verbinden, geben Sie den Benutzernamen und das Passwort für das Konto an, das Sie verwenden möchten:

shell> mysql -u[username] -p[password]
Hinweis dass der Ihrem Benutzer in der mysql.user-Tabelle zugeordnete Hostname sich auf den Namen des Hosts bezieht, von dem aus Sie sich verbinden, und nicht auf den Server-Host.

Um eine Verbindung zu einem Server herzustellen, der nicht auf dem lokalen Host Ihres Clients installiert ist, geben Sie den Hostnamen des Servers an, mit dem Sie sich verbinden:

shell> mysql -u[username] -p[password] -h[server_host]

Erstellen eines Benutzerkontos

Ein Kontoname besteht aus einem Benutzernamen und dem Namen des Client-Hosts, von dem aus sich der Benutzer mit dem Server verbinden muss. Kontonamen haben das Format "Benutzername"@"Hostname ‘. Benutzernamen können bis zu 16 Zeichen lang sein. Sie müssen Benutzernamen und Hostnamen in einfache Anführungszeichen setzen, wenn diese Sonderzeichen wie Bindestriche enthalten. Wenn ein Wert als Bezeichner ohne Anführungszeichen gültig ist, sind die Anführungszeichen optional. Sie können jedoch immer Anführungszeichen verwenden.

Verwenden Sie zum Beispiel die CREATE USER…IDENTIFIED BY-Anweisung, um ein Konto zu erstellen:
– Für einen Benutzer namens jim
– Um eine Verbindung von localhost herzustellen
– Verwenden Sie das Passwort Abc123

CREATE USER 'jim'@'localhost' IDENTIFIED BY 'Abc123';

Vermeiden Sie mögliche Sicherheitsrisiken beim Erstellen von Konten:

  • Erstellen Sie keine Konten ohne Passwort.
  • Erstellen Sie keine anonymen Konten.
  • Vermeiden Sie nach Möglichkeit Platzhalter, wenn Sie Konto-Hostnamen angeben.

Hostnamenmuster

Verwenden Sie ein Hostmuster, das das % enthält oder _ Platzhalterzeichen, um ein Konto einzurichten, das es dem Benutzer ermöglicht, von jedem Host in einer gesamten Domäne oder einem Subnetz aus eine Verbindung herzustellen. Wenn Sie beim Schreiben einer Kontoverwaltungsanweisung den Host-Teil eines Kontonamens weglassen, nimmt MySQL einen Hostnamen von %.

an

Ein Hostwert von %.example.com stimmt mit jedem Host in der Domäne example.com überein. Ein Hostwert von 192.168.% entspricht jedem Host im Subnetz 192.168. Ein Hostwert von % stimmt mit jedem Host überein und erlaubt dem Benutzer, sich von jedem Host aus zu verbinden. Verwenden Sie eine IP-Adresse mit einer Subnetzmaske, damit der Benutzer von jedem Host mit einer Adresse innerhalb dieses Subnetzes eine Verbindung herstellen kann. Beispielsweise entspricht ein Wert von 10.0.0.0/255.255.255.0 jedem Host mit 10.0.0 in den ersten 24 Bits seiner IP-Adresse.

Vermeiden Sie die Verwendung von Platzhaltern in Hostnamen, es sei denn, dies ist unbedingt erforderlich und wird ordnungsgemäß geprüft, um Missbrauch oder versehentliche Offenlegung zu vermeiden. Führen Sie regelmäßige Überprüfungen wie folgt durch:

mysql> SELECT User, Host FROM mysql.user WHERE Host LIKE '%\%%';

Beispiele für Benutzernamen und Hostnamen:

  • [email protected]
  • john@’10.20.30.%’
  • john@’%.unseredomain.com’
  • john@’10.20.30.0/255.255.255.0′

Um ein anonymes Benutzerkonto anzugeben (d. h. ein Konto, das mit einem beliebigen Benutzernamen übereinstimmt), geben Sie eine leere Zeichenfolge für den Benutzernamensteil des Kontonamens an:

mysql> CREATE USER ''@'localhost';

Vermeiden Sie es, anonyme Konten zu erstellen, insbesondere solche, die kein Passwort haben (wie im obigen Beispiel). Dies trägt dazu bei, Sicherheitsrisiken zu vermeiden, die durch das Öffnen des Zugriffs auf die MySQL-Installation entstehen würden. Wenn ein Host zwei oder mehr Mustern entspricht, wählt MySQL das spezifischste Muster.

Festlegen des Kontopassworts

Die gebräuchlichste Methode, das Passwort eines bestehenden Kontos zu ändern, ohne seine Berechtigungen zu ändern, ist die Verwendung von PASSWORT EINSTELLEN Aussage. Um beispielsweise das Passwort für jim auf dem lokalen Host auf NewPass zu setzen, verwenden Sie die folgende Anweisung:

mysql> SET PASSWORD FOR jim@localhost = PASSWORD('NewPass');

Wenn Sie als Nicht-Root-Benutzer angemeldet sind und Ihr Benutzer nicht über das UPDATE-Privileg für die mysql-Datenbank verfügt, können Sie nur Ihr eigenes Passwort ändern. Verwenden Sie dazu die SET PASSWORD-Anweisung ohne die FOR-Klausel:

mysql> SET PASSWORD = PASSWORD('NewPass');

Wenn Sie SET PASSWORD verwenden, verwenden Sie das PASSWORD() Funktion zum Verschlüsseln des Passworts. Beachten Sie, dass die CREATE USER-Anweisung automatisch das von Ihnen angegebene Passwort verschlüsselt, sodass Sie die PASSWORD()-Funktion nicht verwenden müssen, wenn Sie einen Benutzer mit CREATE USER erstellen.

Verwenden Sie die folgenden mysqladmin-Befehle, um Passwörter von der Shell aus festzulegen:

shell> mysqladmin -u root password 'rootpass'
shell> mysqladmin -u root -h host_name password 'rootpass'

In den vorangegangenen Beispielen stellt „rootpass“ das Root-Passwort dar und „host_name“ ist der Name des Hosts, von dem aus das Root-Konto auf den MySQL-Server zugreift.

Passwörter bestätigen

Weisen Sie allen Benutzerkonten starke, eindeutige Passwörter zu. Vermeiden Sie leicht zu erratende Passwörter. Verwenden Sie die folgende SELECT-Anweisung, um Konten
ohne Passwörter aufzulisten:

SELECT Host, User FROM mysql.user WHERE Password = '';

So identifizieren Sie doppelte Passwörter:

SELECT User FROM mysql.user GROUP BY password HAVING count(user)>1;

Um das Passwort eines beliebigen Benutzers ablaufen zu lassen, verwenden Sie die folgende Abfrage:

ALTER USER jim@localhost PASSWORD EXPIRE;

Um die SELECT-Anweisungen in den obigen Beispielen abzusetzen, müssen Sie sich mit einem Benutzerkonto mit SELECT-Berechtigungen für das mysql-Schema oder die mysql.user-Tabelle verbinden. Sie können mehrere Konten haben, die für einen bestimmten Benutzernamen gelten. Wenn sich beispielsweise der Benutzer jim von zwei Standorten aus anmeldet und Sie Konten für jeden Standort einrichten, z. B. jim@localhost und jim@’192.168.14.38′, haben beide als jim identifizierten Konten möglicherweise dasselbe Passwort.

Sie können das Kennwort eines Benutzers mit der ALTER USER…PASSWORD EXPIRE-Anweisung verfallen lassen. Wenn Ihr Passwort abläuft, müssen Sie Ihr Passwort bei der nächsten Anmeldung mit einer SET PASSWORD-Anweisung ändern. Alle Anweisungen, die Sie ausführen und die nicht mit SET beginnen, geben einen Fehler zurück, bis Sie Ihr Passwort ändern, wie in diesem Beispiel:

mysql> SELECT * FROM City WHERE 1=2;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> SET PASSWORD = PASSWORD('new_pwd'); 
Query OK, 0 rows affected (0.01 sec) 

mysql> SELECT * FROM City WHERE 1=2;
Empty set (0.00 sec)

Manipulieren von Benutzerkonten

Verwenden Sie den BENUTZER UMBENENNEN Anweisung zum Umbenennen eines Benutzerkontos:

RENAME USER 'jim'@'localhost' TO 'james'@'localhost';

Die obige Abfrage ändert den Kontonamen eines bestehenden Kontos oder ändert entweder den Benutzernamen oder den Hostnamen des Kontonamens oder beides.

Verwenden Sie die DROP USER-Anweisung, um ein Benutzerkonto zu entfernen:

DROP USER 'jim'@'localhost';

Die obige Abfrage widerruft alle Berechtigungen für ein vorhandenes Konto und entfernt dann das Konto. Es löscht auch alle Datensätze für das Konto aus allen Grant-Tabellen, in denen sie vorhanden sind.

MySQL Pluggable Authentication verstehen
MySQL-Berechtigungen verstehen


Linux
  1. Opensource-Dokumentenverwaltung?

  2. MySQL-Benutzer- und Datenbankgrundlagen

  3. Einsteigerleitfaden für die Linux-Softwareverwaltung mit RPM

  4. CentOS / RHEL :Anfängerleitfaden zu cron

  5. Was ist der Zweck des Benutzers „mysql.sys@localhost“.

Handbuch für MySQL-Ereignisse und Ereignisplaner

Ein Leitfaden für Anfänger zu LVM

Ein Leitfaden für Anfänger zu Cron-Jobs

Ein Leitfaden für Anfänger zur Benutzerverwaltung auf Ubuntu Desktop und Server

Vollständiges Handbuch zur Benutzerverwaltung unter Linux

Die vollständige Anleitung zur Installation von MySQL auf Ubuntu