mysql – ERROR 1698(28000):用户’root’@’localhost’拒绝访问
作者:互联网
所以…我正在设置一个新服务器并继续遇到这个问题.
当我尝试使用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 |
+------------------+-------------------+
如您所见,root应该具有访问权限.
服务器非常简单,因为我已经尝试解决这个问题了一段时间..
它运行Ubuntu 16.04.1 LTS与Apache,MySQL和PHP,因此它可以托管网站,和iRedMail 0.9.5-1,以便它可以托管邮件.
在安装iRedMail之前,登录MySQL数据库工作正常.我也试过,只是安装iRedMail,但是然后root,也行不通……
如果有人能告诉我如何修复我的MySQL登录问题或如何安装iRedMail,在现有的MySQL安装之上.是的,我尝试了Installation Tips,我在配置文件中找不到这些变量.
任何帮助深表感谢 :)
解决方法:
有些系统如Ubuntu,mysql默认使用UNIX auth_socket plugin.
基本上意味着: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 |
+------------------+-----------------------+
正如您在查询中看到的,root用户正在使用auth_socket插件
有两种方法可以解决这个问题:
>您可以将root用户设置为使用mysql_native_password插件
>您可以使用system_user创建新的db_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作为系统用户名(mysql -u YOUR_SYSTEM_USER)
注意:在某些系统(例如,Debian stretch)上,’auth_socket’插件被称为‘unix_socket’,因此相应的SQL命令应为:UPDATE user SET plugin =’unix_socket’WHERE User =’YOUR_SYSTEM_USER’;
更新:
来自@ andy的评论似乎是mysql 8.x.x更新/替换了auth_socket for caching_sha2_password我没有用mysql 8.x.x进行系统设置来测试这个,但是上面的步骤应该可以帮助你理解这个问题.这是回复:
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/
标签:mysql,iredmail 来源: https://codeday.me/bug/20190915/1805697.html