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

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

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

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

$ mysql -u root -p

您将收到以下错误消息:

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

auth_socket 插件检查套接字用户名(操作系统用户名)是否与客户端程序向服务器指定的MySQL用户名匹配。 该插件无关紧要,不需要密码。 它只是检查用户是否正在使用UNIX套接字进行连接,然后比较用户名。 如果插件发现操作系统用户名和MySQL用户名相同,则它允许进行连接而无需进一步的身份验证。

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

auth_socket 插件提高了安全性,但是当我们使用诸如phpMyAdmin之类的外部程序访问数据库服务器时,也使事情变得复杂。 此外,由 auth_socket 插件只能通过Unix套接字文件从本地主机连接。 它们被限制不能远程连接。 这就是为什么我们需要在Ubuntu中更改MySQL根用户的身份验证方法。

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

MySQL提供了许多身份验证方法以及实现这些方法的插件。 在本指南中,我们仅讨论两个名为 caching_sha2_passwordmysql_native_password 实现称为 缓存SHA-2可插拔身份验证本机可插入身份验证 分别。 首先,我们将了解如何将MySQL根用户的身份验证方法更改为 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 用户。 输入您的 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超级用户的caching_sha2_password

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

从mysql提示符退出:

mysql> exit

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

$ mysql -u root -p

输入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身份登录MySQL服务器 root 用户:

$ sudo mysql

设置 mysql_native_password 插件作为MySQL根用户的默认身份验证,请在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超级用户的身份验证插件更改为mysql_native_password将MySQL超级用户的身份验证插件更改为mysql_native_password

完毕! 我们已将MySQL根用户的身份验证方法更改为“本机可插入身份验证”。

结论

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

auth_socketcaching_sha2_passwordDatabaseLinuxMySQLMySQL身份验证方法MySQL身份验证插件MySQL根用户mysql_native_passwordUbuntu

Sidebar