MySQL 4.1 将密码哈希值从 16 字节扩展到 41 字节。但是,升级 MySQL 不会自动更新旧密码,因此现有密码将继续以弃用的格式存储。这是因为 MySQL 不会将密码存储为纯文本,因此重新生成密码哈希值需要用户干预。
从 MySQL 5.6 开始,相关的 secure_auth
选项默认启用。从 MySQL 5.7 开始,它始终启用,这意味着它不能被禁用。未来的 MySQL 版本将删除此选项。启用此选项后,使用旧格式定义密码的用户将无法登录到 MySQL。
综上所述,弃用的密码格式不适用于 MySQL 5.7。必须更新所有使用旧格式的密码。本节介绍如何使用 MySQL Workbench 升级这些密码。有关使用 MySQL 命令行而不是 MySQL Workbench 迁移旧密码格式的信息,请参阅 从 4.1 之前的密码哈希和 mysql_old_password 插件迁移。
MySQL 存储密码的方法由身份验证插件定义。旧方法使用 mysql_old_password
身份验证插件,而当前默认方法使用 mysql_native_password
。从 MySQL 5.6 开始,sha256_password
选项也可用,但它需要 SSL 或加密连接。当 MySQL Workbench 升级密码时,它会将 mysql_old_password
升级到 mysql_native_password
。有关身份验证插件的其他信息,请参阅 可插拔身份验证。
mysql_native_password
身份验证插件从 MySQL Server 8.0.34 开始弃用,从 MySQL Server 8.4.0 开始默认禁用,从 MySQL Server 9.0.0 开始移除。
MySQL Workbench 默认使用 mysql_native_password
,例如,需要启用它来创建 MySQL Server 8.4 用户。在 MySQL Server 8.4 my.cnf
的 [mysqld]
部分中包含 mysql_native_password=ON
以启用此插件。
选项取决于您的 secure_auth 选项
升级密码确实有约束。以下是两种情况:
-
如果
secure_auth
MySQL 服务器选项被禁用,则可以使用具有旧密码格式的用户登录并更新用户自己的 MySQL 密码。但是,从 MySQL Workbench 6.3.5 开始,这不是一个选项,因为与旧密码格式的兼容性已被删除。因此,用户升级其自身密码格式的能力必须使用 MySQL 命令行完成,如 从 4.1 之前的密码哈希和 mysql_old_password 插件迁移 中所述。注意如果使用 MySQL 命令行不可行,则可以使用旧版本的 MySQL Workbench(版本 6.3.4 及更早版本),它允许您在高级连接选项卡下启用使用旧的身份验证协议选项。旧版本的 MySQL Workbench 可在 https://downloads.mysql.com/archives/workbench/ 获取。
如前所述,从 MySQL 5.6 开始,
secure_auth
默认启用,从 MySQL 5.7 开始始终启用。 如果
secure_auth
已启用,并且您的用户密码以旧格式存储,则您将无法登录。尝试登录将会失败,并显示类似于“错误 2049 (HY000):拒绝使用旧(4.1.1 之前)身份验证协议的连接(客户端选项 'secure_auth' 已启用)”的错误消息。要升级密码,您可以禁用secure_auth
(不推荐),然后按照上述说明进行更新,或者以其他具有特权的用户(例如 root)身份登录,以更改其他用户的密码。
使用 MySQL Workbench 更新您的密码
牢记以上内容,可以使用两种方法使用 MySQL Workbench 更新密码。
从“管理”导航器中打开“用户和权限”选项卡。从用户帐户部分中选择要更新的用户帐户。如果使用的是旧密码格式,您将在屏幕右下角看到以“此帐户使用的是 mysql-4.1.1 之前的密码哈希类型”开头的文本,并且右侧还有一个大的 按钮。在这里,您可以:
-
适用于所有 MySQL 版本的选项
手动输入新密码或当前密码,然后单击
。这会将密码升级为较新的密码格式,并且 MySQL 用户现在可以使用您定义的新密码登录。 -
适用于 MySQL 5.6 及更高版本的选项
不要编辑密码字段,而是保留原样并立即单击
。在这里,您可以生成一个随机密码,并通过单击 将其标记为已过期。使用此临时随机密码登录用户,MySQL 会在用户首次登录时提示输入新密码。
以下插图演示了两种方法中使用的步骤顺序:
重置为随机密码时,您必须保存该密码并将其提供给用户。您可以在类似于下图的新弹出窗口中找到随机密码。
完成升级后,请注意连接的新身份验证类型。在下图所示的示例中,该值从标准(旧)更改为标准。换句话说,身份验证类型从 mysql_old_password
更改为 mysql_native_password
。