Grundsätze und Nutzungsdetails für MySQL 8.0-Benutzer- und Rollenverwaltung

Grundsätze und Nutzungsdetails für MySQL 8.0-Benutzer- und Rollenverwaltung

Dieser Artikel beschreibt die Benutzer- und Rollenverwaltung von MySQL 8.0 anhand von Beispielen. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

MySQL 8.0 fügt viele neue Funktionen hinzu, darunter Rollenverwaltung in der Benutzerverwaltung.

Außerdem wurde die Standardmethode zur Passwortverschlüsselung von SHA1 auf SHA2 umgestellt und die 5.7-Einstellungen zur Deaktivierung von Benutzern und zum Ablauf von Benutzern hinzugefügt.

Dadurch wird die Benutzerverwaltung sowie die Berechtigungsverwaltung verbessert und zugleich die Benutzersicherheit erhöht.

In MySQL 8.0 werden die Dateien der Tabellen in der MySQL-Bibliothek in mysql.ibd im Datenstammverzeichnis zusammengeführt (Rekonstruktion der MySQL 8.0 Innodb-Engine).

Gleichzeitig kann MySQL 8.0 SET PERSIST verwenden, um Parameter dynamisch zu ändern und in der Konfigurationsdatei (mysqld-auto.cnf, gespeichert im JSON-String-Format) zu speichern.

Das sind gute Neuigkeiten für Datenbankadministratoren. Sie müssen sich keine Sorgen mehr darüber machen, dass sie vergessen, die Einstellungen in der Konfigurationsdatei zu speichern und die Einstellungen nach dem Neustart wiederherzustellen.

Ich habe die offizielle Dokumentation von MySQL 8.0 konsultiert und offizielle Beispiele verwendet, um die neue Verwaltungsmethode anzuzeigen.

1. MySQL-Benutzerverwaltung

1.1. Änderungen bei Authentifizierungs-Plugins und Kennwortverschlüsselungsmethoden In MySQL 8.0 ist caching_sha2_password das Standard-Authentifizierungs-Plugin anstelle von mysql_native_password in früheren Versionen.

Die Standardmethode zur Kennwortverschlüsselung ist SHA2.

Wenn Sie die vorherige Authentifizierungsmethode und die Kennwortverschlüsselungsmethode der vorherigen Version beibehalten möchten, müssen Sie sie in der Konfigurationsdatei ändern. Dynamische Änderungen werden noch nicht unterstützt und erfordern einen Neustart, damit sie wirksam werden: default_authentication_plugin = mysql_native_password.

Ändern Sie das vorhandene SHA2-Passwort in 8.0 in den SHA1-Modus:

ALTER USER 'root'@'127.0.0.1' IDENTIFIZIERT DURCH 'passowrd'. PASSWORT LÄUFT NIE AB;

#Ändern Sie die Verschlüsselungsregel so, dass sie nie abläuft

ALTER USER 'root'@'127.0.0.1' IDENTIFIZIERT MIT mysql_native_password DURCH 'Passwort';

#Aktualisieren Sie die Kennwortverschlüsselungsmethode des Benutzers auf die vorherige Version

FLUSH PRIVILEGES; #Berechtigungen aktualisieren

1.2 Benutzerautorisierung und Passwortänderung

Die Benutzerautorisierung in MySQL 8.0 unterscheidet sich von der in früheren Versionen. Allgemeine Autorisierungsanweisungen in alten Versionen melden in 8.0 Fehler:

MySQL-Versionen vor 8.0:

GRANT ALL ON *.* TO `wangwei`@`127.0.0.1` IDENTIFIZIERT DURCH 'passowrd' MIT GRANT-OPTION;

MySQL 8.0-Version:

# Erstellen Sie ein Konto und ein Passwort. CREATE USER `wangwei`@`127.0.0.1` IDENTIFIED BY 'passowrd';
# Berechtigungen erteilen GRANT ALL ON *.* TO `wangwei`@`127.0.0.1` WITH GRANT OPTION;
# Berechtigungen löschen. Alle Berechtigungen für Datenbankname.Tabellenname von „Benutzername“@„Host“ widerrufen.
# Passwort ändern ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Ihr Passwort';

Anlegen von Benutzern mit Ablaufzeit in MySQL 8.0:

  BENUTZER `wangwei`@`127.0.0.1` ERSTELLEN, IDENTIFIZIERT DURCH 'wangwei', PASSWORT-ABLAUFINTERVALL 90 TAGE;

  GRANT ALL ON *.* TO `wangwei`@`127.0.0.1` MIT GRANT-OPTION;

