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加密规则。
解决方法:

  1. 修改远程连接用户的加密规则。

mysql> ALTER USER ‘test’@’%’ IDENTIFIED WITH mysql_native_password BY ‘12345’;

  1. 修改配置文件。

#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、创建用户以及给用户授权

  1. 授予 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创建用户并授权
注意:在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@’%’;

在这里插入图片描述

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

 

posted @ 2020-01-07 07:09  趣共享资源~  阅读(7475)  评论(0编辑  收藏  举报