在MySql 5.7.17下,上述指令不起作用,而且我始终没有收到反馈或以下错误消息:
错误1064 (42000):语法出现错误;请检查与MySQL服务器版本对应的手册,以获得在“UPDATE mysql.user SET password=password”(“elephant7”)附近使用的正确语法,其中user=“root”位于行.
我在命令行上尝试了以下UPDATE:
UPDATE mysql.user SET Password = PASSWORD('elephant7') WHERE User='root';我真的不明白我的错误了。我也尝试了没有;。
发布于 2016-12-19 08:34:30
不建议以这种方式在UPDATE表上直接使用mysql.user更改密码。您应该使用SET PASSWORD来代替:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('elephant7');您的UPDATE命令可能无法工作,因为password列被authentication_string 关于MySQL 5.7.6替换。
现在,
authentication_string表中的mysql.user列存储所有帐户的凭据信息。删除password列(以前用于存储使用mysql_native_password和mysql_old_password插件验证的帐户的密码哈希值)。
如果直接更改授予表,还必须使用FLUSH PRIVILEGES语句重新加载表:
如果直接使用
INSERT、UPDATE或DELETE(不建议使用的)等语句修改授予表,则在通知服务器重新加载表或重新启动该表之前,这些更改对权限检查没有影响。因此,如果直接更改授予表,但忘记重新加载它们,则在重新启动服务器之前,这些更改不会产生任何影响。这可能会让您想知道为什么您的更改似乎没有什么不同! 若要告知服务器重新加载授权表,请执行刷新权限操作。这可以通过发出FLUSH PRIVILEGES语句来完成。 来源:当特权更改生效时
因此,要直接更改授予表上的密码,UPDATE命令必须如下所示,使用正确的列和FLUSH PRIVILEGES语句:
UPDATE mysql.user SET authentication_string = PASSWORD('elephant7') WHERE User = 'root';
FLUSH PRIVILEGES;发布于 2018-09-13 10:16:13
使用此方法更改密码需要刷新权限才能生效。
flush privileges;https://stackoverflow.com/questions/41218479
复制相似问题