MySQL 8.0中新增的功能(一)

以下功能已经在MySQL 8.0中添加了:

数据字典

MySQL现在包含了一个事务性数据字典,用于存储关于数据库对象的信息。在先前的MySQL版本中,字典数据被存储在元数据文件和非事务表中。

原子数据定义语句(Atomic DDL)功能

原子DDL语句将与DDL操作相关联的数据字典更新、存储引擎操作和二进制日志写入合并为一个单独的原子事务。

升级过程

在先前的MySQL版本中,安装新版本的MySQL后,MySQL服务器在下一次启动时会自动升级数据字典表。然后,DBA需要手动调用mysql_upgrade命令来升级mysql模式中的系统表,以及其他模式中的对象,例如sys模式和用户模式。

自MySQL 8.0.16版本开始,服务器会执行先前由mysql_upgrade处理的任务。在安装新的MySQL版本后,服务器现在会在下一次启动时自动执行所有必要的升级任务,不再需要DBA手动调用mysql_upgrade命令。此外,服务器还会更新帮助表的内容(mysql_upgrade之前并未执行此操作)。新的--upgrade服务器选项提供了对服务器如何执行自动数据字典和服务器升级操作的控制权。

会话重用

MySQL服务器现在默认支持SSL会话重用,通过设置超时时间来控制服务器维护会话缓存的时间段,客户端可以在该时间段内请求新连接的会话重用。所有MySQL客户端程序都支持会话重用。

此外,现在C应用程序可以使用C API的功能来启用加密连接的会话重用。

安全和账户管理

