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

我正在设置一个新的服务器,但一直遇到这个问题。

当我尝试登录MySQL数据库与根用户,我得到的错误:

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

不管我是通过终端(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 |
+------------------+-------------------+

如您所见,用户应该拥有访问权限。

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

它运行Ubuntu 16.04.1 LTS (Xenial Xerus)与Apache, MySQL和PHP,这样它可以托管网站,和iRedMail 0.9.5-1,这样它可以托管邮件。

在安装iRedMail之前,登录MySQL数据库工作正常。我也试过只安装iRedMail,但根也不能用。

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

938286 次浏览

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

如果你需要设置root用户的新密码, MySQL的网站有很好的文档告诉你怎么做:B.3.3.2如何重置Root用户密码 . sh . sh

我将在这里用来展示这个过程,因为MySQL的文档在上面的链接上是清晰而简洁的。

我建议删除MySQL连接-

这是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

在一些系统上,比如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插件。

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

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

选项1:

sudo mysql -u root # I had to use "sudo" since it was a 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 it was a 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';

安迪的评论看来MySQL 8.x. exe。x更新/替换了auth_socketcaching_sha2_password。我没有MySQL 8.x的系统设置。X来检验这个。但是,上面的步骤应该可以帮助您理解这个问题。下面是回答:

MySQL 8.0.4的一个变化是新的默认认证插件是'caching_sha2_password'。新的'YOUR_SYSTEM_USER'将有这个身份验证插件,您现在可以从Bash shell登录&;mysql -u YOUR_SYSTEM_USER -p"并在提示符上为该用户提供密码。不需要“UPDATE user SET插件”;的一步。

# EYZ0 # EYZ1。

我在Windows 10桌面上通过腻子Debian 8 (Jessie)虚拟机交互时遇到了这个问题。

我尝试了这里的各种建议,但都不太管用,我正在Debian主机上运行MariaDB。最后,我发现我无法在安全模式下启动数据库服务器,但我不需要这样做,下面的命令实际上对我有用,即允许新创建的MySQL用户登录到MySQL/MariaDB服务器:

sudo service mysql restart
sudo mysql # Logs in automatically into MariaDB
use mysql;
update user set plugin='' where user='your_user_name';
flush privileges;
exit;
sudo service mysql restart # Restarts the MySQL service

如果上面的步骤对您不太适用,那么请遵循zetacu的文章中概述的步骤,然后执行我的步骤。

现在你应该能够使用远程终端客户端,并安全地登录到MySQL使用命令:

mysql -u your_user_name -p

*在提示时输入密码

第一步:转到文件/etc/phpmyadmin/config.inc.php,然后取消注释你找到“AllowNoPassword"的行。

第二步:登录MySQL默认帐户

mysql -u root -p


use mysql;
update user set plugin="" where user='root';
flush privileges;

这就是全部!

版本的MySQL是这样做的

在新的MySQL客户端中,如果在安装时密码为空,那么它是基于auth_socket插件的。

正确的登录方式是使用sudo权限登录MySQL。

sudo mysql -u root -p

然后更新密码使用:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

一旦完成,停止和开始 MySQL服务器。

sudo service mysql stop
sudo service mysql start

有关完整的详细信息,您可以参考这个链接

步骤1。# EYZ0

步骤2。# EYZ0

步骤3。# EYZ0

这里的“admin”是你的新密码,但你可以修改它。

步骤4。# EYZ0

你完成了。

对我有用:

mysql --user=root mysql
CREATE USER 'some_user'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'some_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

这种情况也发生在我身上。问题出在Linux发行版自带的MySQL存储库上。所以当你简单地这样做时:

sudo apt install mysql-server

它从默认的存储库安装MySQL,这就产生了这个问题。所以为了克服这个问题,你需要卸载已经安装好的MySQL:

sudo apt remove mysql* --purge --auto-remove

然后从MySQL官方网站MySQL APT存储库上下载MySQL存储库。

遵循他们的文档关于如何添加一个存储库和 安装它。

同样作为zetacu回答,您可以验证MySQL 用户现在确实使用mysql_native_password插件。

操作系统:Ubuntu 18.04(仿生海狸)

MySQL: 5.7

  1. skip-grant-tables添加到mysqld.cnf文件的末尾

  2. 复制my.cnf文件

    sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
    
  3. 重置密码

    (base) ➜  ~ sudo service mysql stop
    (base) ➜  ~ sudo service mysql start
    (base) ➜  ~ mysql -uroot
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
    
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    
    mysql> use mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    
    Database changed, 3 warnings
    mysql> update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
    Query OK, 1 row affected, 1 warning (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 1
    
    
    mysql> update user set plugin="mysql_native_password";
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 4  Changed: 0  Warnings: 0
    
    
    mysql>  flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> quit
    Bye
    
  4. 从my.cnf中删除skip-grant-tables

    (base) ➜  ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf
    (base) ➜  ~ sudo emacs /etc/mysql/my.cnf
    (base) ➜  ~ sudo service mysql restart
    
  5. 打开MySQL客户端

    (base) ➜  ~ mysql -uroot -ppassword
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)
    
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    
    mysql>
    
  6. 检查密码策略

    mysql> select @@validate_password_policy;
    +----------------------------+
    | @@validate_password_policy |
    +----------------------------+
    | MEDIUM                     |
    +----------------------------+
    1 row in set (0.00 sec)
    
    
    
    
    mysql> SHOW VARIABLES LIKE 'validate_password%';
    +--------------------------------------+--------+
    | Variable_name                        | Value  |
    +--------------------------------------+--------+
    | validate_password_dictionary_file    |        |
    | validate_password_length             | 8      |
    | validate_password_mixed_case_count   | 1      |
    | validate_password_number_count       | 1      |
    | validate_password_policy             | MEDIUM |
    | validate_password_special_char_count | 1      |
    +--------------------------------------+--------+
    6 rows in set (0.08 sec)!
    
  7. 修改validate_password . #的配置

    mysql> set global validate_password_policy=0;
    Query OK, 0 rows affected (0.05 sec)
    
    
    mysql> set global validate_password_mixed_case_count=0;
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> set global validate_password_number_count=3;
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> set global validate_password_special_char_count=0;
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> set global validate_password_length=3;
    Query OK, 0 rows affected (0.00 sec)
    
    
    mysql> SHOW VARIABLES LIKE 'validate_password%';
    +--------------------------------------+-------+
    | Variable_name                        | Value |
    +--------------------------------------+-------+
    | validate_password_dictionary_file    |       |
    | validate_password_length             | 3     |
    | validate_password_mixed_case_count   | 0     |
    | validate_password_number_count       | 3     |
    | validate_password_policy             | LOW   |
    | validate_password_special_char_count | 0     |
    +--------------------------------------+-------+
    6 rows in set (0.00 sec)
    

请注意

你应该知道你的错误是由什么引起的?validate_password_policy吗?

您应该决定重置密码以填写策略或更改策略。

我也是第一次遇到同样的问题。

现在它是固定的:

首先,复制/etc/mysql/mysql.conf.d/mysqld.cnf文件并粘贴到/etc/mysql/my.cnf

你可以通过命令:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf

现在让我们重置密码:

在终端中使用以下命令:

sudo service mysql stop
sudo service mysql start
sudo mysql -u root

现在您在MySQL控制台中。

然后让我们写一些查询来重置我们的根密码:

USE mysql
update mysql.user set authentication_string=password('newpass') where user='root' and Host ='localhost';
update user set plugin="mysql_native_password";
flush privileges;
quit

现在我们可以清理/etc/mysql/my.cng

在编辑器中打开上面的文件,删除文件中的所有行。

之后,让我们重新启动MySQL:

sudo mysql service restart

现在让我们使用MySQL和新创建的密码:

sudo mysql -u root -p

最后输入新创建的密码。

经过几个小时的研究,我找到了解决方案。

停止MySQL

sudo service mysql stop

制作MySQL服务目录。

sudo mkdir /var/run/mysqld

赋予MySQL用户写入服务目录的权限。

sudo chown mysql: /var/run/mysqld

手动启动MySQL,不需要权限检查或联网。

sudo mysqld_safe --skip-grant-tables --skip-networking &

无需密码即可登录。

mysql -uroot mysql

更新密码

UPDATE mysql.user SET authentication_string=PASSWORD('YOURNEWPASSWORD'), plugin='mysql_native_password' WHERE User='root' AND Host='%';
EXIT;

关闭MySQL。

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

正常启动MySQL服务。

sudo service mysql start

就我而言,

mysql -u root -p


Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我确信我的密码是正确的。否则,错误代码将是ERROR 1045 (28000): Access denied for user

所以我重新登录使用sudo

sudo mysql -u root -p

这一次,我成功了。看到# EYZ0。

然后修改root密码,

mysql> alter user 'root'@'%' identified with mysql_native_password by 'me123';
Query OK, 0 rows affected (0.14 sec)


mysql>

然后使用sudo /etc/init.d/mysql restart重新启动服务器。

不需要sudo

数据库初始化时使用2个全特权帐户:第一个帐户是“root”,无法访问,第二个帐户是您的用户名(使用命令whoami检查)。

要访问root帐户,您需要使用您的用户名登录

mysql -u $(whoami)

并手动修改root用户密码

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

以“root”身份登录

mysql -u root -p

经过几个小时的挣扎,没有任何解决方案,这对我来说很有效。我发现一个YouTube视频,它说密码列现在被称为authentication_string

所以我可以更改我的密码如下:

首先从终端进入MySQL客户端:

sudo mysql

然后在mysql里面,在mysql>后面输入任何东西:

mysql> use mysql
mysql> update user set authentication_string=PASSWORD("mypass") where user='root';
mysql> flush privileges;
mysql> quit;

此时,您已经离开了MySQL客户机,回到了正常的终端位置。您需要重新启动MySQL客户端才能生效。对于这种类型,如下所示:

sudo service mysql restart

请参考这个视频链接以更好地理解。

有一个很好的和定期更新的指南,如何为最新的MySQL设置新密码:

如何在Ubuntu 20.04上安装MySQL .

最好从上面的页面中阅读整个主题,但简而言之,这可能会有所帮助。

运行安全脚本:

sudo mysql_secure_installation

mysql_secure_installation的详细信息

之后,您可以按照以下步骤修改密码:

sudo mysql

mysql># EYZ0

修改root用户密码的详细信息

如果遇到问题,可能需要重新安装MySQL。

我已经完成了以下步骤来摆脱这个问题。

使用(Sudo mysql -p -u root)登录到您机器中的MySQL,并执行以下查询。

  1. CREATE USER 'jack'@'localhost' IDENTIFIED WITH mysql_native_password BY '<>';

  2. 授予上的所有权限给'jack'@'localhost';

  3. SELECT user,plugin,host FROM mysql。WHERE user = 'root';

    +------+-------------+-----------+
    | user | plugin      | host      |
    +------+-------------+-----------+
    | root | auth_socket | localhost |
    +------+-------------+-----------+
    
  4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<>';

  5. < p >冲洗特权;

请尝试一次,如果您仍然得到错误。我希望这段代码对你有很大的帮助!!

首先

sudo mysql -u root -p


SHOW VARIABLES LIKE 'validate_password%';

我们会看到这样的东西:

+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+

我们需要改变这些行:

  1. validate_password.length
  2. validate_password.number_count
  3. validate_password.policy
  4. validate_password.special_char_count
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.number_count=0;
SET GLOBAL validate_password.special_char_count=0;


SHOW VARIABLES LIKE 'validate_password%';

我们将看到:

+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password.check_user_name    | ON    |
| validate_password.dictionary_file    |       |
| validate_password.length             | 4     |
| validate_password.mixed_case_count   | 1     |
| validate_password.number_count       | 0     |
| validate_password.policy             | LOW   |
| validate_password.special_char_count | 0     |
+--------------------------------------+-------+

现在从MySQL客户端退出:

exit;
sudo mysql -u root -p

现在你可以写密码了,四个或四个以上的字母。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';


exit;


sudo mysql -u root -p

数据库中有root用户的新密码;

对于任何尝试了这里的解决方案但没有任何效果的人,请确保您使用了正确的命令,sudo sudo mysql -u root -p而不是mysql mysql -u root -p

您需要输入两个密码,一个是当前用户的密码,一个是根用户的密码。

这适用于我的MySQL版本8.0.26和Ubuntu 20.04 (Focal Fossa)。

sudo mysql -u root


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


+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+


mysql> UPDATE user SET


plugin='caching_sha2_password' WHERE User='root';


mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'you_mysql_password';
mysql> FLUSH PRIVILEGES;
mysql> exit;


sudo service mysql restart

对于那些在macOS上安装最新MariaDB并遵循MariaDB文档中的本教程的用户,运行:

# EYZ0

而不是仅仅给出mariadb-secure-installation命令。否则,运气不好,尽管出现错误提示:

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.


Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Enter current password for root (enter for none):
Aborting!

这适用于我的mysql版本15.1:

$ sudo mysql


MariaDB [mysql]> use mysql;
MariaDB [mysql]> set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> quit

以“root”身份登录

mysql -u root -p

感谢拉乌尔帽匠

@zetacu和@peter给出的答案非常准确,但只有一部分对我有用。在这里添加这个给正在使用的用户

mysql  Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))

我的用户表是这样的:

mysql> SELECT User,Host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User             | Host      | plugin                |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| pk               | localhost | auth_socket           |
| root             | localhost | auth_socket           |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

因此,首先我采用了第二个(推荐的)选项,用您拥有的用户名替换YOUR_SYSTEM_USER。所以,我用同样的方法创建了一个新用户,但没有任何效果。

然后我尝试了第一种方法,设置根用户使用my_native_password插件:

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


sudo service mysql restart

它成功了!!因此,只需创建一个新用户,并使其使用my_native_password插件。