前言

最近在工作中遇到一个需求:修改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小时内与您取得联系。