Heute ist Sonntag. Ich war morgens eine Weile faul und bin etwas spät aufgestanden. Da ich mittags nichts zu tun hatte, habe ich mir das Berechtigungskontrollmodul in MySQL noch einmal angesehen. Wenn ich zurückblicke, gibt es noch viele Details, die ich sehr mitgenommen habe. Ich werde sie hier für Ihre spätere Überprüfung aufzeichnen. 1. Globale EbeneGlobale Berechtigungen gelten für alle Datenbanken auf einem bestimmten Server. Diese Berechtigungen werden in der Tabelle mysql.user gespeichert und mit den Methoden grant all on *.* und revoke all on *.* erteilt oder entzogen. 2. DatenbankebeneDatenbankberechtigungen gelten für alle Objekte in einer bestimmten Datenbank, einschließlich Tabellenobjekten und gespeicherten Prozeduren. Diese Berechtigungen werden in der Tabelle mysql.db gespeichert. Datenbankberechtigungen können mit grant all on db_name.* oder der entsprechenden Methode revoke erteilt und widerrufen werden. 3. OberflächenniveauTabellenberechtigungen gelten für alle Spalten einer bestimmten Tabelle. Diese Berechtigungen werden in der MySQL-Tabelle tables_priv gespeichert. Berechtigungen werden im Allgemeinen mit grant all auf db_name.tbl_name und der entsprechenden revoke-Anweisung erteilt oder entzogen. 4. Berechtigungen auf SpaltenebeneBerechtigungen auf Spaltenebene gelten für bestimmte Spalten in einer bestimmten Tabelle. Diese Berechtigungen werden in der Tabelle mysql.columns_priv gespeichert. Da diese Berechtigung nicht häufig verwendet wird, folgt hier ein Beispiel, wie sie erteilt wird: Zuerst erstellen wir einen Benutzer mit ausgewählten Berechtigungen für die Tabelle yeyztest.test1: mysql:mysql 19:35:38>>Berechtigungen für dba_yeyz@'192.168.18.%' anzeigen; +-------------------------------------------------------------------+ | Zuschüsse für [email protected].% | +-------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'dba_yeyz'@'192.168.18.%' | | GRANT SELECT ON `yeyztest`.`test1` TO 'dba_yeyz'@'192.168.18.%' | +-------------------------------------------------------------------+ 2 Zeilen im Satz (0,00 Sek.) Dann aktualisieren wir eine Feld-ID in Test1 und das Ergebnis ist wie folgt: mysql> wähle * aus test1; +-----------------+ |Ich würde| +-----------------+ | 22 | | 3333333333333 | +-----------------+ 2 Zeilen im Satz (0,00 Sek.) mysql> Update Test1 setze ID=2, wobei ID=22; FEHLER 1142 (42000): UPDATE-Befehl für Benutzer 'dba_yeyz'@'192.168.18.**' für Tabelle 'test1' verweigert Natürlich können wir es nicht aktualisieren. Zu diesem Zeitpunkt verwenden wir das Root-Konto, um dem dba_yeyz-Konto eine Berechtigung für die ID-Spalte zu erteilen, und sehen uns dann die Ergebnisse an: mysql:mysql 19:38:38>>Berechtigungen für dba_yeyz@'192.168.18.%' anzeigen; +-------------------------------------------------------------------+ | Zuschüsse für [email protected].% | +-------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'dba_yeyz'@'192.168.18.%' | | GRANT SELECT ON `yeyztest`.`test1` TO 'dba_yeyz'@'192.168.18.%' | | GRANT SELECT, UPDATE (id) ON `yeyztest`.`test1` TO 'dba_yeyz'@'192.168.18.%' | +-------------------------------------------------------------------+ 3 Zeilen im Satz (0,00 Sek.) Hier müssen wir auf die Anweisung achten, die dem Feld Berechtigungen hinzufügt, und zwar: Gewähren Sie ein Update (ID) für yeyztest.test1 an XXXXXX Das heißt, nach der Berechtigung folgt der Name des Feldes. Zu diesem Zeitpunkt fragen wir die columns_priv-Tabelle ab und sehen, dass die Datensätze lauten: mysql:mysql 19:39:46>>Wählen Sie * aus Spaltenpriv; +--------------+----------+----------+-------------+-------------+-------------+---------------------+-------------+ | Host | Db | Benutzer | Tabellenname | Spaltenname | Zeitstempel | Spaltenpriv | +--------------+----------+----------+-------------+-------------+-------------+---------------------+-------------+ | 192.168.18.% | yeyztest | dba_yeyz | test1 | ID | 0000-00-00 00:00:00 | Aktualisieren | +--------------+----------+----------+-------------+-------------+-------------+---------------------+-------------+ 1 Zeile im Satz (0,00 Sek.) Führen Sie den Aktualisierungsvorgang mit dba_yeyz erneut aus. Das Ergebnis können Sie sich ansehen: mysql> Update Test1 setze ID=2, wobei ID=22; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 mysql> wähle * aus test1; +-----------------+ |Ich würde| +-----------------+ | 2 | | 3333333333333 | +-----------------+ 2 Zeilen im Satz (0,00 Sek.) Die Spalte mit der ID=22 wurde erfolgreich in die ID=2 geändert. 5. UnterprogrammebeneDie Berechtigungen „Routine erstellen“, „Routine ändern“, „Ausführen“ und „Erteilen“ gelten für gespeicherte Routinen. Diese Berechtigungen können auf globaler Ebene und auf Datenbankebene erteilt und in mysql.procs_priv gespeichert werden. Wenn der Client eine Anfrage initiiert, sieht das Flussdiagramm der Überprüfung der Anfrage durch den MySQL-Server wie folgt aus: Ich werde nacheinander einige der Einzelheiten auflisten, die ich heute gesehen habe, und hoffe, dass sie für alle hilfreich sind: 1. In MySQL Version 5.7.16 gibt es in der MySQL-Systembibliothek keine Host-Tabelle. Es gibt nur fünf Tabellen zur Berechtigungssteuerung, nämlich user, db, table_priv, proc_priv und column_priv. 2. Der Primärschlüssel der mysql.user-Tabelle besteht aus Benutzer und Host. Schauen wir uns die Tabellenstruktur an: [email protected]:mysql 19:44:56>>zeigen, erstellen Sie die Tabelle mysql.user\G *************************** 1. Reihe *************************** Tabelle: Benutzer Tabelle erstellen: CREATE TABLE `user` ( `Host` char(60) COLLATE utf8_bin NICHT NULL DEFAULT '', `Benutzer` char(32) COLLATE utf8_bin NOT NULL DEFAULT '', ---------------Autorisierungsfelder (29)-------------- `Select_priv` enum('N','Y') ZEICHENSATZ utf8 NICHT NULL STANDARD 'N', ......Hier weggelassen---------------Sicherheitsfelder (4)--------------- `ssl_type` enum('','BELIEBIG','X509','ANGEGEBEN') ZEICHENSATZ utf8 NICHT NULL STANDARD '', `ssl_cipher`-Blob NICHT NULL, `x509_issuer` Blob NICHT NULL, `x509_subject`-Blob NICHT NULL, ---------------Ressourcenkontrollfelder (4)-------------- `max_questions` int(11) unsigned NOT NULL DEFAULT '0', `max_updates` int(11) unsigned NOT NULL DEFAULT '0', `max_connections` int(11) unsigned NOT NULL DEFAULT '0', `max_user_connections` int(11) unsigned NICHT NULL STANDARD '0', --------------Plugin-Feld (1 Element)--------------- `plugin` char(64) COLLATE utf8_bin NOT NULL DEFAULT 'mysql_native_password', --------------Passwortfelder (5)-------------- `authentication_string` Text COLLATE utf8_bin, `password_expired` enum('N','Y') ZEICHENSATZ utf8 NICHT NULL STANDARD 'N', `password_last_changed` Zeitstempel NULL DEFAULT NULL, `password_lifetime` smallint(5) unsigned DEFAULT NULL, `account_locked` enum('N','Y') ZEICHENSATZ utf8 NICHT NULL STANDARD 'N', PRIMÄRSCHLÜSSEL (`Host`,`Benutzer`) -------------Gemeinsamer Primärschlüssel, Host zuerst----------- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Benutzer und globale Berechtigungen' 1 Zeile im Satz (0,00 Sek.) 3. Die Tabelle tables_priv verfügt nur über die folgenden Berechtigungen, d. h. Berechtigungen für die Tabelle: auswählen, einfügen, aktualisieren, löschen, löschen, erstellen, ändern, gewähren, referenzieren, indizieren, Ansicht erstellen, Ansicht anzeigen, auslösen; Die Berechtigungen in der columns_priv-Tabelle sind nur die folgenden vier: select, insert, update, references 4. Es gibt grundsätzlich mehrere Möglichkeiten, das Passwort eines Benutzers zu ändern: Passwort für Benutzer@Host festlegen = Passwort('neuesPasswort'); Aktualisieren Sie mysql.user und legen Sie authentication_string=password('pwd') fest, wobei user='Benutzername' und host='Hostname' ist. Benutzer user@host ändern, identifiziert durch „newpassword“; mysqladmin -u Benutzername -h Hostname -p Passwort "Neues Passwort"; Am besten verwenden Sie die Methode „Benutzer ändern“. Tatsächlich ist die Methode „Passwort festlegen“ in der neuen Version 8.0 nicht mehr verfügbar. Daher wird empfohlen, die Methode „Benutzer ändern“ zum Festlegen eines neuen Passworts zu verwenden. Darüber hinaus gibt es noch eine andere Methode, die nicht häufig verwendet wird. Dabei wird die Grant-Methode verwendet, um das vorherige Passwort zu überschreiben. Hier experimentieren wir einfach und sehen uns den Effekt an: mysql:mysql 20:01:05>>GRANT SELECT ON `yeyztest`.`test` TO 'dba_yeyz'@'192.168.18.%' identifiziert durch '111111'; Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.) mysql:mysql 20:01:29>>Benutzer, Host, concat(Benutzer,'@','\'', Host,'\''), Authentifizierungszeichenfolge aus mysql.user auswählen; +------------------+----------------+----------------------------------+-------------------------------------------+ | Benutzer | Host | concat(Benutzer,'@','\'',Host,'\'') | Authentifizierungszeichenfolge | +------------------+----------------+----------------------------------+-------------------------------------------+ | dba_yeyz | 192.168.18.% | dba_yeyz@'192.168.18.%' | *FD571203974BA9AFE270FE62151AE967ECA5E0AA | +------------------+----------------+----------------------------------+-------------------------------------------+ 11 Zeilen im Satz (0,00 Sek.) mysql:mysql 20:01:31>>GRANT SELECT ON `yeyztest`.`test` TO 'dba_yeyz'@'192.168.18.%' identifiziert durch '123456'; Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.) mysql:mysql 20:01:57>>Benutzer, Host, concat(Benutzer,'@','\'', Host,'\''), Authentifizierungszeichenfolge aus mysql.user auswählen; +------------------+----------------+----------------------------------+-------------------------------------------+ | Benutzer | Host | concat(Benutzer,'@','\'',Host,'\'') | Authentifizierungszeichenfolge | +------------------+----------------+----------------------------------+-------------------------------------------+ | dba_yeyz | 192.168.18.% | dba_yeyz@'192.168.18.%' | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +------------------+----------------+----------------------------------+-------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) Wie aus dem obigen Test ersichtlich ist, wird das vorherige Passwort überschrieben, wenn wir die Grant-Methode verwenden, um das Passwort für einen bestimmten Benutzer zurückzusetzen. Daher sollte dieser Vorgang online mit Vorsicht verwendet werden. Überprüfen Sie bei jedem Grant, ob ein vorhandenes Konto vorhanden ist, und bestätigen Sie dann, dass kein vorhandenes Konto vorhanden ist, den Grant. 5. Wenn wir versehentlich das Root-Passwort von MySQL vergessen, können wir den MySQL-Dienst neu starten und den Parameter --skip-grant-tables hinzufügen, um den MySQL-Dienst zu starten. Dadurch wird die Abgleicharbeit in der Berechtigungstabelle direkt vermieden und Sie können sich direkt beim MySQL-Dienst anmelden, um das Passwort des Root-Kontos zu ändern. 6. Wenn Sie „Update“ oder „Insert“ verwenden, um ein Konto zu erstellen oder das Kennwort in der Tabelle mysql.user zu ändern, müssen Sie nach der Ausführung der Anweisung den Vorgang „Flush Privileges“ verwenden, um die Berechtigungstabelle zu aktualisieren, da der Vorgang sonst nicht wirksam wird. 7. Es gibt mehrere Berechtigungen, die die Ausführung des mysqladmin-Tools beeinflussen, nämlich Neuladeberechtigung: wirkt sich auf den Spülvorgang aus Shutdown-Berechtigung: betrifft Shutdown-Vorgänge Prozessberechtigungen: wirken sich auf Prozesslistenvorgänge aus Super-Berechtigung: betrifft den Kill-Vorgang 8. Die zuvor erwähnten Ressourcensteuerungsfelder in der Tabelle mysql.user sind max_questions: die maximale Anzahl von Anfragen pro Stunde, max_updates: die maximale Anzahl von Aktualisierungen pro Stunde, max_connections: die maximale Anzahl von Verbindungen pro Stunde und max_user_connections: die maximale Anzahl von Verbindungen, die ein einzelner Benutzer gleichzeitig herstellen kann. Wenn wir diesen Parameter für einen Benutzer festlegen möchten, können wir dazu das folgende SQL verwenden: mysql:mysql 20:01:58>>GRANT SELECT ON `yeyztest`.`test` TO 'dba_yeyz'@'192.168.18.%' mit max_queries_per_hour 1000; Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,00 Sek.) mysql:mysql 20:13:13>>Wählen Sie Benutzer, Host, max_questions aus mysql.user aus, wobei Benutzer = "dba_yeyz"; +----------+--------------+------------------+ | Benutzer | Gastgeber | max_questions | +----------+--------------+------------------+ | dba_yeyz | 192.168.18.% | 1000 | +----------+--------------+------------------+ 1 Zeile im Satz (0,00 Sek.) Beachten Sie, dass die Option with hier in der Grant-Anweisung verwendet wird. Es gibt fünf Optionen, denen with folgen kann, nämlich: Gewährungsoption: Der autorisierte Benutzer kann diese Berechtigungen anderen Benutzern erteilen max_queries_per_hour count: Anzahl der Abfragen, die jede Stunde ausgeführt werden können; max_updates_per_hour count: Anzahl der Aktualisierungen, die stündlich durchgeführt werden können; max_connections_per_hour count: Anzahl der Verbindungen, die pro Stunde hergestellt werden können; max_user_connections count: Legt die Anzahl der Verbindungen fest, die ein einzelner Benutzer gleichzeitig herstellen kann 9. Globale Variablen festlegen: SETZEN SIE GLOBAL Standard-Passwortlebensdauer = 180; SETZEN SIE GLOBAL Standard-Passwortlebensdauer = 0; Der Passwortlebenszyklus kann auf 6 Monate eingestellt werden, danach verliert das Passwort seine Gültigkeit. Wenn der Wert auf 0 gesetzt wird, bleibt das Passwort für immer gültig. Natürlich können Sie den Passwort-Änderungszyklus auch direkt beim Anlegen eines Benutzers festlegen bzw. deaktivieren: BENUTZER 'jeffrey'@'localhost' ERSTELLEN. PASSWORT, ABLAUFINTERVALL 90 TAGE; ALTER USER 'jeffrey'@'localhost' PASSWORT ABLAUFINTERVALL 90 TAGE; BENUTZER 'jeffrey'@'localhost' ERSTELLEN, PASSWORT LÄUFT NIE AB; ALTER USER 'jeffrey'@'localhost' PASSWORT LÄUFT NIE AB; 10. Manchmal scheint es, als hätten wir das Kontokennwort gelöscht, können aber trotzdem mit dem Kontokennwort darauf zugreifen. Zu diesem Zeitpunkt müssen wir eine Einstellung überprüfen, um festzustellen, ob die Benutzertabelle leere Datensätze enthält: Wählen Sie Benutzer, Host aus mysql.user, wobei Benutzer=''; Sehr wahrscheinlich haben Sie den Benutzerdatensatz leer gelassen, sodass sich alle Benutzer direkt anmelden können. Wenn dies der Fall ist, sollten Sie es am besten direkt entfernen, da es den Sicherheitszweck verletzt. Oben finden Sie eine detaillierte Analyse der MySQL-Berechtigungssteuerung. Weitere Informationen zur MySQL-Berechtigungssteuerung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Analyse des Ausschnitts des Hintergrundbildes des Neunerrasters mit adaptiver Breite und Höhe
>>: Die am häufigsten verwendeten HTML-Tags zum Erstellen von Webseiten
CHAR- und VARCHAR-Typen sind ähnlich und untersch...
Ich habe gerade einen von JunChen verfassten Beitr...
Inhaltsverzeichnis 1. Übersicht 1.1 Was ist ein P...
Deepin 2014 herunterladen und installieren Zum He...
Das Linux-System ist ein typisches Mehrbenutzersy...
MySQL ermöglicht das Erstellen mehrerer Indizes f...
Im vorherigen Artikel wurde die MySql-Abfrageanwe...
Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...
Inhaltsverzeichnis 0x0 Einführung 0x1 Installatio...
Wenn in Ihrer Organisation bereits eine Kennwortr...
Heute ist der 618. und alle großen Einkaufszentre...
Umgebung: MacOS_Cetalina_10.15.1, Mysql8.0.18, Do...
Ich erinnere mich an eine Frage, die der Intervie...
Heute werden wir uns ansehen, warum es zu Master-...
Der Code sieht folgendermaßen aus: <!DOCTYPE h...