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

Fol*_*ann 306 mysql iredmail

所以...我正在设置一个新服务器并继续遇到这个问题.

当我尝试使用root用户登录MySQL数据库时,出现"ERROR 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 |
+------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)

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

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

它运行Ubuntu 16.04.1 LTS与Apache,MySQL和PHP,因此它可以托管网站,和iRedMail 0.9.5-1,以便它可以托管邮件.

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

如果有人能告诉我如何修复我的MySQL登录问题或如何安装iRedMail,在现有的MySQL安装之上.是的,我尝试了安装提示,我在配置文件中找不到这些变量.

任何帮助深表感谢 :)

zet*_*acu 905

像Ubuntu这样的系统,mysql默认使用UNIX auth_socket插件.

基本上意味着:db_users使用它,将由系统用户凭证 "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 |
+------------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 您可以将root用户设置为使用该mysql_native_password插件
  2. 你可以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;

$ service mysql restart
Run Code Online (Sandbox Code Playgroud)

选项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
Run Code Online (Sandbox Code Playgroud)

请记住,如果使用选项#2,则必须连接到mysql作为系统用户名(mysql -u YOUR_SYSTEM_USER)

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

更新: 从@安迪的评论似乎是MySQL的8.xx更新/更换auth_socketcaching_sha2_password我没有一个系统的设置与MySQL 8.xx来测试这一点,但是上面的步骤应该可以帮助你理解这个问题.这是回复:

MySQL 8.0.4的一个变化是新的默认身份验证插件是'caching_sha2_password'.新的'YOUR_SYSTEM_USER'将具有此auth插件,您现在可以使用"mysql -u YOUR_SYSTEM_USER -p"从bash shell登录,并在提示符下为该用户提供密码.无需"UPDATE用户SET插件"步骤.对于8.0.4默认的auth插件更新,请参阅https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

  • `IDENTIFIED BY ''` 位可能应该是 `IDENTIFIED BY 'YOUR_PASSWD'` (6认同)
  • 选项2起作用。我认为,创建新用户并使用root身份始终是最佳做法! (5认同)
  • 选项1对我有用.但是我还需要运行`sudo gedit/etc/phpmyadmin/config.inc.php`.然后我搜索了'AllowNoPassword`并取消注释包含它的两行.然后我能够以root身份登录而无需密码. (4认同)
  • 最后,一个“实际可行”的答案!那里有无数的回答说`mysqld_safe --skip-grant-tables`等,但是没有用。 (2认同)
  • 好的,怎么做,如果`sudo mysql -u root -p`不允许我进去? (2认同)

Nan*_*esh 119

点击这里:

新版本的MYSQL就是这样做的.

在新的my-sql中,如果密码在安装时保留为空,则它基于auth_socket插件.

正确的方法是使用sudo权限登录my-sql .

$ sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令更新密码:

$ ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
Run Code Online (Sandbox Code Playgroud)

一旦完成stop and start了mysql服务器.

$  sudo service mysql stop
$  sudo service mysql start
Run Code Online (Sandbox Code Playgroud)

有关完整的详细信息,请参阅此链接.

对任何疑问发表评论.

  • 在ubuntu 18.04上工作得很好 (7认同)
  • 使用“sudo”时不需要“-p” (4认同)
  • 这对我使用Ubuntu 18很有用。非常感谢。 (3认同)
  • 哇,这对我有用,mysql Ver 8.0.25-0ubuntu0.20.04.1,#nitipSendal (2认同)

小智 14

不需要须藤

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

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

mysql -u $(whoami)
Run Code Online (Sandbox Code Playgroud)

并手动更改root密码

use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit
Run Code Online (Sandbox Code Playgroud)

以“root”身份登录

mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

  • 当我使用“mysql -u $(whoami)”时,它还会给出“错误1045(28000):用户'kaw'@'localhost'访问被拒绝(使用密码:NO)” (2认同)

小智 9

经过数小时的努力,这里没有解决方案,这对我有用,然后我找到了一个 youtube 视频,它说密码列现在称为 authentication_string 。所以我可以按如下方式更改我的密码:首先从终端进入 mysql

sudo mysql
Run Code Online (Sandbox Code Playgroud)

然后在 mysql> 之后输入任何内容

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