这些增强功能的添加旨在提高安全性并在账户管理方面提供更大的数据库管理员 (DBA) 灵活性:

  • MySQL企业版现在提供基于组件的数据遮蔽和去识别功能,而不是基于MySQL 8.0.13引入的插件库。MySQL企业数据遮蔽和去识别组件支持多字节字符、存储在数据库表中的遮蔽字典以及几个新函数。
  • 在MySQL 8.0.33之前,MySQL企业审计使用mysql系统数据库作为过滤器和用户账户数据的持久存储。为了增强灵活性,新的audit_log_database服务器系统变量现在允许在服务器启动时指定全局模式命名空间中的其他数据库。mysql系统数据库是表存储的默认设置。
  • 现在,mysql系统数据库中的授权表是InnoDB(事务性)表。以前,它们是MyISAM(非事务性)表。授权表存储引擎的更改导致账户管理语句的行为也发生了相应的变化。以前,指定多个用户的账户管理语句(如CREATE USER或DROP USER)可能对某些用户成功,对其他用户失败。现在,每个语句都是事务性的,如果发生任何错误,则要么对所有指定的用户都成功,要么回滚并没有影响。如果语句成功,则写入到二进制日志中,但如果失败则不写入;在这种情况下,发生回滚并且没有进行任何更改。
  • 现在有一个新的caching_sha2_password身份验证插件可用。与sha256_password插件类似,caching_sha2_password使用SHA-256密码哈希实现,但使用缓存来处理连接时的延迟问题。它还支持更多的传输协议,并且不需要与OpenSSL链接以获取基于RSA密钥对的密码交换功能。
  • caching_sha2_password和sha256_password身份验证插件提供比mysql_native_password插件更安全的密码加密,并且caching_sha2_password比sha256_password提供更好的性能。由于caching_sha2_password具有这些优秀的安全性和性能特性,因此它现在是首选的身份验证插件,并且也是默认的身份验证插件,而不是mysql_native_password。
  • MySQL企业版SASL LDAP身份验证插件现在支持GSSAPI/Kerberos作为Linux上MySQL客户端和服务器的身份验证方法。这在Linux环境中非常有用,其中应用程序使用Microsoft Active Directory访问LDAP,并且默认启用了Kerberos。
  • MySQL企业版现在支持一种身份验证方法,允许用户使用Kerberos进行身份验证MySQL服务器,前提是适当的Kerberos票据可用或可以获取到。
  • MySQL现在支持角色,角色是一组命名的权限集合。可以创建和删除角色。可以向角色授予和撤销权限。可以将角色授予和从用户帐户中撤销。可以从授予给帐户的角色中选择适用的活动角色,并且可以在该帐户的会话期间进行更改。
  • MySQL现在引入了用户账户类别的概念,根据是否拥有SYSTEM_USER权限将系统用户和普通用户区分开来。
  • 在之前的版本中,无法授予全局适用于某些特定模式之外的权限。但如果启用了partial_revokes系统变量,现在可以实现这一点。
  • GRANT语句有一个"AS user [WITH ROLE]"子句,用于指定在执行语句时使用的权限上下文的附加信息。此语法在SQL级别可见,尽管其主要目的是通过使这些限制出现在二进制日志中,从而实现授权者权限被partial revokes所限制的统一复制。
  • MySQL现在维护有关密码历史的信息,可以限制重新使用先前的密码。数据库管理员可以要求在一定数量的密码更改或一段时间内,新密码不能从先前的密码中选择。可以全局或按帐户设置密码重用策略。
  • 现在可以要求通过指定要替换的当前密码来验证尝试更改帐户密码。这使得数据库管理员可以防止用户在未证明他们知道当前密码的情况下更改密码。可以全局或按帐户设置密码验证策略。
  • 现在允许账户拥有双重密码,这使得在复杂的多服务器系统中可以无需停机无缝进行分阶段的密码更改。
  • MySQL现在允许管理员配置用户账户,如果由于密码错误导致连续登录失败次数过多,则会导致账户被临时锁定。每个账户的要求失败次数和锁定时间都是可配置的。
  • MySQL现在支持FIPS模式,如果使用OpenSSL编译,并且在运行时有可用的OpenSSL库和FIPS对象模块。FIPS模式对加密功能施加条件,例如对可接受的加密算法的限制或对更长密钥长度的要求。
  • 现在,服务器用于新连接的TLS上下文可以在运行时重新配置。这个功能可能非常有用,例如,可以避免重新启动已经运行了很长时间且SSL证书已过期的MySQL服务器。
  • OpenSSL 1.1.1支持用于加密连接的TLS v1.3协议,而MySQL 8.0.16及更高版本也支持TLS v1.3,前提是服务器和客户端都是使用OpenSSL 1.1.1或更高版本编译的。
  • MySQL现在会将授予客户端对命名管道的访问控制设置为在Windows上进行成功通信所需的最低权限。新版本的MySQL客户端软件可以在没有任何额外配置的情况下打开命名管道连接。如果无法立即升级旧的客户端软件,可以使用新的named_pipe_full_access_group系统变量来给予Windows组打开命名管道连接所需的权限。完全访问组的成员资格应该受到限制并且是暂时的。
  • 以前,MySQL用户账户使用单一的身份验证方法进行服务器身份验证。从MySQL 8.0.27开始,MySQL支持多因素认证(MFA),可以创建具有最多三种身份验证方法的账户。MFA支持包括以下更改:
    • CREATE USER和ALTER USER语法已被扩展,允许指定多个身份验证方法。
    • 身份验证策略可以通过authentication_policy系统变量进行设置,该变量控制可以使用多少个因素以及每个因素允许的身份验证类型。这对于CREATE USER和ALTER USER语句中身份验证相关的子句的使用方式施加了限制。
    • 客户端程序现在具有新的--password1、--password2和--password3命令行选项,用于指定多个密码。对于使用C API的应用程序,mysql_options4() C API函数的新选项MYSQL_OPT_USER_PASSWORD可以实现相同的功能。
  • 此外,MySQL Enterprise Edition现在支持使用智能卡、安全密钥和生物识别读卡器等设备对MySQL服务器进行身份验证。该身份验证方法基于快速身份在线(FIDO)标准,并使用一对插件,即服务器端的authentication_fido和客户端端的authentication_fido_client。服务器端的FIDO身份验证插件仅包含在MySQL Enterprise Edition发行版中,不包含在MySQL社区发行版中。然而,客户端插件包括在所有发行版中,包括社区发行版。这使得来自任何发行版的客户端都能够连接到加载了服务器端插件的服务器上。
  • 多因素认证可以使用现有的MySQL身份验证方法,新的FIDO身份验证方法,或两者的组合。
相关推荐
soft20015254 小时前
MySQL Buffer Pool深度解析:LRU算法的完美与缺陷
数据库·mysql·算法
tgethe5 小时前
mysql-视图详解
数据库·mysql
Ged.phoenix7 小时前
Mysql架构
mysql·架构
北极糊的狐7 小时前
MySQL报错Communications link failure(通信链路失败)
数据库·mysql
薛不痒7 小时前
MySQL中使用SQL语言
数据库·sql·mysql
代码or搬砖8 小时前
MySQL窗口函数 OVER()讲解
java·mysql
Cat God 0079 小时前
基于Docker的MySQL 主从复制(读写分离)
mysql·docker·容器
神仙别闹10 小时前
基于QT(C++)+MySQL实现(窗体)学生信息管理系统
c++·qt·mysql
不会c嘎嘎10 小时前
MySQL 指南:全面掌握用户管理与权限控制
数据库·mysql