MySQL 8.0.27 增加了多因素身份认证(MFA)功能,可以为一个用户指定多重的身份校验。为此还引入了新的系统变量 authentication_policy ,用于管理多因素身份认证功能。
我们知道在 MySQL 8.0.27 之前,create user 的时候可以指定一种认证插件,在未明确指定的情况下会取系统变量 default_authentication_plugin的值。default_authentication_plugin 的有效值有3个,分别是 mysql_native_password ,sha256_password ,caching_sha2_password ,这个3个认证插件是内置的、不需要注册步骤的插件。
在 MySQL 8.0.27 中由 authentication_policy 来管理用户的身份认证,先启个 mysql
同时查看下 authentication_policy 和 default_authentication_plugin 的值
我们看到 authentication_policy 的默认值是*,,
第1个元素值是星号( ),表示可以是任意插件,默认值取 default_authentication_plugin 的值。如果该元素值不是星号( ),则必须设置为 mysql_native_password ,sha256_password ,caching_sha2_password 中的一个。
第2,3个元素值为空,这两个位置不能设置成内部存储的插件。如果元素值为空,代表插件是可选的。
建个用户看一下,不指定插件名称时,自动使用默认插件 caching_sha2_password
指定插件名称时,会使用到对应的插件
尝试变更一下 authentication_policy 第一个元素的值,设置为 sha256_password
再次创建一个用户,不指定插件的名称
可以看到默认使用的插件是 sha256_password ,说明当 authentication_policy 第一个元素指定插件名称时,default_authentication_plugin 被弃用了。
首先我们恢复 authentication_policy 至默认值
创建一个双重认证的用户。如下创建失败了,因为不可以同时用2种内部存储插件。
那我们来装一个可插拔插件 Socket Peer-Credential
再创建一个双重认证的用户
创建成功,之后用户'wei4'@'localhost'必须提供正确的密码,且同时本地主机的登录用户为 root 时,才会验证通过。
来试一下,以主机 root 用户身份,提供正确的密码 123 ,登录成功。
修改一下,将'wei4'@'localhost'要求的主机登录用户修改为wei4
再次以主机 root 用户身份,提供正确的密码 123 ,登录失败
因此可以认定双重身份认证机制是生效的。MySQL 8.0.27 最多可以对一个用户设置三重的身份认证,这里不再做展示说明。
简单总结下,已有的密码口令身份验证很适合网站或者应用程序的访问,但是在特定的情况下 如网络在线金融交易方面可能还是不够安全。多因素身份认证(MFA)功能的引入,可以在一定程度上提升数据库系统的安全性。
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_authentication_policy
在 MySQL 8.0.23 版本中新添加了一个功能:可以给字段附加不可见属性。对于非指定字段的查询语句默认隐藏不可见字段的内容。该功能可适用于需要给表添加字段并需要对已有的业务系统隐藏时使用以及给表添加主键字段或索引字段时使用。
MySQL 从 8.0.23 版本之前,所有表的字段均为可见字段,在 8.0.23 版本之后,可以给字段添加不可见属性。默认对 select * 等 *** 作隐藏,只有当 sql 语句中指定该字段值时才会显示
官网连接: https://dev.mysql.com/doc/refman/8.0/en/invisible-columns.html
1、新建一张表,给当中字段赋予不可见属性(INVISIBLE)
2、建表语句以及表结构中均可以查看到不可见字段的字段信息
3、在系统表 INFORMATION_SCHEMA.COLUMNS 中的 EXTRA 字段值中也可以查看到表字段值的不可见属性。
1、每张表必须要有至少一个可见字段。
2、不可见字段允许被定义为主键或创建2级索引,也可以定义自增属性。适合给已有的表添加主键或者索引。
3、使用 DML 语句时,如果涉及到不可见字段的值,需要在sql语句中显示指定该不可见字段。否则会按照默认方式,忽略不可见字段进行 DML 语句的解析和处理。同理 create table as select,insert into select 等,不可见字段需要明文指定,否则按默认不做处理。
4、使用 select...outfile 以及 load data 方式导入导出含不可见字段表时,默认对不可见列不做处理。如果需要导出不可见列的数据或者将数据导入至不可见列中,也需要明文指定字段名。
5、允许给已有的字段附件不可见属性
6、使用 mysqldump 备份时,逻辑备份文件自带不可见字段的建表语句,并明文指定了插入数据的字段值。
7、binlog 会记录 DDL 的不可见列字段属性。当 binlog 为 STATEMENT 模式时,原始 DML 语句会被记录,当 binlog 为 ROW 模式时,不可见列如果有值,也会被记录。
不可见字段这项新功能是对 MySQL 表结构体系的一种补充。不仅允许用户对已使用的表做结构变更并且兼顾业务侧的需要。弥补了业务初期创建错误表结构这样的问题点。一定程度上提升了 MySQL 在使用上的容错率。
以往 MySQL 想要限制单个连接的内存,只能小心翼翼的设置各种 SESSION 变量,防止执行某些 SQL 导致单个连接的内存溢出! 能不能直接在 MySQL 服务端包含这样一个功能,简化数据库的运维呢?
MySQL 最新版本 8.0.28 在前几天发布,其中有一项新功能就是在数据库侧来限制单个连接内存,着实有点小兴奋。
管理员端设置内存限制参数上限:为了尽快看到效果,设置为最小值。
创建一个新用户 tt1 ,并赋予基于库 ytt 的只读权限。
创建一张表,插入一行记录: 这里使用 longtext 数据类型能让查询结果更快内存溢出。
用户 tt1 登录验证:对字段 r1 进行简单 GROUP BY 检索 , 报连接内存超出设定限制错误,连接关闭。
不过这个新功能对管理员和内置用户不生效。 用 ROOT 用户重新登录 MySQL 执行刚才那条 SQL :
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)