发现问题

前几天晚上没事,就随便搭了个项目玩,今天晚上无意看到mysql日志文件里各种暴力访问。如下图在这里插入图片描述
可以看到几个IP地址都在各种骚操作,由此想到当时安装Mysql时,因为其本身出于安全方面考虑默认只允许本机(localhost, 127.0.0.1)来连接访问。所以为了方便直接用了如下代码:
(MySQL8.0及之后的需要先创建用户,这里不赘述了,可以自行百度)

# 授权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
# 刷新
FLUSH PRIVILEGES;

上面的代码意思就是,允许所有用户使用’密码’登录数据库的root帐号来访问数据库。

处理

本来就是很小的服务器,免得被一直请求浪费资源,所以我准备限制IP访问数据库。
用了如下几段代码:

# 进入服务器
mysql -u root -p;

# 切换到 mysql用户
use mysql;

# 查询目前的用户权限
select user,host from user;

# 先把权限还原(只允许本机(localhost, 127.0.0.1)来连接访问)
update user set host='localhost' where host='%'# 设置指定IP访问mysql数据库   IP这里可以使用%来表示所有。 如'110.110.110.%',就表示110.110.110.0-255都可以访问。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'IP' IDENTIFIED BY '密码' WITH GRANT OPTION;
# WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人,可以不加,就是被授权用户,不能再次授权给其他用户了。
# 上面的root可以改成别的用户,需要先新增用户,这里就不赘述了。
# ALL PRIVILEGES ON 后面的*.*表示所有数据库,可以指定为特定数据库。
# 下面是改操作权限
# ALL PRIVILEGES 可以改为 SELECT(只能查询)
# ALL PRIVILEGES 也可以改为 INSERT,UPDATE,DELETE(除了查询都有权限)
# 撤销权限和赋予差不多 只需要把关键字 “to” 换成 “from” 即可
# REVOKE SELECT ON *.* FROM 'root'@'IP';(撤销查询权限)

# 执行刷新权限生效
flush privileges;

# 查询IP权限
show grants for root@'IP';

下图是查询的用户权限,%代表所有用户都可以访问
在这里插入图片描述
下图是查询的IP操作权限在这里插入图片描述

总结

设置指定IP访问mysql数据库
(MySQL8.0及之后的需要先创建用户)

GRANT ALL PRIVILEGES ON . TO ‘root’@‘IP’ IDENTIFIED BY ‘密码’ WITH GRANT OPTION;

WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人,可以不加,就是被授权用户,不能再次授权给其他用户了。
IP这里可以使用%,来表示所有。 如’110.110.110.%’,就表示110.110.110.0-255都可以访问。
上面的root可以改成别的用户,需要先新增用户,这里就不赘述了。
ALL PRIVILEGES ON 后面的*.*表示所有数据库,可以指定为特定数据库。
下面的是改操作权限
ALL PRIVILEGES 可以改为 SELECT(只能查询)
ALL PRIVILEGES 也可以改为 INSERT,UPDATE,DELETE(除了查询都有权限)
撤销权限和赋予差不多,只需要把关键字 “to” 换成 “from” 即可。

REVOKE SELECT ON . FROM ‘root’@‘IP’;(撤销查询权限)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