升级MySQL 5.7至8.0.33后password()函数报错求替代方案
MySQL 8.0 替换PASSWORD()函数的用户密码设置方案
MySQL 8.0已彻底移除PASSWORD()函数,原5.7版本的密码设置语句无法直接使用。你尝试的手动拼接哈希值的方式报错,大概率是因为MySQL 8.0默认使用caching_sha2_password认证插件,而该哈希格式仅适配旧版的mysql_native_password插件,两者不兼容导致的。
以下是两种可行的等效方案:
方案一:官方推荐的ALTER USER语法(优先使用)
这是MySQL 8.0官方指定的用户密码修改方式,无需手动处理哈希,服务器会自动根据用户的认证插件生成对应格式的密码哈希:
ALTER USER 'dbusertest'@'%' IDENTIFIED BY 'randomPassword';
如果你的用户需要保留旧版的mysql_native_password认证插件(和5.7保持一致),可以明确指定插件:
ALTER USER 'dbusertest'@'%' IDENTIFIED WITH mysql_native_password BY 'randomPassword';
方案二:使用SET PASSWORD语句(需匹配认证插件)
若你坚持使用SET PASSWORD语法,需先确认用户的认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'dbusertest' AND host = '%';
- 如果插件是
mysql_native_password,可以使用以下语句:
SET PASSWORD FOR 'dbusertest'@'%' = CONCAT('*', UPPER(SHA1(UNHEX(SHA1('randomPassword')))));
- 如果插件是
caching_sha2_password,则无法使用这种旧哈希格式,必须使用方案一的ALTER USER语句直接设置明文密码,由服务器自动生成符合插件要求的哈希。
内容的提问来源于stack exchange,提问作者Shalini Gupta
相关产品推荐
相关产品推荐