MySQL8.0 Benutzerpasswort ändern:

1.2. Verwaltung des Passwortablaufs

Um eine globale Richtlinie zum automatischen Ablauf von Passwörtern einzurichten, verwenden Sie die Systemvariable default_password_lifetime. Der Standardwert ist 0, wodurch das automatische Ablaufen von Passwörtern deaktiviert wird.

Wenn der Wert von default_password_lifetime eine positive Ganzzahl N ist, gibt er die zulässige Kennwortlebensdauer an, sodass das Kennwort alle N Tage geändert werden muss. Sie können es der Konfigurationsdatei hinzufügen:

1: Um eine globale Richtlinie einzurichten, dass Passwörter nach ungefähr sechs Monaten ablaufen, starten Sie den Server mit der folgenden Zeile in der Serverdatei my.cnf:

[mysqld]default_password_lifetime=180

2: Um eine globale Richtlinie einzurichten, sodass Passwörter nie ablaufen, setzen Sie default_password_lifetime auf 0:

[mysqld]default_password_lifetime=0

Dieser Parameter kann dynamisch gesetzt und gespeichert werden:

SET PERSIST Standardlebensdauer des Passworts = 180;SET PERSIST Standardlebensdauer des Passworts = 0;

Erstellen und Ändern von Benutzern mit Kennwortablauf, Beispiel für kontospezifische Ablaufzeiteinstellungen:

Kennwortänderung alle 90 Tage erforderlich:

BENUTZER 'wangwei'@'localhost' ERSTELLEN. PASSWORT-ABLAUFINTERVALL 90 TAGE;

ALTER USER 'wangwei'@'localhost' PASSWORT-ABLAUFINTERVALL 90 TAGE;

Deaktivieren des Kennwortablaufs:

BENUTZER 'wangwei'@'localhost' ERSTELLEN, PASSWORT LÄUFT NIE AB;

ALTER USER 'wangwei'@'localhost' PASSWORT LÄUFT NIE AB;

Befolgen Sie die globale Ablaufrichtlinie:

BENUTZER 'wangwei'@'localhost' ERSTELLEN. PASSWORT LÄUFT STANDARDMÄSSIG AB;

ALTER USER 'wangwei'@'localhost' PASSWORD EXPIRE DEFAULT; 1.3 MySQL-Benutzerkennwort-Wiederverwendungsrichtlinie

MySQL ermöglicht es Ihnen, die Wiederverwendung vorheriger Passwörter einzuschränken. Einschränkungen für die Wiederverwendung können auf Grundlage der Anzahl der Kennwortänderungen, der verstrichenen Zeit oder beidem festgelegt werden. Der Kennwortverlauf eines Kontos besteht aus Kennwörtern, die in der Vergangenheit vergeben wurden.

MySQL kann die Auswahl neuer Passwörter aus diesem Verlauf einschränken:

1. Wenn Sie ein Konto basierend auf der Anzahl der Kennwortänderungen einschränken, können Sie kein neues Kennwort aus der angegebenen Anzahl der aktuellsten Kennwörter auswählen. Wenn beispielsweise die Mindestanzahl der Kennwortänderungen auf 3 festgelegt ist, darf das neue Kennwort nicht mit einem der letzten 3 Kennwörter identisch sein.

2. Wenn das Konto aufgrund zeitlicher Einschränkungen gesperrt ist, ist es nicht möglich, aus den neuen Passwörtern im Verlauf, die nicht älter als die angegebene Anzahl von Tagen sind, ein neues Passwort auszuwählen. Wenn das Kennwort-Wiederverwendungsintervall beispielsweise auf 60 eingestellt ist, darf das neue Kennwort nicht zwischen den in den letzten 60 Tagen ausgewählten Kennwörtern liegen.

Hinweis: Leere Passwörter werden nicht in der Passworthistorie erfasst und können jederzeit wiederverwendet werden.

Um eine globale Richtlinie zur Kennwortwiederverwendung einzurichten, verwenden Sie die Systemvariablen password_history und password_reuse_interval. Um Variablenwerte beim Serverstart anzugeben, definieren Sie diese in der Serverdatei my.cnf.

Beispiel:

Um die Wiederverwendung der letzten 6 Passwörter oder aller Passwörter, die älter als 365 Tage sind, zu unterbinden, fügen Sie diese Zeilen in die my.cnf-Datei Ihres Servers ein:

[mysqld]Passwortverlauf=6Passwort-Wiederverwendungsintervall=365

