第十三期分享:MYSQL8.0新特性

Posted 编程那点事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十三期分享:MYSQL8.0新特性相关的知识,希望对你有一定的参考价值。

mysql官网:https://www.mysql.com/



讲真的我还没来得及吃透5.7,Mysql便从5.7一跃升级到8.0,真是让人猝不及防。但事已至此,能做的只有向前看齐,跟上技术更新的步伐,不断提升自己。8.0版本的更新,在功能上主要体现在以下六点:


  • 账户与安全

  • 优化器索引

  • 通用表表达式

  • 窗口函数

  • InnoDB 增强

  • JSON 增强、

今天就单独摸索一下第一条:账户与安全


1.用户的创建与授权

在MySQL5.7的版本:  

> grant all privileges on *.* to '用户名'@'主机' identified by '密码';  

在MySQL8.0需要分开执行:  

>create user '用户名'@'主机' identified by '密码';  

>grant all privileges on *.* to '用户名'@'主机';  

用以前的一条命令在8.0里面创建用户,会出现sql语法错误

2.认证插件更新

  MySQL5.7默认身份插件是mysql_native_password


  MySQL8.0默认的身份插件是caching_sha2_password

  查看身份认证插件命令:show variables like 'default_authentication_plugin%';

  身份认证插件可以通过以下2方式改变:
  
  1)系统变量default_authentication_plugin去改变,在my.ini文件的[mysqld]下面设置default_authentication_plugin=mysql_native_password即可

  2)如果希望只是某一个用户通过mysql_native_password的方式认证,可以修改数据库mysql下面的user表的字段,执行以下命令:

  >alter user '用户名'@'主机' identified width mysql_native_password by '密码';

3.密码管理

  MySQL8.0的密码管理策略有3个变量

  password_history 修改密码不允许与最近几次使用或的密码重复,默认是0,即不限制
  
  password_reuse_interval 修改密码不允许与最近多少天的使用过的密码重复,默认是0,即不限制

  password_require_current 修改密码是否需要提供当前的登录密码,默认是OFF,即不需要;如果需要,则设置成ON

  查询当前MySQL密码管理策略相关变量,使用以下命令:
  
  >show variables like 'password%';


  1)设置全局的密码管理策略,在my.ini配置文件中,设置以上3个变量的值这种设置方式,需要重启mysql服务器;某些生产环境不允许重启,MySQL8.0提供了关键字persist,持久化,执行以下命令:

  >set persist password_history=6;

  这条命令会在数据目录下生成新的配置文件(/var/lib/mysql/mysqld-auto.cnf),下次服务器重启的时候除了读取全局配置文件,还会读取这个配置文件,这条配置就会被读入从而达到持久化的目的

  2)针对某一个用户单独设置密码管理策略

  >alter user '用户名'@'主机' password history 5;

  这样,这个用户的password_history 就被设置成了5,查看一下:

  >show user,host,Password_reuse_history from user;
  
  查看某一张的字段的所有字段,使用以下命令:

  >desc 表名;

4.角色管理
  
  角色:一组权限的集合
  
  一组权限赋予某个角色,再把某个角色赋予某个用户,那用户就拥有角色对应的权限
  
  1)创建一个角色
  >create role '角色1';
  
  2)为这个角色赋予相应权限
  >grant insert,update on *.* to '角色1';
  
  3)创建一个用户
  >create user '用户1' identified by '用户1的密码';
  
  4)为这个用户赋予角色的权限
  >grant '角色1' on *.* to '用户1';

  执行完上面4步,用户1就拥有了插入与更新的权限
  
  5)再创建1个用户
  >create user '用户2' identified by '用户2的密码';
  
  6)为这个用户赋予同样的角色
  >grant '角色1' on *.* to '用户2';
  
  执行完上面2步,用户2也用了角色1的权限,即插入与更新

  查看用户权限,执行以下命令:
  >show grants for '用户名';

  7)启用角色,设置了角色,如果不启用,用户登录的时候,依旧没有该角色的权限
  >set default role '角色名' to '用户名';

  8)如果一个用户有多个角色,使用以下命令
  >set default role all to '用户名';

  MySQL中与用户角色相关的表:mysql.default_roles、mysql.role_edges,有兴趣的朋友可以进去查看下。

  9)撤销权限
  >revoke insert,update on *.* from '角色名';


感兴趣的可以自己上手试试,应该会有不一样的体验。

以上是关于第十三期分享:MYSQL8.0新特性的主要内容,如果未能解决你的问题,请参考以下文章

MySQL8.0新特性—InnoDB增强

MySQL8.0新特性

MySQL分支版本选择+MySQL8.0新特性

MySQL8.0新特性——不可见索引(Invisible Indexes)

MYSQL8.0注入新特性

MySQL8.0新特性——支持原子DDL语句