[ad_1]
本指南解释了为什么以及如何将 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 用户名相同,则允许连接而无需进一步验证。
例如,如果有一个用户叫 ostechnix
在操作系统上,他/她将能够登录到 'ostechnix'@'localhost'
如果 Unix 套接字身份验证是定义的身份验证机制,则为 MySQL 中的帐户。 如果操作系统用户名与 MySQL 用户名不同,则 auth_socket
插件只是拒绝连接。
这 auth_socket
插件提高了安全性,但是当我们使用phpMyAdmin等外部程序访问数据库服务器时,也会使事情变得复杂。 此外,通过身份验证的用户 auth_socket
插件只能通过 Unix 套接字文件从本地主机连接。 他们被限制远程连接。 这就是为什么我们需要在 Ubuntu 中更改 MySQL root 用户的身份验证方法。
内容
1.在Ubuntu中更改MySQL Root用户的身份验证方法
MySQL 提供了许多身份验证方法和实现这些方法的插件。 在本指南中,我们只讨论两个名为 caching_sha2_password
和 mysql_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 用户使用 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 用户的身份验证方法已设置为缓存 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>
虽然 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 用户的身份验证方法更改为 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 密码
auth_socketcaching_sha2_passwordDatabaseLinuxMySQLMySQL身份验证方法MySQL身份验证插件MySQL root用户mysql_native_passwordUbuntu
[ad_2]