Um die Konfiguration dynamisch festzulegen und zu speichern, verwenden Sie eine Anweisung wie diese:

SET PERSIST Kennwortverlauf = 6;

SET PERSIST password_reuse_interval = 365;2. Rollenverwaltung in MySQL 8.0

Eine MySQL-Rolle ist eine benannte Sammlung von Berechtigungen. Wie für Benutzerkonten können auch für Rollen Berechtigungen erteilt und entzogen werden.

Einem Benutzerkonto können Rollen zugewiesen werden, wobei dem Konto die mit der jeweiligen Rolle verknüpften Berechtigungen erteilt werden. Wenn einem Benutzer Rollenberechtigungen erteilt werden, verfügt der Benutzer über die Berechtigungen der Rolle.

In der folgenden Liste sind die von MySQL bereitgestellten Funktionen zur Rollenverwaltung zusammengefasst:

  • Erstellen und Löschen von Rollen „CREATE ROLE“ und „DROP ROLE“;
  • Mit GRANT und REVOKE können Sie Benutzern und Rollen Berechtigungen zuweisen bzw. entziehen.
  • SHOW GRANTS zeigt Berechtigungen und Rollenzuweisungen für Benutzer und Rollen an;
  • SET DEFAULT ROLE gibt an, welche Kontorollen standardmäßig aktiv sind;
  • SET ROLE ändert die aktive Rolle in der aktuellen Sitzung.
  • Die Funktion CURRENT_ROLE() zeigt die aktiven Rollen in der aktuellen Sitzung an.

2.1 Rollen erstellen und Benutzerrollenberechtigungen erteilen

Betrachten Sie die folgenden Szenarien:

  • Die Anwendung verwendet eine Datenbank namens app_db.
  • Mit der Anwendung können Entwickler- und Administratorkonten verknüpft sein, die die Anwendung erstellen und verwalten.
  • Entwickler benötigen vollen Zugriff auf die Datenbank. Manche Benutzer benötigen nur Leseberechtigungen, während andere Lese-/Schreibberechtigungen benötigen.

Um die Berechtigungen einer Rolle eindeutig zu unterscheiden, erstellen Sie eine Rolle mit dem Namen des erforderlichen Berechtigungssatzes. Durch die Vergabe der entsprechenden Rollen können Sie Benutzerkonten problemlos die erforderlichen Berechtigungen erteilen.

Um eine Rolle zu erstellen, verwenden Sie CREATE ROLE:

ROLLE „App-Entwickler“, „App-Read“, „App-Write“ erstellen;

Rollennamen sind den Namen von Benutzerkonten sehr ähnlich und bestehen im Format aus einem Benutzerteil und einem Hostteil. Wenn der Host-Teil weggelassen wird, ist der Standardwert %. Die Benutzer- und Hostteile müssen nicht in Anführungszeichen gesetzt werden, sofern sie keine Sonderzeichen enthalten. Anders als bei Kontonamen darf der Benutzerteil eines Rollennamens nicht leer sein. Um einer Rolle Berechtigungen zuzuweisen, verwenden Sie die gleiche Syntax wie beim Zuweisen von Berechtigungen zu einem Benutzer:

GRANT ALL ON app_db.* TO ‚app_developer‘; GRANT SELECT ON app_db.* TO ‚app_read‘; GRANT INSERT, UPDATE, DELETE ON app_db.* TO ‚app_write‘; CREATE ROLE ‚app_developer‘, ‚app_read‘, ‚app_write‘;

Nehmen wir nun an, dass Sie zunächst ein Entwicklerkonto, zwei Benutzer, die nur Lesezugriff benötigen, und einen Benutzer, der Lese-/Schreibzugriff benötigt.

Erstellen Sie einen Benutzer mit CREATEUSER:

ERSTELLEN SIE BENUTZER „dev1“@„localhost“, IDENTIFIZIERT DURCH „dev1pass“;
ERSTELLEN SIE BENUTZER 'read_user1'@'localhost' IDENTIFIZIERT DURCH 'read_user1pass';
ERSTELLEN SIE BENUTZER 'read_user2'@'localhost' IDENTIFIZIERT DURCH 'read_user2pass';
ERSTELLEN SIE BENUTZER 'rw_user1'@'localhost' IDENTIFIZIERT DURCH 'rw_user1pass';

Um jedem Benutzer die benötigten Berechtigungen zuzuweisen, können Sie eine GRANT-Anweisung derselben Form wie gerade gezeigt verwenden. Dazu müssen Sie jedoch die individuellen Berechtigungen jedes Benutzers auflisten.

