全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

MySQL如何修改账号的IP限制条件详解

前言

最近在工作中遇到一个需求:修改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访问  # ip限制  # mysql如何限制ip访问  # MySQL 账号密码错误终极解决方法  # MySQL修改账号密码方法大全(小结)  # 解决重置Mysql root用户账号密码问题  # MySQL修改root账号密码的方法  # MySql存储引擎的作用  # MySql中的存储引擎和索引  # MySQL 常用引擎总结分享  # mysql 体系结构和存储引擎介绍  # Mysql账号管理与引擎相关功能实现流程  # 所示  # 只允许  # 如果你  # 如有  # 这类  # 这篇文章  # 谢谢大家  # 这几个  # 还必须  # 创建一个  # 在工作中  # 请以  # 请见  # 出现了  # 那就是  # 没有了  # 所以我  # 有疑问  # 我打算  # PASSWORD 


相关文章: c++怎么用jemalloc c++替换默认内存分配器【性能】  如何通过免费商城建站系统源码自定义网站主题与功能?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  如何通过远程VPS快速搭建个人网站?  网站网页制作专业公司,怎样制作自己的网页?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  如何用美橙互联一键搭建多站合一网站?  如何快速上传自定义模板至建站之星?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  如何配置支付宝与微信支付功能?  婚礼视频制作网站,学习*后期制作的网站有哪些?  c# 在ASP.NET Core中管理和取消后台任务  如何用IIS7快速搭建并优化网站站点?  如何在服务器上配置二级域名建站?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  已有域名能否直接搭建网站?  建站VPS能否同时实现高效与安全翻墙?  金*站制作公司有哪些,金华教育集团官网?  建站主机服务器选购指南:轻量应用与VPS配置解析  如何在万网开始建站?分步指南解析  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  大同网页,大同瑞慈医院官网?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  建站VPS选购需注意哪些关键参数?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  实例解析Array和String方法  高防服务器租用指南:配置选择与快速部署攻略  建站之星如何实现五合一智能建站与营销推广?  深入理解Android中的xmlns:tools属性  建站之星代理如何优化在线客服效率?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  如何获取开源自助建站系统免费下载链接?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  建站之星北京办公室:智能建站系统与小程序生成方案解析  潮流网站制作头像软件下载,适合母子的网名有哪些?  网站制作新手教程,新手建设一个网站需要注意些什么?  如何彻底卸载建站之星软件?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  Python文件管理规范_工程实践说明【指导】  建站DNS解析失败?如何正确配置域名服务器?  ,制作一个手机app网站要多少钱?  北京企业网站设计制作公司,北京铁路集团官方网站?  Bpmn 2.0的XML文件怎么画流程图  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  平台云上自助建站如何快速打造专业网站?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  定制建站策划方案_专业建站与网站建设方案一站式指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。