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 交流学习!感谢指正!