如何解决 MySQL 错误 1698:详细指南

已发表: 2024-03-28

您是否尝试以 root 用户身份访问 MySQL 数据库,但却遇到错误消息 MySQL error 1698 (28000): Accessied for user 'root'@'localhost'? 对于使用 MySQL 的人来说,这是一个常见问题。 它阻止通过各种方式访问​​数据库,包括终端、PHPMyAdmin 或 MySQL 客户端接口。 对于 Ubuntu 系统用户来说,这个错误比任何其他操作系统 (OS) 更常见。

在本详细指南中,我们将讨论 MySQL 错误 1698 的主要原因,并提供有效的解决方案来解决和解决此错误。 那么,让我们开始解决这个问题,之后您将重新获得对 MySQL 数据库的快速访问。

MySQL错误1698是什么及其背后的原因?

MySQL 错误 1698 背后的问题是 MySQL 如何检查是否允许尝试以“root”用户身份使用它的人这样做。 对于某些操作系统,MySQL 不为“root”用户使用常规密码。 MySQL root帐户通过auth_socket或unix_socket插件检查它。 该插件基于操作系统凭据而不是密码运行,检查用户连接请求是否通过 UNIX 套接字,然后根据系统凭据验证用户名。

基本上,如果您没有以“root”用户身份登录操作系统,MySQL 不会让您以“root”用户身份访问它。 这种方法本应使事情变得更安全、更容易,但在此过程中,可能会出现错误 1698。

出现此错误的原因是安全措施与用户期望之间存在冲突。 了解错误背后的原因是修复错误 1698 并找到保持数据库安全且易于使用的方法的第一步。

 > MySQL 错误 1698 (28000)

进一步了解MySQL错误1698,我们发现其主要原因不是传统的密码概念,而是独特的身份验证方法。 此方法涉及我们上面提到的 auth_socket 或 unix_socket 插件。

本质上,这个插件根本不关心密码。 相反,它会验证连接是否是通过 UNIX 套接字建立的,然后检查尝试连接的用户名是否与登录到系统的用户名匹配。

这种身份验证方法是对基于密码的安全性的转变。 它展示了该插件如何根据计算机系统的用户信息让人们进入。

如何解决MySQL错误1698?

让我们讨论一下针对 MySQL 错误 1698 并确保未来有效的数据库交互的解决方案。

将用户切换到 mysql_native_password 插件

切换到“ mysql_native_password ”插件是一个简单的修复。 这种方法意味着将 root 用户的身份验证插件更新为mysql_native_password 您应该修改 root 用户的插件设置,然后通过刷新 MySQL 权限来应用这些更改。 此方法可恢复访问,作为访问拒绝问题的立即解决方案。

  1. 以特权用户身份访问 MySQL shell。
  2. 使用此命令将 root 用户的身份验证方法切换为mysql_native_password
 更改用户 'root'@'localhost' 通过 'your_new_password' 识别 mysql_native_password;

3.刷新权限以应用更改:

 同花顺特权;

4. 退出MySQL shell 并尝试再次以root 用户身份登录。

将系统用户添加到MySQL用户表

将系统用户添加到 MySQL 用户表并启用 auth_socket插件可以增强安全性。 此方法利用操作系统级身份验证,允许以比传统密码身份验证更安全的方式访问数据库。 此方法最大限度地降低了直接使用 root 帐户进行数据库操作的风险。

  1. 以 root 用户或具有足够权限的其他用户身份登录 MySQL 服务器。
  2. 创建一个新用户并将身份验证设置为“ auth_socket ”:
 创建使用 auth_socket 标识的用户“your_system_user”@“localhost”;

3. 向新用户授予必要的权限:

 使用授予选项将 *.* 上的所有权限授予 'your_system_user'@'localhost';

4.刷新权限以应用更改:

 同花顺特权;

5. 使用新系统用户登录 MySQL,并使用操作系统凭据进行身份验证。

禁用 unix_socket 身份验证

如果您想要快速解决方法,禁用 UNIX 套接字身份验证可以提供立即但安全性较低的解决方案。 此方法通过从 root 用户的身份验证方法中删除 UNIX 套接字插件,允许 root 用户使用标准密码协议登录。 虽然这解决了访问问题,但您应该考虑所涉及的潜在安全权衡。

  1. 打开 MySQL 控制台。
  2. 更新 root 用户以禁用 UNIX 套接字身份验证:
 UPDATE mysql.user SET plugin='' WHERE User='root';

3.刷新权限以保存更改:

 同花顺特权;

现在,root 用户可以使用密码进行身份验证,绕过 UNIX 套接字方法。

结论

MySQL 错误 1698 就像您尝试访问数据库时的一个障碍。 无论您是第一次遇到此错误还是试图防止将来再次发生此错误,了解此错误的具体情况都至关重要。 要解决 MySQL 错误 1698,您需要彻底了解 MySQL 的身份验证架构,尤其是当它与操作系统级安全实践(例如在 Ubuntu 系统中观察到的安全实践)相交叉时。

MYSQL 错误 1698 拒绝 root 用户访问,需要在 MySQL 中仔细配置身份验证机制。

我们讨论了彻底的解决方法,包括将身份验证插件更改为“ mysql_native_password ”,使用“ auth_socket ”插件将系统用户集成到MySQL的用户表中,或者完全禁用UNIX_socket身份验证。 每个解决方案都提供了一种独特的方法来绕过错误,专为适应不同的安全状况和管理偏好而定制。 您将选择哪一种取决于您希望使用数据库管理系统获得的安全级别。