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

  • 相关阅读:
    python 函数和函数名的应用
    Python 文件操作
    django报错信息解决方法
    小数据池、代码块以及深浅拷贝
    python 字典的增删改查
    ps 整理通道
    unity 捏脸相关
    Unity3D Blend Shape简析
    unity 乳摇
    爱丽丝的头发是怎么制作的
  • 原文地址:https://www.cnblogs.com/dbdd/p/12159438.html
Copyright © 2020-2023  润新知