Navicat 远程连接数据库 ERROR 1698 : Access denied for user ‘root‘@‘localhost‘ 问题解决

查看是否有远程ip登陆授权

use mysql;
select user,host from user;

在这里插入图片描述
这里我把host设置成了’%'来匹配任意ip,如果此时为localhost或者其他ip,则说明限制了ip登录,没有远程ip登陆授权。
通过命令

UPDATE user SET host = '%' WHERE user = 'root' AND host = 'localhost';
GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;

来进行设置,使其拥有通过远程ip登录的权限。

查看plugin设置

参考链接: https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost.
在ubuntu里,mysql会设置root的plugin为auth_socket,表明它会被当前系统用户证书(system user credentials)所加密验证,显然使用远程ip连接数据库是无法通过这个验证的。
于是可以通过查看其他普通用户的plugin设置(不同版本的mysql plugin设置可能不同),并将root的plugin更改为与其一致即可。
即使用命令(当前版本mysql-8 不同用户plugin为caching_sha2_password)

USE mysql;
UPDATE user SET plugin='caching_sha2_password' WHERE user ='root';
flush privileges;
exit;
sudo service mysql restart;

随后即可成功连接远程数据库
在这里插入图片描述
当然,这种方式显然不是安全的,对于我这样的懒人是足够了,比较推荐的方式可以查看一下参考连接QAQ。

你可能感兴趣的:(mysql,linux,安全,mysql)