この記事では、主に MySQL アカウントの IP 制限を変更する方法について詳しく紹介します。この記事は、皆さんの学習や仕事に役立つことを願っています。みんなを助けて。
前書き
私は最近仕事で、MySQL ユーザーの権限を変更するには、特定の IP アドレスへのアクセスを制限する必要があるという要件に遭遇しました。その結果、テスト中にそのような要件に遭遇したのはこれが初めてでした。いくつかの問題については、以下で詳しく説明します。 注: 以下のテスト環境は MySQL 5.6.20 です。他のバージョンと以下のテスト結果に相違がある場合は、実際の環境をご参照ください。
最初に、192.168 セグメントの IP アドレスへのアクセスのみを許可するテスト ユーザー LimitIP を作成します。具体的な権限は次のとおりです。
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>
ここで要求を受け取ったとします。このユーザーは、これへのアクセスのみを許可します。 IP アドレス 192.168.103.17 なので、次のように mysql.user テーブルを更新する予定です:
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>
上記のテストでは、次のように mysql.user テーブルのみを変更すると、以前の権限が失われることがわかりました。以下では、 mysql.db をクエリすると、mysql.tables_priv は Host のフィールド値がまだ 192.168.% であることがわかりました
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そこで、mysql.db、mysql.tables_priv テーブルの変更を続け、最終的にテスト検証が完了しました。 OK (以下のテスト手順を参照してください) もちろん、これらのレベルだけでなく、mysql.columns_priv、mysql.procs_priv などのテーブルも変更する必要がある場合があります。ユーザーの IP 制限を変更する必要があるため、mysql 関連の権限テーブルを更新するのは最善の選択肢ではありません。実際、より良い方法があります。その方法は RENAME USER 構文です
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>関連する推奨事項:
有効にするための mysql 変更の例の説明です。リモート接続
mysql変更データベーステーブルの使用例まとめパスワードやアクセス制限を変更するMySQLインスタンス 詳細説明
以上がMySQLでアカウントのIP制限条件を変更する例の共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。