相关推荐recommended
MySQL设置远程登录(为root用户设置远程登陆权限)
作者:mmseoamin日期:2024-03-20

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';