MySQL 修改账号的IP限制条件

今天遇到一个需求:修改MySQL用户的权限,需要限制特定IP地址才能访问,第一次遇到这类需求,结果在测试过程,使用更新系统权限报发现出现了一些问题, 具体演示如下. 下面测试环境为MySQL 5.6.20. 如有其它版本与下面测试结果有出入,请以实际环境为准。

我们先创建一个测试用户LimitIP,只允许192.168段的IP地址访问,具体权限如下所示:

mysql> GRANT SELECT ON MyDB.* TO [email protected]‘192.168.%‘ IDENTIFIED BY ‘LimitIP‘;
Query OK, 0 rows affected (0.01 sec)
 
mysql> GRANT INSERT ,UPDATE,DELETE ON MyDB.kkk TO [email protected]‘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 [email protected]‘192.168.%‘;
+----------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                   |
+----------------------------------------------------------------------------------------------------------------+
| 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 [email protected]‘192.168.103.17‘;
+---------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+---------------------------------------------------------------------------------------------------------------------+
| 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: [email protected]
  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等表

mysql> show grants for [email protected]‘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 [email protected]‘192.168.103.17‘;
+---------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+---------------------------------------------------------------------------------------------------------------------+
| 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> 

如果需要修改用户的IP限制,其实更新mysql相关权限表不是上上策,其实有更好的方法,那就是RENAME USER Syntax

mysql> RENAME USER ‘LimitIP‘@‘192.168.103.17‘ TO ‘LimitIP‘@‘192.168.103.18‘;
Query OK, 0 rows affected (0.00 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show grants for ‘LimitIP‘@‘192.168.103.18‘;
+---------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO ‘LimitIP‘@‘192.168.103.18‘ IDENTIFIED BY PASSWORD ‘*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 rows in set (0.00 sec)
 
mysql> 
时间: 2024-10-24 21:32:37

MySQL 修改账号的IP限制条件的相关文章

MySQL修改root账号密码的方法

MySQL修改root账号密码的方法 MySQL数据库中如何修改root用户的密码呢?下面总结了修改root用户密码的一些方法 1: 使用set password语句修改 mysql> select user();+----------------+| user() |+----------------+| root@localhost |+----------------+1 row in set (0.08 sec) mysql> set password=password('123456

MySql修改root密码、设置IP访问

修改密码: 方法1: 用SET PASSWORD命令 mysql -u root mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 方法2:用mysqladmin mysqladmin -u root password "newpass" 如果root已经设置过密码,采用如下方法 mysqladmin -u root password oldpass "newpass" 方法3:

MySQL之账号管理

一 账号管理 1 创建账号: 示例 1: 建立账号zwj,权限为在所有数据库上具有所有权限 mysql> grant all on *.* to 'zwj'@'192.168.154.180'; Query OK, 0 rows affected (0.01 sec) 为zwj设置密码 mysql> grant all on *.* to 'zwj'@'192.168.154.180' identified by 'zwj'; Query OK, 0 rows affected (0.00 s

远程连接mysql root账号报错:2003-can't connect to MYSQL serve

1.远程连接Linux系统,登录数据库:mysql -uroot -p(密码) 2.修改root账号的设置: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 其中'root'为mysql用户名,'123456'为root账户密码,修改其他用户修改对应的参数即可. 3.执行 flush privileges;命令立即生效 4. 使用exit命令退出MySQL 然后打开vim  /

MySQL修改复制用户及密码

在生产环境中有时候需要修改复制用户账户的密码,比如密码遗失,或者由于多个不同的复制用户想统一为单独一个复制账户.对于这些操作应尽可能慎重以避免操作不同导致主从不一致而需要进行修复.本文描述了修改复制账户密码以及变更复制账户. 1.更改复制账户密码 --演示环境,同一主机上的2个实例,主3406,从3506 --当前版本,注:master账户表明是对主库进行相关操作,slave则是对从库进行相关操作 [email protected][(none)]> show variables like 'v

面试问题 | MySQL 修改哪些配置文件可以进行优化?

本文转载自ITPUB公众号 配置文件中具体修改的内容是什么呢?要是面试官问你,你该怎么回答?你想下,你坐在一间屋子里. 服务器的 MySQL性能优化,有两个大致的方向考虑,第一个是服务器硬件,另一个是MySQL自身的my.cnf配置文件. 服务器的磁盘,CPU和内存,这些都是要考虑的因素 1,磁盘的I/O 能力,也就是它的寻道能力,目前的SCSI高速旋转的是7200转/秒,这样的速度,一旦访问的用户量上去,磁盘的压力就会过大,如果是每天的网站pv在150w,这样的一般的配置就无法满足这样的需求了

mysql创建账号及管理权限

mysql创建账号及管理权限 0.mysql版本8.0.15,服务器版本:RHEL 6.5 1.创建用户名密码 mysql> use mysql; mysql> create user 'username'@'%' identified by 'password'; 2.赋权 mysql> grant all privileges on *.* to 'username'@'%' with grant option;(授权全部数据库,***危险操作***,(查看PS2)) 3.刷新权限

mysql 修改用户密码

修改mysql用户密码 目录 mysqladmin命令 UPDATE user 语句 SET PASSWORD 语句 root密码丢失的情况(待验证) mysqladmin命令(回目录) 格式如下(其中,USER为用户名,PASSWORD为新密码): mysqladmin -u USER -p password PASSWORD 该命令之后会提示输入原密码,输入正确后即可修改.例如,设置root用户的密码为123456,则 mysqladmin -u root -p password 12345

修改Windows系统IP地址的快捷脚本

修改Windows系统IP地址的快捷脚本,以后再也不用为来回改地址发愁了!!! @echo off cls color 0A Echo ******************************************************************************* Echo           正在修改IP地址为174.16.4.125,请耐心等待---- Echo **************************************************