Verwenden Sie stattdessen die alternative GRANT-Syntax, die das Zuweisen von Rollen anstelle von Berechtigungen ermöglicht:

GRANT 'app_developer' TO 'dev1'@'localhost';GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';

Kombinieren Sie die für die Rolle erforderlichen Lese- und Schreibberechtigungen und erteilen Sie dem Benutzer rw_user1 in GRANT Lese- und Schreibberechtigungen für die Rolle.

Die Syntax für GRANT zum Autorisieren von Rollen unterscheidet sich von der Syntax zum Autorisieren von Benutzern: Es gibt ein ON, um zwischen Rollen- und Benutzerautorisierung zu unterscheiden, mit ON für die Benutzerautorisierung und ohne ON für die Zuweisung von Rollen.

Da die Syntax unterschiedlich ist, können Sie die Zuweisung von Benutzerberechtigungen und Rollen nicht in derselben Anweisung kombinieren. (Das Zuweisen von Berechtigungen und Rollen an Benutzer ist zulässig, es müssen jedoch separate GRANT-Anweisungen verwendet werden, wobei die Syntax jeder Anweisung mit der der Berechtigung übereinstimmen muss.)

2.2 Rollenberechtigungen prüfen

Um die einem Benutzer zugewiesenen Berechtigungen zu überprüfen, verwenden Sie SHOW GRANTS. Zum Beispiel:

mysql> GRANTS FÜR 'dev1'@'localhost' ANZEIGEN;

Allerdings werden die einzelnen gewährten Rollen angezeigt, ohne dass die Berechtigungen, die die Rolle repräsentiert, ersichtlich sind. Wenn Sie Rollenberechtigungen anzeigen möchten, fügen Sie ein USING hinzu, um Folgendes anzuzeigen:

mysql> GRANTS FÜR ‚dev1‘@‚localhost‘ UNTER VERWENDUNG VON ‚app_developer‘ ANZEIGEN;

Dasselbe gilt für die Authentifizierung anderer Benutzertypen:

mysql> GRANTS FÜR 'read_user1'@'localhost' MIT 'app_read' ANZEIGEN;

2.3 Eine Rolle oder Rollenberechtigungen widerrufen

Rollen können einem Benutzer genauso zugewiesen wie einem Konto wieder entzogen werden:

Rolle vom Benutzer widerrufen;

Mit REVOKE können Rollenberechtigungen geändert werden. Dies betrifft nicht nur die Berechtigungen der Rolle selbst, sondern auch die Berechtigungen aller Benutzer, denen diese Rolle zugewiesen ist. Angenommen, Sie möchten allen Benutzern vorübergehend nur Leserechte gewähren. Verwenden Sie REVOKE, um der Rolle „app_write“ die Änderungsberechtigung zu entziehen:

WIDERRUF VON INSERT, UPDATE, DELETE ON app_db.* VON ‚app_write‘;

Tatsächlich verfügt eine bestimmte Rolle über keinerlei Berechtigungen, wie man mit SHOW GRANTS sehen kann (diese Anweisung kann mit Rollen verwendet werden, nicht nur um die einem Benutzer zur Verfügung stehenden Berechtigungen abzufragen):

mysql> GRANTS FÜR „app_write“ ANZEIGEN;

Das Entziehen von Berechtigungen für eine Rolle wirkt sich auf die Berechtigungen aller Benutzer in dieser Rolle aus. Daher verfügt rw_user1 jetzt nicht mehr über Berechtigungen zum Ändern von Tabellen (die Berechtigungen INSERT, UPDATE und DELETE sind weg):

mysql> GRANTS FÜR 'rw_user1'@'localhost' ANZEIGEN UNTER VERWENDUNG von 'app_read', 'app_write';

Tatsächlich wurde der Lese-/Schreibbenutzer rw_user1 zu einem Nur-Lese-Benutzer. Dies geschieht auch für jeden anderen Benutzer, dem die Rolle „app_write“ zugewiesen ist. Dies veranschaulicht die Möglichkeit, Berechtigungen mithilfe von Rollen zu ändern, ohne einzelne Konten ändern zu müssen.

Um die Bearbeitungsberechtigungen der Rolle wiederherzustellen, erteilen Sie sie einfach erneut:

GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';

Jetzt verfügt rw_user1 wieder über Änderungsberechtigungen, genau wie jedes andere Konto, dem die Rolle „app_write“ zugewiesen wurde.

