开发者社区> 问答> 正文

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

我正在设置新服务器,并继续遇到此问题。

当我尝试以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运行Ubuntu 16.04.1 LTS,因此可以托管网站,而iRedMail 0.9.5-1则可以托管邮件。

在安装iRedMail之前,登录MySQL数据库工作正常。我也尝试过,只是安装了iRedMail,但是然后以root身份也不起作用...

如果有人可以告诉我如何解决MySQL登录问题或如何安装iRedMail,请在现有的MySQL安装之上。是的,我尝试了安装技巧,但在配置文件中找不到那些变量。

展开
收起
保持可爱mmm 2020-05-10 20:38:22 632 0
1 条回答
写回答
取消 提交回答
  • 某些系统,例如Ubuntu,mysql,默认情况下使用UNIX auth_socket插件。

    基本上意味着:使用它的db_users,将由系统用户凭据 “认证” 。您可以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插件

    有两种解决方法:

    您可以设置root用户使用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;

    $ 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 -u YOUR_SYSTEM_USER)连接到mysql。

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

    更新: 从@andy的评论看来,mysql 8.xx已更新/替换了,auth_socket因为caching_sha2_password我没有使用mysql 8.xx进行系统安装来测试此问题,但是上述步骤应该可以帮助您了解问题。这是答复:

    自MySQL 8.0.4起,一项更改是新的默认身份验证插件为'caching_sha2_password'。新的“ YOUR_SYSTEM_USER”将具有此auth插件,您现在可以使用“ mysql -u YOUR_SYSTEM_USER -p”从bash shell登录,并在提示符下提供该用户的密码。不需要“更新用户SET插件”步骤。有关8.0.4默认身份验证插件更新,请参见https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/来源:stack overflow

    2020-05-10 20:38:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载