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

thtygnil  于 2021-06-25  发布在  Mysql
关注(0)|答案(17)|浏览(339)

我正在安装一个新服务器,一直遇到这个问题。
当我尝试使用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 |
+------------------+-------------------+

如您所见,root应该具有访问权限。
服务器非常简单,因为我已经尝试解决了一段时间了。。
它运行的是带有apache、mysql和php的ubuntu16.04.1lts,这样就可以托管网站,而iredmail0.9.5-1则可以托管邮件。
在安装iredmail之前,登录mysql数据库可以正常工作。我也试过了,只是安装了iredmail,但是root,也不起作用。。。
如果有人能告诉我如何修复我的mysql登录问题,或者如何在现有mysql安装的基础上安装iredmail。是的,我尝试了安装技巧,但在配置文件中找不到这些变量。

vwkv1x7d

vwkv1x7d1#

我在一个debian8vm上遇到了这个问题,我在windows10桌面上通过putty与之交互。
我在这里尝试了各种各样的建议,但是没有什么效果,我正在debian主机上运行mariadb。最后,我发现我无法在安全模式下启动db服务器,但我不需要这样做,以下命令实际上对我有效,即允许新创建的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在上面的帖子(zetacu)中概述的步骤来做,然后按照我的步骤来做。
现在,您应该能够使用远程终端客户端并使用以下命令安全地登录到mysql:

mysql -u your_user_name -p
  • 出现提示时键入密码
093gszye

093gszye2#

就我而言,

dev@Dev-007:~$ mysql -u root -p
Enter password: 
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我确信我的密码是正确的,否则错误代码将是 ERROR 1045 (28000): Access denied for user 所以我用sudo重新登录,

dev@Dev-007:~$ sudo mysql -u root -p

这一次我成功了。查看文档
然后更改根密码,

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

yzuktlbb

yzuktlbb3#

操作系统:ubuntu18.04
mysql:5.7
添加 skip-grant-tables 到mysqld.cnf的文件结尾
cp我的.cnf

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

重置密码

(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

拆下 skip-grant-tables 从my.cnf

(base) ➜  ~ sudo emacs /etc/mysql/mysql.conf.d/mysqld.cnf 
(base) ➜  ~ sudo emacs /etc/mysql/my.cnf                 
(base) ➜  ~ sudo service mysql restart

打开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>

检查密码策略

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)!

更改的配置 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)

注意你应该知道你的错误是由什么引起的?验证密码策略?
您应该决定重置密码以填充策略或更改策略。
enyaitl3

enyaitl34#

点击此处:
新版mysql就是这样做的。
在新的mysql中,如果安装时密码为空,则它基于 auth_socket 插件。
正确的方法是使用 sudo 特权。

$ sudo mysql -u root -p

然后使用以下方法更新密码:

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

一旦这样做了 stop and start mysql服务器。

$  sudo service mysql stop
$  sudo service mysql start

有关完整的详细信息,请参阅此链接。
如有疑问,请发表评论。

icomxhvb

icomxhvb5#

不需要sudo
数据库由两个全权限帐户初始化:第一个是“root”,不可访问,第二个是用户名(使用命令检查) whoami ).
要启用对根帐户的访问,您需要使用用户名登录

mysql -u $(whoami)

手动更改root用户的密码

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

以“root”身份登录

mysql -u root -p
ergxz8rk

ergxz8rk6#

这也发生在我身上。问题在于linux发行版已经附带的mysql repo。所以当你这么做的时候: $ sudo apt install mysql-server 它从默认的repo安装mysql,这就产生了这个问题。为了克服这个问题,您需要卸载安装的mysql $ sudo apt remove mysql* --purge --auto-remove 然后从mysql官方网站mysql apt repo下载mysql repo,并按照他们的文档说明如何添加repo和安装它。这没有问题。同样正如@zetacu所回答的,您可以验证mysql root现在确实使用mysql\u native\u密码插件

vdzxcuhz

vdzxcuhz7#

关于如何为最新的mysql设置新密码,有一个很好的、定期更新的指南。
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04
最好从上面的链接中阅读整个主题,但简而言之,这可能会有所帮助,
运行安全脚本:

sudo mysql_secure_installation

“mysql\u secure\u安装”的详细信息
之后,您可以按照下面的步骤更改密码

sudo mysql

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password'; 长安根用户密码详细信息
如果您有问题,可能需要重新安装mysql。

zzlelutf

zzlelutf8#

经过几个小时的研究,我找到了解决办法。
停止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
u59ebvdq

u59ebvdq9#

我建议删除mysql连接-
这是为MySQL5.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

再次安装,但这次自己设置根密码。这将节省很多精力。

sudo apt-get update
sudo apt-get install mysql-server
xmakbtuz

xmakbtuz10#

经过几个小时的挣扎,这里没有解决方案,这对我来说很管用,然后我发现了一个youtube视频,上面说密码栏现在被称为authentication\u 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

请参阅此视频链接以获得更好的理解

l5tcr1uw

l5tcr1uw11#

第一步:转到/etc/phpmyadmin/config.inc.php,然后取消对allownopassword所在行的注解。第二步:登录mysql默认帐户

mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;

仅此而已!

aamkag61

aamkag6112#

我已经做了以下步骤来解决这个问题。使用(sudo mysql-p-u root)登录到您的机器中的mysql并点击以下查询。

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

2. GRANT ALL PRIVILEGES ON *.* TO 'jack'@'localhost';

3. SELECT user,plugin,host FROM mysql.user WHERE user = 'root';
+------+-------------+-----------+
| user | plugin      | host      |

+------+-------------+-----------+

| root | auth_socket | localhost |

+------+-------------+-----------+

4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<<any password>>';

5. FLUSH PRIVILEGES;

如果仍然出现错误,请尝试一次。我希望这段代码能帮到你很多!!

e5nszbig

e5nszbig13#

第一步。 sudo mysql -u root -p 第二步。 USE mysql; 第三步。 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'; 这里的'管理员'是你的新密码,你可以改变它。
第四步。 exit 谢谢。你完了。

mwngjboj

mwngjboj14#

我第一次也面临同样的问题。
现在它是固定的:
首先,你复制 /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

最后输入新创建的密码。

yyyllmsg

yyyllmsg15#

一些系统,如ubuntu、mysql,默认情况下使用unix auth\u socket插件。
基本上意味着:dbèu用户使用它时,将被系统用户认证为“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 插件
有两种方法可以解决这个问题:
可以将根用户设置为使用 mysql_native_password 插件
您可以创建一个新的 db_user 与你 system_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;

$ sudo service mysql restart

选项2:(用你的用户名替换你的系统用户)

$ 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( mysql -u YOUR_SYSTEM_USER )
注意:在某些系统(如debian stretch)上,“auth\u socket”插件称为“unix\u 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\u sha2\u password”。新的'your\u system\u user'将拥有这个auth插件,您现在可以使用“mysql-u your\u system\u user-p”从bashshell登录,并在提示符处提供该用户的密码。不需要“更新用户设置插件”步骤。有关8.0.4默认身份验证插件更新,请参阅,https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

相关问题