此时您已退出 mysql 回到您正常的终端位置。您需要重新启动 mysql 才能生效。对于该类型,请执行以下操作:

sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)

请参阅此视频链接以更好地理解


Tah*_*lid 8

我在我的Windows 10桌面上通过Putty与Debian 8 VM进行交互时遇到了这个问题.

我在这里尝试了各种建议,但没有什么工作,我在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
Run Code Online (Sandbox Code Playgroud)

如果以上内容对您不起作用,请按照上面zetacu帖子(zetacu)中列出的步骤操作,然后按照我的步骤进行操作.

现在您应该能够使用远程终端客户端并使用以下命令安全地登录到mysql:

mysql -u your_user_name -p
Run Code Online (Sandbox Code Playgroud)

*在提示时输入密码


Emi*_*347 7

我建议删除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
Run Code Online (Sandbox Code Playgroud)

并再次安装但是这次自己设置了一个root密码.这将节省很多精力.

sudo apt-get update
sudo apt-get install mysql-server
Run Code Online (Sandbox Code Playgroud)


小智 7

为了第一

sudo mysql -u root -p

SHOW VARIABLES LIKE 'validate_password%';
Run Code Online (Sandbox Code Playgroud)

我们会看到这样的东西:

sudo mysql -u root -p

SHOW VARIABLES LIKE 'validate_password%';
Run Code Online (Sandbox Code Playgroud)

我们需要更改这些行:

  1. 验证密码.长度
  2. 验证密码.number_count
  3. 验证密码策略
  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%';
Run Code Online (Sandbox Code Playgroud)

我们会看到:

+--------------------------------------+--------+
| 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      |
+--------------------------------------+--------+
Run Code Online (Sandbox Code Playgroud)

现在退出 MySQL 客户端:

exit;
sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

现在您可以编写密码,仅四个或更多字母。

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

exit;

sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

您的新密码位于用户“root”的数据库中;


小智 6

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

现在它已修复:

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

您可以通过以下命令来完成:

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

现在让我们重置密码:

在终端中使用以下命令:

sudo service mysql stop
sudo service mysql start
sudo mysql -u root
Run Code Online (Sandbox Code Playgroud)

现在您已进入 MySQL 控制台。

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

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
Run Code Online (Sandbox Code Playgroud)

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

在编辑器中打开上述文件并删除文件内的整行。

之后让我们重新启动MySQL:

sudo mysql service restart
Run Code Online (Sandbox Code Playgroud)

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

sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

最后输入您新创建的密码。

  • 效果很好!但你的答案需要更新!/etc/mysql/my.cnf 而不是 /etc/mysql/my.cng 并为服务重新启动其 sudo service mysql restart (2认同)

San*_*Dev 6

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

停止MySQL

sudo service mysql stop
Run Code Online (Sandbox Code Playgroud)

制作MySQL服务目录。

sudo mkdir /var/run/mysqld
Run Code Online (Sandbox Code Playgroud)

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

sudo chown mysql: /var/run/mysqld
Run Code Online (Sandbox Code Playgroud)

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

sudo mysqld_safe --skip-grant-tables --skip-networking &
Run Code Online (Sandbox Code Playgroud)

无需密码即可登录。

mysql -uroot mysql
Run Code Online (Sandbox Code Playgroud)

更新密码

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

关闭 MySQL。

sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown
Run Code Online (Sandbox Code Playgroud)

正常启动MySQL服务。

sudo service mysql start
Run Code Online (Sandbox Code Playgroud)


Y. *_*gha 5

步骤1。 sudo mysql -u root -p

第2步。 USE mysql;

第三步 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

这里的“ admin”是您的新密码,您可以更改它。

第四步。 exit

谢谢。大功告成


Moh*_*med 5

就我而言,

mysql -u root -p

Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Run Code Online (Sandbox Code Playgroud)

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

所以我使用sudo重新登录,

sudo mysql -u root -p
Run Code Online (Sandbox Code Playgroud)

这次它对我有用。请参阅文档

然后修改root密码,

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

mysql>
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*sic 5

有一个关于如何为最新的 MySQL 设置新密码的良好且定期更新的指南。

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04

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

运行安全脚本:

sudo mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)

“mysql_secure_installation”的详细信息

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

sudo mysql
Run Code Online (Sandbox Code Playgroud)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

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

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