【问题标题】:Can't change user password on MySQL using UPDATE无法使用 UPDATE 更改 MySQL 上的用户密码
【发布时间】:2017-05-04 06:17:31
【问题描述】:

在 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 change-password


【解决方案1】:

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

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

More information on MySQL: Assigning Account Passwords

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

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

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

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

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

来源:When Privilege Changes Take Effect

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

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

【讨论】:

  • 我同意,但我认为 OP 正在询问他的命令有什么问题,即使语法似乎是正确的
  • 是的,如果我在他的查询中看到错误,我会更新我的答案。但目前它对我来说是正确的,所以我提供了一个替代方法来尝试和更多关于这个主题的信息。
  • 它现在完美运行,我可以继续。感谢大家的大力支持
【解决方案2】:

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

flush privileges;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多