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


23

我正在研究Xubuntu 15.04。我已经在各种系统上安装了MariaDB服务器,并且在安装过程中总是要求输入root密码。但是这一次,我不记得要求输入密码了。当我尝试不使用密码(或空白密码)登录时,Access denied for user 'root'@'localhost'出现错误。我尝试通过以下方式完全卸载该软件包

sudo apt-get remove mariadb-server
sudo apt-get purge mariadb-server

重新安装后,仍然没有要求我输入root密码。

我尝试了mysqld --skip-grant-tablesmysql如何修复用户'root'@'localhost'拒绝访问的方法 。我可以在mysql数据库中修改root用户的密码-至少哈希值会更改-但在重新启动mysql服务器后我仍然无法使用新密码登录。我仍然遇到相同的错误。

用户debian-sys-maint不存在。因此,我无法使用它来修复任何问题。

还有什么我可以尝试的想法吗?


一个有用的线索与StackOverflow上同样的问题:stackoverflow.com/questions/39281594/...
恢复莫妮卡-凯文

Answers:


36

您需要重设密码。所以为此

sudo mysql -u root
use mysql;
update user set plugin='' where User='root';
flush privileges;
exit;

9
这种方法的显而易见之处在于,根操作系统的用户能够登录数据库而无需指定密码,因为plugin: auth_socket默认情况下该密码为启用状态。换句话说,不需要--skip-grant-tables像过去的MySQL版本那样使用。(而且,从技术上讲,此措施不是“重置密码”;而是禁用了插件。)
Ben Johnson

1
+1,您能解释一下原因吗?
A1Gard

4
这种方法将在以后引起问题。如果禁用该插件,则日常cron作业将中断,因为它假定可以使用该插件登录。请参阅我的答案以获取详细信息。
科兰

11

新设置的想法是,您根本不应该使用密码。有关详细信息,请参见UNIX_SOCKET身份验证插件

特别相关的是Ubuntu 16.04上的/usr/share/doc/mariadb-server-10.0/README.Debian.gz的内容:

在新安装的系统上,没有设置root密码,也不再创建debian-sys-maint用户。而是将MariaDB根帐户设置为使用unix套接字进行身份验证,例如,任何通过root或sudo进行的mysqld调用都将使用户看到mysqld提示符。

您可能永远不会删除mysql用户“ root”。尽管没有设置密码,但unix_auth插件可确保只能以root用户身份在本地运行。

/etc/mysql/debian.cnf中的凭证指定了初始化脚本用来停止服务器并执行logrotation的用户。这曾经是debian-sys-maint用户,不再用作root用户可以直接运行。

因此,如果您禁用该插件的root用户权限并设置了密码,则日常cron作业将中断,因为它假设它将以root用户身份登录而没有密码,但带有该插件。

后来它说:

脚本应在具有所需授权的用户身份下运行,并通过unix_socket进行标识。

因此,看起来密码不应再由应用程序使用。


1
我刚刚遇到了您描述的问题:"So if you disable that plug-in for root and set a password, the daily cron job will break as it's assuming it will log in as root without a password..."启用UNIX_SOCKET身份验证插件的隐含意义(现在是默认设置)是禁用了使用密码作为根数据库用户进行身份认证的功能。在mariadb.com/kb/zh-CN/mariadb/unix_socket-authentication-plugin上没有任何地方提到此相当大的限制。因此,不可能以root身份登录,例如通过SSH。
本·约翰逊


1

我通过在安装后立即运行以下命令来做到这一点:

$ sudo mysql_secure_installation

第一步,密码为空,因此只需按Enter。


1
如果已经设置,它不是空白,我忘记的密码是…所以仍然无法登录
Dave Everitt

0

我在拉伸的树莓派上遇到了同样的问题。我的解决方案是通过执行以下操作来创建具有所有特权的新用户:

sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

MariaDB [(none)]> use mysql
MariaDB [mysql]> FLUSH PRIVILEGES;
GRANT ALL privileges ON mysql.* TO 'admin'@'localhost' with grant option;

现在,我可以登录,并以超级用户身份登录用户“ admin”。

我希望这会帮助某人。


0

只需使用sudo mysql -u root-就是这样


详细信息:较新的版本使用系统身份验证向mysql进行身份验证。因此,如果可以使用sudo操作系统,则它也假定您也是db root。您可以通过发出确认sudo mysql -u root -e "USE mysql; SELECT User, Host, plugin FROM mysql.user;"。您应该会看到类似的内容(也许auth_socket在其他发行版中)

+------+-----------+-------------+
| User | Host      | plugin      |
+------+-----------+-------------+
| root | localhost | unix_socket |
+------+-----------+-------------+

我以root用户身份登录,但对我来说,该命令仍然需要MariaDB root密码……我忘记了:-(
Dave Everitt,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.