MySQL8.0远程连接和用户授权相关设置
1、开启MySQL远程连接
mysql -u root -p #进入MySQL数据库后进行一下操作。
mysql> use mysql;
mysql> update user set user.Host=’%’ where user.User=‘root’;
mysql> flush privileges;
注:将Host设置为‘%’表示任意IP都能连接MySQL,也可以将‘%’改为指定ip
如果远程连接遇到如下报错:
Unable to load authentication plugin 'caching_sha2_password'.
原因: 是因为mysql8使用的是caching_sha2_password加密规则。
解决方法:
- 修改远程连接用户的加密规则。
mysql> ALTER USER ‘test’@’%’ IDENTIFIED WITH mysql_native_password BY ‘12345’;
- 修改配置文件。
#vi /etc/my.cnf
加入下面内容:default_authentication_plugin=mysql_native_password
2、关闭MySQL远程连接
如果有关闭远程连接的需求,其实我们只需要Host恢复成默认设置(只能本地连接)即可,如下:
mysql -u root -p #进入MySQL数据库后进行一下操作。
mysql> use mysql;
mysql> update user set user.Host=‘localhost’ where user.User=‘root’;
mysql> flush privileges;
以上的操作都可以通过查看MySQL的user表的host、user字段来验证是否修改成功:
mysql> select host,user from user;
3、修改防火墙规则,开放端口
如果服务器防火墙未关,在开启了MySQL的远程连接之后还需要进行防火墙的设置,开放其端口(如:3306),这里以centos7为例,其他版本的请自行百度,如下:
#centos7 开启防火墙端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
参数说明:
--zone #作用域
--add-port=3306/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效
systemctl restart firewalld #重启防火墙,或者 firewall-cmd --reload(更新防火墙规则)
firewall-cmd --list-ports #查看已经开放的端口
systemctl status firewalld #查看防火墙状态,或者 firewall-cmd –state
到此,基本就可以用工具远程连接MySQL了。
4、创建用户以及给用户授权
- 授予 test 用户拥有所有库所有表的所有权限
在授予权限前先说一下MySQL8.0的新语法:
因为MySQL8.0提升了安全级别,更加严谨,所以创建用户并授权不能和以前一样用一条SQL语句完成,现在必须先创建用户设置密码,再进行授权。
#以前可以直接用如下一条SQL:
mysql> grant all privileges on . to test@’%’ identified by ‘12345’;
如果在MySQL8.0中执行上面这个SQL会报SQL语法错误。
#在MySQL8.0中必须先创建任意主机可访问的用户:
mysql> create user test@’%’ identified by ‘12345’;
#然后再对用户进行授权:
mysql> grant all on . to test@’%’; #privileges 可以省略!
mysql> flush privileges; #刷新权限
注意:在MySQL8.0中,如果创建了用户并授予了all 权限,那么即便用 root 用户也可能无法删除这些用户,会报
ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation
如图:
原因:这是由于MySQL8.0新增了一个SYSTEM_USER权限,如果创建用户并授予all权限时,就会赋予SYSTEM_USER权限,而root用户并没有这个权限,所以无法删除其他用户。
解决办法:
- 不授予用户all权限。(一般为了安全是不可能给一个用户授予all权限的,即便root也没有all权限)
mysql> show grants for root@’%’;
- 授予root用户SYSTEM_USER,然后删除其他用户。
mysql> grant SYSTEM_USER on . to root@’%’;
mysql> flush privileges;
mysql> drop user test@’%’;
- 授予 test 用户拥有所有库所有表部分权限
mysql> grant select,insert,update on . to test@’%’;
mysql> flush privileges;
3. 授予 test 用户拥有testdb库所有表部分权限
mysql> grant select,insert,update on testdb.* to test@’%’;
mysql> flush privileges;
4. 授予 test 用户拥有testdb库test表的部分权限
mysql> grant select,insert,update on testdb.test to test@’%’;
mysql> flush privileges;
更多的权限请自行琢磨,或者一起来琢磨(滑稽.jpg)
5、删除用户及权限
mysql> drop user test@’%’;
mysql> drop user test1@localhost;
欢迎进群:747509472 交流学习!感谢指正!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)