mysql8以前的版本
如果是8以前的版本可以使用
-- GRANT privileges ON database_name.table_name TO 'username'@'hostname' IDENTIFIED BY 'password'; -- privileges表示授予的权限,database_name和table_name表示要授权的数据库和表名,username和hostname表示要授权的用户和主机名,password表示用户的密码 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; -- 刷新权限 FLUSH PRIVILEGES;
重启Mysql服务,此时应当可以连接成功。
MySQL8及以上版本
问题
在MySQL8之后,使用 GRANT
命令的使用不会默认创建新账户,所以如果你执行上面的语句显示
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '123456' WITH GRANT OPTION' at line 1
恭喜你,你应当使用的是MySQL8的版本。
解决
既然问题是使用GRANT
时不会创建新账户,那我们先新建一下就好了。
-- 创建'root'@'%'账户 CREATE USER 'root'@'%' IDENTIFIED BY '123456'; -- 给'root'@'%'账户设置权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; -- 刷新权限 flush privileges;
此时,应当有两个root账户
use mysql; select host, user, authentication_string, plugin from user;
应该可以看到有两个root账户,一个是'root'@'localhost'
和'root'@'%'
。
看一下两个账号的加密插件是不是caching_sha2_password,至于为什么要看,具体原因往下看。
这次应该可以正常连接了。
如果连接的时候显示plugin caching_sha2_password could not be loaded
,那我们就需要改一下加密插件了。
方法一:
这种方法应当在创建'root'@'%'之前设置,不然就使用第二种更加方便。
可以理解为,
方法一是为之后所有新用户指定加密插件,
方法二是修改指定一个用户的加密插件。
修改my.ini文件,在[mysqld]下面新增
default_authentication_plugin=mysql_native_password
方法二:
alter user 'root'@'%' identified with mysql_native_password by '123456';