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

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

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等表

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>

如果需要修改用户的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 LimitIP@192.168.103.18                                                                                   |

+---------------------------------------------------------------------------------------------------------------------+

| 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>

修改mysql限制ip_MySQL 修改账号的IP限制条件相关推荐

  1. MySQL 修改账号的IP限制条件

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

  2. mariab修改mysql端口_修改mysql/MariaDB数据库的端口号+远程

    1.修改端口 2.远程+开放端口 (1)设置远程账号:xxx和密码yyyyyyy grant all privileges on *.* to 'xxx'@'%' identified by 'yyy ...

  3. 如何修改mysql服务器,怎么修改mysql服务器地址

    怎么修改mysql服务器地址 内容精选 换一换 云数据库RDS服务支持开启公网访问功能,通过弹性公网IP进行访问.您也可通过弹性云服务器的内网访问云数据库RDS.准备弹性云服务器或可通过公网访问云数据 ...

  4. window修改mysql端口_修改mysql端口(Windows免安装版)

    我的MySQL是解压免安装版的,要修改MySQL的端口,方法很简单: 解压MySQL后,在MySQL根目录下有一个my-default.ini,打开它,上面的注释写的很清楚"# *** DO ...

  5. 修改mysql编_修改mysql编码

    SHOW VARIABLES LIKE 'character%'; SET character_set_server = utf8; SET character_set_results = utf8; ...

  6. update语句修改mysql密码_修改 mysql 密码

    修改mysql密码的方法 use mysql update user set Password=password('newpassword') where User='root'; flush pri ...

  7. Win10中Docker下修改mysql配置(主要修改utf-8字符集)

    由于要修改MySQL的配置文件,在命令行修改每次重启都会失效,所以想修改Docker下的mysql配置文件,这样将其再作为一个镜像保存,以后就可以一劳永逸了. 在Win10的Docker容器中进行vi ...

  8. 定期修改mysql 密码_MySQL修改账号密码方法大全

    前言: 在日常使用数据库的过程中,难免会遇到需要修改账号密码的情景,比如密码太简单需要修改.密码过期需要修改.忘记密码需要修改等.本篇文章将会介绍需要修改密码的场景及修改密码的几种方式. 1.忘记 r ...

  9. 修改mysql字符集_mysql 修改字符集

    一.修改my.ini配置文件(mysql配置文件) character_set_server = utf8 #设置字符集 重启mysql数据库服务 查看当前数据库字符集 show VARIABLES ...

最新文章

  1. 计算机组成定点数的编码,2.1.1 定点数的表示
  2. Training little cats
  3. 百度地图标注图标太小
  4. Linux ffmpeg的安装编译过程
  5. 剑指offer之求1+2+...+n
  6. java list 取两条_java list集合中有多条数据随机两条一组
  7. 联想用u盘重装系统步骤_保姆级重装系统教程在此
  8. python读取sas数据集_利用Python获取SAS和R自带数据集
  9. windows c++ 流读取文件长度 ios::in ios::binary
  10. delphi 发送html邮件,Delphi下html编辑器,像foxmail或者Outlook的邮件编辑器一样 能够保存为单一文件如 mht,eml (200分)...
  11. 2022年信息安全工程师考试知识点:信息系统安全产品的配置与使用
  12. Windows兼容性设置图文教程,Windows兼容模式怎么设置?
  13. 千人千面、个性化推荐:解读数据赋能商家背后的AI技术
  14. 《TCP/IP网络编程》第20章
  15. MacBook Pro (M1 Pro芯片)使用安卓USB共享上网
  16. java实现收藏功能
  17. 可怕的KCFErrordomainCFNetWork 303
  18. CF831A-Unimodal Array(单峰阵列)
  19. jquery实现滑动滚动条出现对联广告
  20. 关于opencv读取图片,无法正常显示

热门文章

  1. 实现Windows Embedded 8 Standard 上的快速开机(HORM)
  2. web工作流管理系统开发之十六 主子流程参数传递的实现
  3. Silverlight 2 DataGrid December 2008
  4. php 创建文本文件,php-创建文本文件以进行实时下载
  5. python强制退出循环_for循环、while循环、break跳出循环、continue结束本次循环、exit退出本次脚本...
  6. python networkx 求图中的环_python – 在NetworkX图中获取连接的节点
  7. java 实现复制_在java中如何实现复制,粘贴,剪切
  8. 理解这几个安全漏洞,你也能做安全测试【干货建议收藏】
  9. mysql linux32_linux 32 位mysql 安装中的问题 以及修改数据库密码
  10. ajax control toolkit vs2013,如何将Ajax Control Toolkit控件安装到Visual Studio 2005工具箱