在 Ubuntu 中更改 MySQL 根用户的身份验证方法

本指南解释了为什么以及如何将 MySQL root 用户的身份验证方法更改为 缓存 SHA-2 可插拔身份验证 或者 本机可插拔身份验证 Ubuntu中的方法。

介绍

即使你有 MySQL root 的设置密码 用户,您仍然无法使用数据库服务器进行身份验证 root 有密码的用户。 因为,MySQL root 用户设置为使用 auth_socket 在运行 MySQL 5.7 和更新版本的 Ubuntu 系统中默认使用插件而不是密码。 因此,您无法使用 root 用户及其密码访问 MySQL 服务器。

即使您尝试使用命令以 root 用户身份进行身份验证:

$ mysql -u root -p

您将收到以下错误消息:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

auth_socket 插件检查socket用户名(操作系统用户名)是否与客户端程序指定给服务器的MySQL用户名匹配。

这个插件不在乎,也不需要密码。 它只是检查用户是否使用 UNIX 套接字进行连接,然后比较用户名。

如果插件发现操作系统用户名和 MySQL 用户名相同,则允许连接,无需进一步验证。

为了 example如果有用户叫 ostechnix 在操作系统上,他/她将能够登录到 'ostechnix'@'localhost' 如果 Unix 套接字身份验证是定义的身份验证机制,则 MySQL 中的帐户。 如果操作系统用户名与 MySQL 用户名不同,则 auth_socket 插件只是拒绝连接。

auth_socket 插件提高了安全性,但当我们使用 phpMyAdmin 等外部程序访问数据库服务器时,也会使事情变得复杂。

此外,通过身份验证的用户 auth_socket 插件只能通过 Unix 套接字文件从本地主机连接。 他们被限制远程连接。 这就是为什么我们需要在 Ubuntu 中更改 MySQL root 用户的身份验证方法。

1. 更改 Ubuntu 中 MySQL 根用户的身份验证方法

MySQL 提供了许多身份验证方法和实现这些方法的插件。 在本指南中,我们只讨论两个名为 caching_sha2_passwordmysql_native_password 实现了调用的方法 缓存 SHA-2 可插拔身份验证本机可插拔身份验证 分别。

首先,我们将了解如何将 MySQL root 用户的身份验证方法更改为 caching_sha2_password.

1.1。 将身份验证插件更改为 caching_sha2_password

caching_sha2_password 插件使用 SHA-256 密码哈希执行身份验证。 在 MySQL 8.0 中, caching_sha2_password 是默认的身份验证插件,而不是 mysql_native_password. 它提供更安全的密码加密、更快的身份验证和更好的性能。

要更改身份验证插件,请使用以下命令登录 MySQL 服务器:

$ sudo mysql

由于 MySQL 8 使用 auth_socket Ubuntu 中的插件,上面的命令会让你登录到 MySQL 服务器 root 用户。 Enter 您的 sudo 验证密码。

接下来,通过在 MySQL 提示符下运行以下命令,找到所有 mysql 用户帐户的当前身份验证方法:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

样本输出:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | user             | authentication_string                                                  | plugin                | host      |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
                                             yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
 | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | root             |                                                                        | auth_socket           | localhost |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5 rows in set (0.01 sec)
检查 mysql root 用户的当前身份验证方法

如您所见,MySQL root 用户使用 auth_socket 用于身份验证的插件。 让我们改变 auth_socket 插入 caching_sha2_password 通过使用插件 ALTER USER 命令如下。

请注意,如果您已启用 VALIDATE PASSWORD 插件在设置 MySQL root 用户密码时,必须根据当前密码策略输入强密码。 强密码应由至少 8 个字符组成,包括一个大写字母、一个小写字母、一个数字和一个特殊字符。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

代替 Password123#@! 在上面的命令中使用您选择的强大且唯一的密码,并在以后需要时记下它。

接下来,使用命令更新更改:

mysql> FLUSH PRIVILEGES;

现在使用命令检查当前的身份验证插件是否已更改:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

样本输出:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | user             | authentication_string                                                  | plugin                | host      |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
                                             yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
 | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | root             | $A$005$z9Lq/%(r l
 +DDI9wJbql8DWZNRoet2BSwUrIgjq.l7FxRSyMb/OWk4 | caching_sha2_password | localhost |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5 rows in set (0.00 sec)
将身份验证插件更改为 MySQL root 用户的 caching_sha2_password

MySQL root 用户的身份验证方法已设置为缓存 SHA-2 可插入身份验证。 从现在开始,MySQL root 用户可以使用密码进行身份验证。

Exit 从 mysql 提示符:

mysql> exit

要验证 MySQL root 用户是否可以使用密码登录,请输入以下命令:

$ mysql -u root -p

Enter MySQL root 用户密码:

 Welcome to the MySQL monitor.  Commands end with ; or g.
 Your MySQL connection id is 11
 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)

 Copyright (c) 2000, 2021, Oracle and/or its affiliates.

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.

 Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

 mysql> 
使用 root 用户和密码登录 MySQL 服务器使用 root 用户和密码登录 MySQL 服务器

虽然 caching_sha2_password 插件提供了增强的安全加密和更好的性能,它与现有的 MySQL 安装存在一些兼容性问题,并导致一些 PHP 版本出现问题。 有关详细信息,请参阅 这个链接.

如果您遇到任何兼容性问题,或者客户端或连接器不支持 caching_sha2_password 身份验证插件,恢复到本机身份验证方法,即 mysql_native_password 如下节所述。

1.2. 将身份验证插件更改为 mysql_native_password

MySQL 包括一个 mysql_native_password 实现本机可插入身份验证方法的插件。 它提供基于密码散列方法的身份验证。

mysql_native_password 是旧 MySQL 版本中的默认身份验证方法。

更改为 mysql_native_password 插件,登录 MySQL root 用户:

$ mysql -u root -p

如果您正在使用 auth_socket 插件,您应该输入以下命令以登录 MySQL 服务器 root 用户:

$ sudo mysql

设置 mysql_native_password 插件作为 MySQL root 用户的默认身份验证,在 MySQL 提示符下运行以下命令。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Password123#@!';

使用命令更新更改:

mysql> FLUSH PRIVILEGES;

现在使用命令检查身份验证方法是否已更改:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

样本输出:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | user             | authentication_string                                                  | plugin                | host      |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 | debian-sys-maint | $A$005$||#WR:(W'NSP>|b2
                                             yXI9EfAeI6vnIj8I.Pwvw6Gx6V9bzVce9oTbN212V12 | caching_sha2_password | localhost |
 | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
 | root             | *B6032809F2C8CE37BDF05DEFE5BA30D6DC74DC68                              | mysql_native_password | localhost |
 +------------------+------------------------------------------------------------------------+-----------------------+-----------+
 5 rows in set (0.00 sec)
将身份验证插件更改为 MySQL root 用户的 mysql_native_password将身份验证插件更改为 MySQL root 用户的 mysql_native_password

完毕! 我们已将 MySQL root 用户的身份验证方法更改为 Native Pluggable Authentication。

结论

在本指南中,我们研究了为什么需要在运行 MySQL 5.7 和更新版本的 Ubuntu 系统中更改 MySQL root 用户的身份验证方法。 我们也看到了如何改变 auth_socket 插入 caching_sha2_password 或者 mysql_native_password Ubuntu 操作系统中 MySQL root 用户的插件。

相关阅读:

  • 如何在 Ubuntu Linux 上的 MySQL 8 中重置 Root 密码