错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问

本教程将介绍错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问 教程 第1张

问题描述

我正在设置一个新服务器并一直遇到这个问题.

当我尝试使用 root 用户登录 MySQL 数据库时,我收到错误:

错误 1698 (28000):拒绝用户 'root'@'localhost' 访问

通过终端 (SSH)、phpMyAdmin 或MySQL 客户端,例如 Navicat.他们都失败了.

我查看了 表并得到以下信息:

+------------------+-------------------+
| user | host  |
+------------------+-------------------+
| root | %  |
| root | 127.0.0.1|
| amavisd | localhost|
| debian-sys-maint | localhost|
| iredadmin  | localhost|
| iredapd | localhost|
| mysql.sys  | localhost|
| phpmyadmin | localhost|
| root | localhost|
| roundcube  | localhost|
| vmail| localhost|
| vmailadmin | localhost|
| amavisd | test4.folkmann.it |
| iredadmin  | test4.folkmann.it |
| iredapd | test4.folkmann.it |
| roundcube  | test4.folkmann.it |
| vmail| test4.folkmann.it |
| vmailadmin | test4.folkmann.it |
+------------------+-------------------+

如您所见,用户 应该具有访问权限.

服务器很简单,因为我已经尝试解决这个问题一段时间了.

它正在运行 Ubuntu 16.04.1 LTS (Xenial Xerus) 使用 Apache、MySQL 和 PHP,以便它可以托管网站,以及 iRedMail 0.9.5-1,以便它可以托管邮件.

在我安装 iRedMail 之前登录 MySQL 数据库可以正常工作.我也试过只安装 iRedMail,但 root 也不起作用.

怎么解决我的 MySQL 登录问题或怎么在现有 MySQL 安装上安装 iRedMail?是的,我尝试了 安装提示,但我不能在配置文件中找到这些变量.

推荐答案

一些系统如 Ubuntu、MySQL 正在使用 UNIX auth_socket 插件 默认.

基本上这意味着:您可以通过执行以下操作来查看您的 root 用户是否设置为这样:

sudo mysql -u root # I had to use "sudo" since it was a new installation

mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;

+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket  |
| mysql.sys  | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+

正如您在查询中看到的,root 用户正在使用 auth_socket 插件.

有两种方法可以解决这个问题:

    你可以设置用户使用mysql_native_password插件

    您可以使用 system_user 创建一个新的 db_user(推荐)

    You can set the user to use the mysql_native_password plugin

    You can create a new db_user with you system_user (recommended)

选项 1:

sudo mysql -u root # I had to use "sudo" since it was new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

选项 2:(将 YOUR_SYSTEM_USER 替换为您拥有的用户名)

sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;

sudo service mysql restart

请记住,如果您使用选项 #2,您必须以系统用户名 (mysql -u YOUR_SYSTEM_USER) 连接到 MySQL.

注意:在某些系统上(例如,Debian 9 (Stretch)) 'auth_socket' 插件被称为 'unix_socket',所以对应的SQL命令应该是:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';

从@andy 的评论看来,MySQL 8.x.x 更新/替换了 caching_sha2_passwordauth_socket.我没有使用 MySQL 8.x.x 的系统设置来测试这个.但是,上述步骤应该可以帮助您理解问题.回复如下:

好了关于错误 1698 (28000): 拒绝用户 'root'@'localhost' 的访问的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。