Vorwort Kürzlich stieß ich bei der Arbeit auf eine Anforderung: Um die Berechtigungen von MySQL-Benutzern zu ändern, muss der Zugriff auf bestimmte IP-Adressen beschränkt werden. Dies ist das erste Mal, dass ich auf eine solche Anforderung gestoßen bin. Infolgedessen stellte ich während des Testvorgangs einige Probleme bei der Verwendung des Berichts zum Aktualisieren der Systemberechtigungen fest. Die konkrete Demonstration ist wie folgt. Hinweis: Die folgende Testumgebung ist MySQL 5.6.20. Wenn es Abweichungen zwischen den Testergebnissen und anderen Versionen gibt, beziehen Sie sich bitte auf die tatsächliche Umgebung. Wir erstellen zunächst einen Testbenutzer LimitIP, der nur IP-Adressen im Segment 192.168 Zugriff gewährt. Die spezifischen Berechtigungen lauten wie folgt: mysql> GRANT SELECT ON MyDB.* TO LimitIP@'192.168.%' IDENTIFIZIERT DURCH 'LimitIP'; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> GRANT INSERT, UPDATE, DELETE ON MyDB.kkk TO LimitIP@'192.168.%'; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) MySQL> mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) MySQL> mysql> Berechtigungen für LimitIP@'192.168.%' anzeigen; +----------------------------------------------------------------------------------------------------------------+ | Zuweisungen für [email protected].% | +----------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* AN 'LimitIP'@'192.168.%' IDENTIFIZIERT DURCH PASSWORT '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' | | GRANT SELECT ON `MyDB`.* TO 'LimitIP'@'192.168.%' | | GRANT INSERT, UPDATE, DELETE ON `MyDB`.`kkk` TO 'LimitIP'@'192.168.%' | +----------------------------------------------------------------------------------------------------------------+ 3 Zeilen im Satz (0,00 Sek.) MySQL> Angenommen, ich erhalte jetzt eine Anforderung: Dieser Benutzer darf nur auf die IP-Adresse 192.168.103.17 zugreifen. Daher plane ich, die mysql.user-Tabelle wie folgt zu aktualisieren: mysql> wähle Benutzer, Host aus mysql.user, wobei Benutzer='LimitIP'; +---------+-----------+ | Benutzer | Gastgeber | +---------+-----------+ | IP-Limit | 192,168 % | +---------+-----------+ 1 Zeile im Satz (0,00 Sek.) mysql> aktualisiere mysql.user setze host='192.168.103.17', wobei user='LimitIP'; Abfrage OK, 1 Zeile betroffen (0,02 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> Benutzer auswählen, Host vom Benutzer, wobei Benutzer = "LimitIP"; FEHLER 1046 (3D000): Keine Datenbank ausgewählt mysql> mysql verwenden; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> Benutzer auswählen, Host vom Benutzer, wobei Benutzer = "LimitIP"; +---------+----------------+ | Benutzer | Gastgeber | +---------+----------------+ | IP-Limit | 192.168.103.17 | +---------+----------------+ 1 Zeile im Satz (0,00 Sek.) mysql> Berechtigungen für LimitIP@'192.168.103.17' anzeigen; +----------------------------------------------------------------------------------------------------------------------------------+ | Zuschüsse für [email protected] | +----------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* AN 'LimitIP'@'192.168.103.17' IDENTIFIZIERT DURCH PASSWORT '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' | +----------------------------------------------------------------------------------------------------------------------------------+ 1 Zeile im Satz (0,00 Sek.) MySQL> Der obige Test ergab, dass die vorherigen Berechtigungen verloren gehen, wenn nur die Tabelle mysql.user geändert wird. Wie unten gezeigt, werden Sie bei einer Abfrage von mysql.db und mysql.tables_priv feststellen, dass der Wert des Host-Felds immer noch 192,168 % beträgt. mysql> wähle * aus mysql.db, wobei Benutzer='LimitIP'\G; *************************** 1. Reihe *************************** Gastgeber: 192.168.% Datenbank: MeineDB Benutzer: LimitIP Select_priv: Ja Insert_priv: N Update_priv: N Löschpriv: N Create_priv: N Drop_priv: N Grant_priv: N Referenzen_priv: N Index_priv: N Alter_priv: N Create_tmp_table_priv: N Lock_tables_priv: N Create_view_priv: N Show_view_priv: N Create_routine_priv: N Alter_routine_priv: N Execute_priv: N Event_priv: N Trigger_priv: N 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben mysql> wähle * aus mysql.tables_priv, wobei Benutzer='LimitIP'\G; *************************** 1. Reihe *************************** Gastgeber: 192.168.% Datenbank: MeineDB Benutzer: LimitIP Tabellenname: kkk Gewährer: root@localhost Zeitstempel: 0000-00-00 00:00:00 Table_priv: Einfügen, Aktualisieren, Löschen Column_priv: 1 Zeile im Satz (0,00 Sek.) FEHLER: Keine Abfrage angegeben Also habe ich die Tabellen mysql.db und mysql.tables_priv weiter geändert und dann getestet und überprüft, ob alles in Ordnung war (siehe die Testschritte unten). Wenn das Konto über mehr als diese Berechtigungsstufen verfügt, müssen Sie möglicherweise auch Tabellen wie mysql.columns_priv, mysql.procs_priv usw. ändern. mysql> Berechtigungen für LimitIP@'192.168.%' anzeigen; FEHLER 1141 (42000): Für den Benutzer „LimitIP“ auf dem Host „192.168.%“ ist keine solche Berechtigung definiert. MySQL> MySQL> mysql> aktualisiere mysql.db, setze Host='192.168.103.17', wobei Benutzer='LimitIP'; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 mysql> aktualisiere mysql.tables_priv, setze Host='192.168.103.17', wobei Benutzer='LimitIP'; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Berechtigungen für LimitIP@'192.168.103.17' anzeigen; +----------------------------------------------------------------------------------------------------------------------------------+ | Zuschüsse für [email protected] | +----------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* AN 'LimitIP'@'192.168.103.17' IDENTIFIZIERT DURCH PASSWORT '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' | | GRANT SELECT ON `MyDB`.* TO 'LimitIP'@'192.168.103.17' | | GRANT INSERT, UPDATE, DELETE ON `MyDB`.`kkk` TO 'LimitIP'@'192.168.103.17' | +----------------------------------------------------------------------------------------------------------------------------------+ 3 Zeilen im Satz (0,00 Sek.) MySQL> Wenn Sie die IP-Einschränkungen des Benutzers ändern müssen, ist das Aktualisieren der MySQL-bezogenen Berechtigungstabelle nicht die beste Lösung. Tatsächlich gibt es einen besseren Weg, nämlich die RENAME USER-Syntax mysql> BENUTZER 'LimitIP'@'192.168.103.17' IN 'LimitIP'@'192.168.103.18' UMBENENNEN; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> FLUSH-PRIVILEGIEN; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Berechtigungen für „LimitIP“@„192.168.103.18“ anzeigen; +----------------------------------------------------------------------------------------------------------------------------------+ | Zuschüsse für [email protected] | +----------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* AN 'LimitIP'@'192.168.103.18' IDENTIFIZIERT DURCH PASSWORT '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' | | GRANT SELECT ON `MyDB`.* TO 'LimitIP'@'192.168.103.18' | | GRANT INSERT, UPDATE, DELETE ON `MyDB`.`kkk` TO 'LimitIP'@'192.168.103.18' | +----------------------------------------------------------------------------------------------------------------------------------+ 3 Zeilen im Satz (0,00 Sek.) MySQL> Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels Ihnen bei Ihrem Studium oder Ihrer Arbeit helfen kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: CentOS-Methode zum Ändern der Standard-SSH-Portnummer – Beispiel
>>: Mehrere Möglichkeiten, Python-Programme im Linux-Hintergrund auszuführen
Pixel Auflösung Mit der Monitorauflösung ist eige...
Transaktionen stellen die Atomarität mehrerer SQL...
Welche Probleme löst MySQL ROLE? Wenn Sie ein DBA...
Problembeschreibung Der Schaltflächenstil ist Sym...
Vorwort In vielen MySQL-Test-Szenarien müssen ein...
1. concat()-Funktion Funktion: Mehrere Zeichenfol...
Inhaltsverzeichnis WebAPI DOM DOM-Baum Methode zu...
In diesem Artikel wird der spezifische Code für J...
Die Eigenschaft, Text in CSS zu zentrieren, lässt ...
Zusammenfassung: Problemlösungsaufzeichnungen von...
Problembeschreibung: Fehlermeldung: Ursache: com....
Der Originalcode lautet: <div Klasse = "K...
Der erste Punkt ist, dass Menschen die Semantik vo...
Inhaltsverzeichnis Fallbeispiel Lösung des Proble...
MySQL-Abfrage ohne Verwendung der Indexaggregatio...