mysql (mariadb) 错误 1698 (28000):拒绝用户“root”@“localhost”访问

mysql (mariadb) 错误 1698 (28000):拒绝用户“root”@“localhost”访问

我正在使用 Xubuntu 15.04。我已经在各种系统上安装了 MariaDB-Server,并且在安装过程中总是被要求输入 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 不存在。因此,我无法使用它来修复任何问题。

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

答案1

您需要重置密码。因此

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

答案2

新设置的想法是,你根本不应该使用密码。参见UNIX_SOCKET 身份验证插件了解详情。

尤其相关的是/usr/share/doc/mariadb-server-10.0/README.Debian.gz在 Ubuntu 16.04 上:

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

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

/etc/mysql/debian.cnf 中的凭据指定了 init 脚本用来停止服务器并执行 logrotation 的用户。该用户以前是 debian-sys-maint 用户,现在已不再使用,因为 root 可以直接运行。

因此,如果您为 root 禁用该插件并设置密码,则日常 cron 作业将会中断,因为它假定它将以 root 身份登录而无需密码,但使用该插件。

后来又说:

脚本应该以具有所需授权的用户身份运行并通过 unix_socket 进行识别。

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

答案3

我在安装后立即运行了这个命令:

$ sudo mysql_secure_installation

第一步,密码为空,按 Enter 键即可。

答案4

只需使用sudo mysql -u root- 就这么简单


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

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

相关内容