mysql8不可以root用户直接授权,需要新建用户。
问题
使用docker安装mysql8,需求开启远程登录连接,但使用grant操作一直报错。之前使用5.7版本的时候是没有问题的,所以认为应该是版本问题导致的,MySQL8应该修改了赋予权限的方式。
1 | mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root'; |
原因
新版本将创建账户和赋予权限的方式分开,mysql8不可以root用户直接授权,需要新建用户。
解决方法
- 创建dev用户(以dev用户为例)
1
2
3# 新建dev用户
mysql> create user 'dev'@'%' identified with mysql_native_password by 'dev';
Query OK, 0 rows affected (0.11 sec)
MySQL8和5的密码加密方式不同,mysql_native_password是5的加密方式。mysql已经将之前的mysql_native_password认证,修改成了caching_sha2_password认证方式。所以,使用类似于navicat或是sqlyog这些客户端时,默认使用还是mysql_native_password认证方式,所以即使输入正确的用户和密码依然登录不成功。客户端新版未测试过,不清楚是否已经支持
查看下表里是否有dev用户,host是否为
%
1
2
3
4
5
6
7
8
9
10
11
12
13# 查看mysql库user表
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| dev | % |
| healthchecker | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)赋予权限, (修改权限时在后面加with grant option)
1
2
3# 将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
mysql> grant all on *.* to 'dev'@'%';
Query OK, 0 rows affected (0.10 sec)刷新权限
1
2
3# 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)再次使用Navicat测试,连接成功!