错误1698(28000)。拒绝用户'root'@'localhost&#39的访问。

我正在建立一个新的服务器,一直遇到这个问题。

当我试图用根用户登录到MySQL数据库时,我得到了错误。

ERROR 1698 (28000):用户'root'@'localhost&#39的访问被拒绝。

如果我通过终端(SSH)、PHPMyAdmin或MySQL客户端(如Navicat)连接,这并不重要。他们都失败了。

我查看了mysql.user表,得到以下结果。

+------------------+-------------------+
| 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 |
+------------------+-------------------+

如你所见,root应该有权限。

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

它运行的是Ubuntu 16.04.1 LTS,带有Apache、MySQL和PHP,因此它可以托管网站,还有iRedMail 0.9.5-1,因此它可以托管邮件。

在我安装iRedMail之前,登录到MySQL数据库的工作很正常。我也试过,只安装iRedMail,但然后root,也不工作......

如果有人能告诉我如何解决我的MySQL登录问题或如何在现有的MySQL安装基础上安装iRedMail。是的,我试过安装提示,我在配置文件中找不到这些变量。

解决办法

一些系统如Ubuntu,mysql默认使用UNIX auth_socket插件

基本上意味着。db_users使用它,将通过系统用户credentias进行"auth"。你可以通过以下操作查看你的root用户是否被设置成这样。

$ sudo mysql -u root # I had to use "sudo" since is 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'插件

有2种方法来解决这个问题。

1.你可以设置根用户使用mysql_native_password插件 2.2. 你可以用你的system_user创建一个新的db_user(推荐)。

选项1:__

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

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

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

$ service mysql restart

记住,如果你使用选项2,你就必须以你的系统用户名连接到mysql(mysql -u YOUR_SYSTEM_USER)。

注意:在一些系统(例如,Debian stretch)中,'auth_socket'插件被称为['unix_socket'](https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/),因此相应的SQL命令应该是。`UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';`。

更新: 从@andy'的评论来看,似乎mysql 8.x.x更新/替换了auth_socket用于caching_sha2_password,我没有设置mysql 8.x.x的系统来测试,但是上面的步骤应该可以帮助你理解这个问题。以下是答复。

从MySQL 8.0.4开始的一个变化是,新的默认认证插件是'caching_sha2_password'。新的'YOUR_SYSTEM_USER'将有这个认证插件,你现在可以用"mysql -u YOUR_SYSTEM_USER -p"从bash shell登录,并在提示中提供该用户的密码。不需要进行"UPDATE user SET plugin"步骤。关于8.0.4的默认auth插件的更新,请参见,https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

评论(23)

我建议删除Mysql连接----。

UPDATE-这是针对Mysql 5.5版本的,如果你的版本不同,请相应地改变第一行的内容

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

然后重新安装,但这次要自己设置一个root密码。 这将节省大量的精力。

sudo apt-get update
sudo apt-get install mysql-server
评论(3)

你想用root用户访问MySQL,但你没有提供root的正确密码。

如果你需要为root设置一个新的密码,MySQL网站有关于如何做的很好的文档:http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

我不会在这里展示这个过程,因为MySql文档在上述链接中它是清晰而简洁的**。

评论(3)