2.4 Löschen einer Rolle

Um eine Rolle zu entfernen, verwenden Sie DROP ROLE:

DROP ROLE „app_read“, „app_write“;

Durch das Löschen einer Rolle wird die Rolle von jedem Konto widerrufen, das sie gewährt hat.

2.5 Praktische Anwendung von Rollen und Benutzern

Angenommen, ein Legacy-Anwendungsentwicklungsprojekt wurde begonnen, bevor es in MySQL Rollen gab, sodass allen mit dem Projekt verknüpften Benutzern die Berechtigungen direkt zugewiesen wurden (und nicht Rollenberechtigungen). Einer der Accounts ist der Entwickler-Benutzer, dem zunächst folgende Berechtigungen erteilt wurden:

ERSTELLEN SIE BENUTZER 'old_app_dev'@'localhost' IDENTIFIZIERT DURCH 'old_app_devpass'; GRANT ALL ON old_app.* TO 'old_app_dev'@'localhost';

Wenn dieser Entwickler das Projekt verlässt, kann es erforderlich sein, anderen Benutzern Berechtigungen zuzuweisen. Wenn mehrere Personen am Projekt beteiligt sind, sind möglicherweise mehrere Benutzer erforderlich. Hier sind einige Möglichkeiten, dieses Problem zu lösen:

  • Ohne Verwendung von Rollen: Ändern Sie das Kontokennwort, sodass der ursprüngliche Entwickler es nicht verwenden kann, und lassen Sie den neuen Entwickler dieses Konto verwenden:

ALTER USER 'old_app_dev'@'localhost' IDENTIFIZIERT DURCH 'new_password';

  • Rollen verwenden: Sperren Sie das Konto, um zu verhindern, dass jemand damit eine Verbindung zum Server herstellt:

ALTER USER 'old_app_dev'@'localhost' KONTOSPERRE;

Das Konto wird dann als Rolle behandelt. Erstellen Sie für jeden neuen Entwickler, der ein neues Projekt entwickelt, ein neues Konto und weisen Sie es seinem ursprünglichen Entwicklerkonto zu:

ERSTELLEN SIE BENUTZER 'new_app_dev1'@'localhost' IDENTIFIZIERT DURCH 'new_password'; GRANT 'old_app_dev'@'localhost' AN 'new_app_dev1'@'localhost';

Dies hat zur Folge, dass dem neuen Konto die Berechtigungen des ursprünglichen Entwicklerkontos zugewiesen werden.

Die Benutzer- und Rollenverwaltung von MySQL 8.0 ähnelt immer mehr der von Oracle. 8.0 bietet viele neue Funktionen, und die Änderungen sind immer noch sehr umfangreich. DBAs müssen weiterhin lernen und testen, ihr Verständnis der neuen MySQL-Version aktualisieren und die MySQL-Datenbank besser bedienen und warten. In der Zukunft sind MySQL-Datenbankautonomie und intelligente Datenbanken unvermeidliche Entwicklungstrends, die für DBAs sowohl Erleichterung als auch Herausforderung bedeuten.

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der neuen Funktion ROLE in MySQL 8
  • Einführung in MySQL-Rollenfunktionen

<<:  Ein Artikel bringt Ihnen bei, sauberen JavaScript-Code zu schreiben

>>:  Implementierung der Bindungskonfiguration für duale Netzwerkkarten im Linux-System

Artikel empfehlen

Zusammenfassung der Implementierungsmethoden und Punkte der H5-Wakeup-APP

Inhaltsverzeichnis Vorwort Zur APP-Methode spring...

Führen Sie die Schritte zur Verwendung von mock.js im Vue-Projekt aus

Verwenden von mock.js im Vue-Projekt Auswahl des ...

Beispiel für die Bereitstellung einer Laravel-Anwendung mit Docker

Das in diesem Artikel verwendete PHP-Basisimage i...

Eine einfache Methode zum Zusammenführen und Entfernen doppelter MySQL-Tabellen

Szenario: Die gecrawlten Daten erzeugen eine Date...

Verwenden Sie js, um js-Funktionen in Iframe-Seiten aufzurufen

In letzter Zeit habe ich jeden Tag an meinen Absch...

Detaillierte Analyse klassischer Fragen zu JavaScript-Rekursionsfällen

Inhaltsverzeichnis Was ist Rekursion und wie funk...

Lösung zur inkonsistenten Anzeige der Cursorgröße im Eingabefeld

Die Cursorgröße im Eingabefeld ist inkonsistent De...