admin管理员组

文章数量:1530516

一. 复现出现错误的操作:

业务要求创建视图并提供拥有只能查看视图权限的用户。经过操作创建用户和赋权的操作,本以为完事,用新用户连接Navicat发现报出如下问题:

其中创建用户和赋权的SQL语句如下:

create USER 'XXXX'@'%' IDENTIFIED  BY 'XXXX';

grant select on xx.xxxx to 'XXXX'@'%';

show grants for 'XXXX'@'%';查看新用户的权限信息:

 

跑到数据库服务器上通过命令行登录新用户,发现select语句一切正常。测试环境数据版本为8.0.19。

 二.正常的操作:

在开发环境进行上述操作,发现一切正常。开发环境数据库版本为8.0.23。

三.解决问题:

经过尝试,问题出在创建用户时是否指定加密插件。其中开发环境8.0.23版本数据库经尝试,无论是否指定加密插件都视图均可正常访问。

测试环境8.0.19版本数据库,创建用户时需要指定加密插件为MYSQL_NATIVE_PASSWORD。操作SQL如下:

CREATE USER 'xxxx'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'xxxx';

grant select on xxxx.xxxxto 'xxxx'@'%';

在不指定加密插件的情况下,权限表user中对应用户的加密插件字段plugin为caching_sha2_password。这个不同导致本次错误产生。

四. 总结:

mysql8.0新特性之一,默认使用caching_sha2_password作为身份验证插件。具体为什么会引发看似并不相关的问题,待有时间查阅资料后会记录出来。

本文标签: ConnectionLostmysqlQueryServer