繁体   English   中英

无法使用 UPDATE 在 MySQL 上更改用户密码

[英]Can't change user password on MySQL using UPDATE

在 MySql 5.7.17 下,上述指令不起作用,我总是没有收到任何反馈或以下错误消息:

ERROR 1064 (42000):您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,了解在 'UPDATE mysql.user SET password=password("elephant7") where user="root"' at line ... 附近使用的正确语法。

我在命令行上尝试了以下UPDATE

UPDATE mysql.user SET Password = PASSWORD('elephant7') WHERE User='root';

我真的看不到我的错误了。 我也试过没有; .

不建议直接在mysql.user表上使用UPDATE以这种方式更改密码。 您应该使用SET PASSWORD代替:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('elephant7');

有关 MySQL 的更多信息:分配帐户密码

您的UPDATE命令可能不起作用,因为password列被MySQL 5.7.6 上authentication_string替换。

mysql.user表中的authentication_string列现在存储所有帐户的凭据信息。 password列,以前用于存储使用mysql_native_passwordmysql_old_password插件进行身份验证的帐户的密码哈希值,已删除。

如果您直接更改授权表,您还必须使用FLUSH PRIVILEGES语句重新加载表:

如果您直接使用INSERTUPDATEDELETE等语句修改授权表(不推荐),则更改对权限检查没有影响,直到您告诉服务器重新加载表或重新启动它。 因此,如果您直接更改授权表但忘记重新加载它们,那么在您重新启动服务器之前,这些更改将无效。 这可能会让您想知道为什么您的更改似乎没有任何区别!

要告诉服务器重新加载授权表,请执行刷新权限操作。 这可以通过发出FLUSH PRIVILEGES语句来完成。

来源: 当权限更改生效时

因此,使用正确的列和FLUSH PRIVILEGES语句直接更改授权表上的密码的UPDATE命令必须如下所示:

UPDATE mysql.user SET authentication_string = PASSWORD('elephant7') WHERE User = 'root';
FLUSH PRIVILEGES;

使用此方法更改密码需要刷新权限才能生效。

flush privileges;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM