首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误1698 (28000):拒绝用户'root'@'localhost‘的访问

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

Stack Overflow用户
提问于 2016-09-01 22:06:07
回答 22查看 937.2K关注 0票数 576

我正在设置一个新的服务器,并不断地遇到这个问题。

当我试图与根用户登录到MySQL数据库时,会得到以下错误:

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

我是否通过终端(SSH)、phpMyAdmin或MySQL客户端(如纳维卡特 )连接并不重要。他们都失败了。

我查看了mysql.user表,得到了以下内容:

代码语言:javascript
运行
复制
+------------------+-------------------+
| 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 |
+------------------+-------------------+

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

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

它使用Apache、MySQL和PHP运行Ubuntu 16.04.1 LTS (Xenial Xerus),以便能够托管网站,并运行iRedMail 0.9.5-1,以便托管邮件。

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

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

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2017-03-12 01:17:59

在某些系统上,如Ubuntu,MySQL默认使用插座插件

基本上,这意味着:使用它的db_users将由(系统用户凭据)进行“身份验证”。通过执行以下操作,您可以看到您的root用户是否像这样设置:

代码语言:javascript
运行
复制
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. 您可以使用db_user创建一个新的system_user (推荐)

选项1:

代码语言:javascript
运行
复制
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 )

代码语言:javascript
运行
复制
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作为您的系统用户名(mysql -u YOUR_SYSTEM_USER)。

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

安迪的评论来看,MySQL 8.x.x似乎更新/替换了caching_sha2_passwordauth_socket。我没有用MySQL 8.x.x来测试这一点的系统设置。然而,上面的步骤应该帮助您理解这个问题。以下是答案:

MySQL 8.0.4中的一个变化是,新的默认身份验证插件是“caching_sha2_password”。新的' YOUR_SYSTEM_USER‘将具有这个身份验证插件,您现在可以使用"mysql -u YOUR_SYSTEM_USER -p“从Bash登录,并在提示符下为该用户提供密码。没有任何需要“更新用户集插件”的步骤。

有关8.0.4默认身份验证插件更新,请参见https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/

票数 1.6K
EN

Stack Overflow用户

发布于 2018-09-14 16:17:47

新版本的MySQL就是这样做的

在新的MySQL客户机中,如果密码在安装时为空,则基于auth_socket插件。

正确的方法是使用MySQL特权登录到sudo

代码语言:javascript
运行
复制
sudo mysql -u root -p

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

代码语言:javascript
运行
复制
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

一旦完成,停止并启动MySQL服务器。

代码语言:javascript
运行
复制
sudo service mysql stop
sudo service mysql start

要获得完整的详细信息,可以参考此链接

票数 337
EN

Stack Overflow用户

发布于 2020-01-10 18:31:38

不需要苏多

数据库由两个全权限帐户初始化:第一个帐户是“根”帐户,它是不可访问的,第二个帐户是您的用户名(用命令whoami检查)。

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

代码语言:javascript
运行
复制
mysql -u $(whoami)

并手动更改root密码。

代码语言:javascript
运行
复制
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit

以“root”身份登录

代码语言:javascript
运行
复制
mysql -u root -p
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39281594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档