[英]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');
您的UPDATE
命令可能不起作用,因为password
列被MySQL 5.7.6 上的authentication_string
替换。
mysql.user
表中的authentication_string
列现在存储所有帐户的凭据信息。password
列,以前用于存储使用mysql_native_password
和mysql_old_password
插件进行身份验证的帐户的密码哈希值,已删除。
如果您直接更改授权表,您还必须使用FLUSH PRIVILEGES
语句重新加载表:
如果您直接使用
INSERT
、UPDATE
或DELETE
等语句修改授权表(不推荐),则更改对权限检查没有影响,直到您告诉服务器重新加载表或重新启动它。 因此,如果您直接更改授权表但忘记重新加载它们,那么在您重新启动服务器之前,这些更改将无效。 这可能会让您想知道为什么您的更改似乎没有任何区别!要告诉服务器重新加载授权表,请执行刷新权限操作。 这可以通过发出
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.