Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zum Ändern der IP-Einschränkungen von MySQL-Konten ein. Der Artikel stellt ihn ausführlich anhand von Beispielcode vor. Er hat einen bestimmten Referenz- und Lernwert für alle, die ihn benötigen Lass es uns mit dem untenstehenden Editor lernen.
Vorwort
Ich bin kürzlich bei der Arbeit auf einen Bedarf gestoßen: Das Ändern der Berechtigungen von MySQL-Benutzern erfordert die Beschränkung des Zugriffs auf bestimmte IP-Adressen Als Ergebnis habe ich während des Testvorgangs einige Probleme bei der Verwendung des Update-System-Berechtigungsberichts festgestellt.
Hinweis : Die folgende Testumgebung ist MySQL 5.6.20. Wenn es Abweichungen zwischen anderen Versionen und den folgenden Testergebnissen gibt, beziehen Sie sich bitte auf die tatsächliche Umgebung.
Wir erstellen zunächst einen Testbenutzer LimitIP, der nur den Zugriff auf IP-Adressen im Segment 192.168 erlaubt. Die spezifischen Berechtigungen sind wie folgt:
mysql> GRANT SELECT ON MyDB.* TO LimitIP@'192.168.%' IDENTIFIED BY 'LimitIP'; Query OK, 0 rows affected (0.01 sec) mysql> GRANT INSERT ,UPDATE,DELETE ON MyDB.kkk TO LimitIP@'192.168.%'; Query OK, 0 rows affected (0.00 sec) mysql> mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> mysql> show grants for LimitIP@'192.168.%'; +----------------------------------------------------------------------------------------------------------------+ | Grants for LimitIP@192.168.% | +----------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'LimitIP'@'192.168.%' IDENTIFIED BY PASSWORD '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' | | GRANT SELECT ON `MyDB`.* TO 'LimitIP'@'192.168.%' | | GRANT INSERT, UPDATE, DELETE ON `MyDB`.`kkk` TO 'LimitIP'@'192.168.%' | +----------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec) mysql>
Angenommen, jetzt geht eine Anfrage ein: Dieser Benutzer erlaubt nur den Zugriff auf diese IP-Adresse 192.168.103.17, daher habe ich vor, die Tabelle mysql.user wie folgt zu aktualisieren:
mysql> select user, host from mysql.user where user='LimitIP'; +---------+-----------+ | user | host | +---------+-----------+ | LimitIP | 192.168.% | +---------+-----------+ 1 row in set (0.00 sec) mysql> update mysql.user set host='192.168.103.17' where user='LimitIP'; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.01 sec) mysql> select user, host from user where user='LimitIP'; ERROR 1046 (3D000): No database selected mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select user, host from user where user='LimitIP'; +---------+----------------+ | user | host | +---------+----------------+ | LimitIP | 192.168.103.17 | +---------+----------------+ 1 row in set (0.00 sec) mysql> show grants for LimitIP@'192.168.103.17'; +---------------------------------------------------------------------------------------------------------------------+ | Grants for LimitIP@192.168.103.17 | +---------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'LimitIP'@'192.168.103.17' IDENTIFIED BY PASSWORD '*72DDE03E02CC55A9478A82F3F4EBE7F639249DEC' | +---------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql>
Der obige Test ergab, dass die vorherigen Berechtigungen verloren gehen, wenn Sie nur die Tabelle mysql.user ändern Wie unten gezeigt, hat mysql.tables_priv beim Abfragen von mysql.db festgestellt, dass der Feldwert von Host immer noch 192,168 % beträgt
mysql> select * from mysql.db where user='LimitIP'\G; *************************** 1. row *************************** Host: 192.168.% Db: MyDB User: LimitIP Select_priv: Y Insert_priv: N Update_priv: N Delete_priv: N Create_priv: N Drop_priv: N Grant_priv: N References_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 row in set (0.00 sec) ERROR: No query specified mysql> select * from mysql.tables_priv where user='LimitIP'\G; *************************** 1. row *************************** Host: 192.168.% Db: MyDB User: LimitIP Table_name: kkk Grantor: root@localhost Timestamp: 0000-00-00 00:00:00 Table_priv: Insert,Update,Delete Column_priv: 1 row in set (0.00 sec) ERROR: No query specified
, also fuhr ich fort Ändern Sie die Tabellen mysql.db und mysql.tables_priv und testen Sie sie. Die Überprüfung ist schließlich in Ordnung (siehe Testschritte unten). Wenn das Konto über mehr als diese Berechtigungsstufen verfügt, müssen Sie möglicherweise auch Tabellen ändern wie mysql.columns_priv, mysql.procs_priv usw.
mysql> show grants for LimitIP@'192.168.%'; ERROR 1141 (42000): There is no such grant defined for user 'LimitIP' on host '192.168.%' mysql> mysql> mysql> update mysql.db set host='192.168.103.17' where user='LimitIP'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> update mysql.tables_priv set host='192.168.103.17' where user='LimitIP'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> show grants for LimitIP@'192.168.103.17'; +---------------------------------------------------------------------------------------------------------------------+ | Grants for LimitIP@192.168.103.17 | +---------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'LimitIP'@'192.168.103.17' IDENTIFIED BY PASSWORD '*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 rows in set (0.00 sec) mysql>
Wenn Sie die IP des Benutzers ändern müssen Einschränkungen ist es nicht die beste Idee, die MySQL-bezogene Berechtigungstabelle zu aktualisieren. Tatsächlich gibt es einen besseren Weg, nämlich die RENAME USER-Syntax >
ZusammenfassungDas obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie man die IP-Einschränkungsbedingungen eines Kontos in MySQL ändert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!