我正在设置一个新的服务器,并不断地遇到这个问题。
当我试图与根用户登录到MySQL数据库时,会得到以下错误:
错误1698 (28000):拒绝用户'root'@'localhost‘的访问
我是否通过终端(SSH)、phpMyAdmin或MySQL客户端(如纳维卡特 )连接并不重要。他们都失败了。
我查看了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 |
+------------------+-------------------+
如您所见,用户根应该具有访问权限。
服务器非常简单,因为我已经尝试了一段时间来解决这个问题。
它使用Apache、MySQL和PHP运行Ubuntu 16.04.1 LTS (Xenial Xerus),以便能够托管网站,并运行iRedMail 0.9.5-1,以便托管邮件。
在安装MySQL之前,登录到iRedMail数据库可以正常工作。我也尝试过只安装iRedMail,但是root也不起作用。
如何解决我的MySQL登录问题,或者如何通过现有的MySQL安装安装iRedMail?是的,我尝试了安装提示,但在配置文件中找不到这些变量。
发布于 2017-03-12 01:17:59
基本上,这意味着:使用它的db_users将由(系统用户凭据)进行“身份验证”。通过执行以下操作,您可以看到您的root
用户是否像这样设置:
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
插件。
解决这一问题的方法有两种:
mysql_native_password
插件db_user
创建一个新的system_user
(推荐)选项1:
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 )
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_password
的auth_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/。
发布于 2018-09-14 16:17:47
新版本的MySQL就是这样做的
在新的MySQL客户机中,如果密码在安装时为空,则基于auth_socket
插件。
正确的方法是使用MySQL特权登录到sudo
。
sudo mysql -u root -p
然后使用以下方法更新密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';
一旦完成,停止并启动MySQL服务器。
sudo service mysql stop
sudo service mysql start
要获得完整的详细信息,可以参考此链接。
发布于 2020-01-10 18:31:38
不需要苏多
数据库由两个全权限帐户初始化:第一个帐户是“根”帐户,它是不可访问的,第二个帐户是您的用户名(用命令whoami
检查)。
若要启用对root帐户的访问,您需要使用用户名登录。
mysql -u $(whoami)
并手动更改root密码。
use mysql;
set password for 'root'@'localhost' = password('YOUR_ROOT_PASSWORD_HERE');
flush privileges;
quit
以“root”身份登录
mysql -u root -p
https://stackoverflow.com/questions/39281594
复制相似问题