假设你要为用户名为’username’@’localhost’的用户设置新密码,你可以这样做:

其中,username 是用户名,localhost 是主机名, 123456是要更改的新密码。

方法1: 用 ALTER 语句

ALTER USER 'username'@'localhost' IDENTIFIED BY '123456';

方法2:用 SET 语句

使用 SET 语句来修改普通用户密码,语法格式如下:

SET PASSWORD FOR 'username'@'localhost' = PASSWORD('123456');

注意:新密码要使用 PASSWORD() 函数来加密,如果不使用 PASSWORD() 加密,也会执行成功,但是用户会无法登录。

在MySQL 5.7.6及更新版本中,PASSWORD() 函数已经被弃用,可以直接设置密码字符串。

SET PASSWORD FOR 'username'@'localhost' = '123456';

使用SET语句修改 root 用户的密码可以写成这样。

SET PASSWORD = PASSWORD ('123456');

方法3:用mysqladmin

利用mysqladmin,不需要登录,可以直接修改,修改密码格式为:

mysqladmin -u用户名 -p旧密码 password 新密码(具体的参数可以按需求来使用)

mysqladmin -uroot -h localhost -p123 password 123456  -S /tmp/mysql.sock

方法4:用 UPDATE 直接编辑 user 表

可以使用 UPDATE 语句修改 MySQL 数据库的 user 表的 authentication_string 字段,从而修改普通用户的密码。UPDATA 语句的语法如下:

UPDATA mysql.user SET authentication_string=PASSWORD('123456') WHERE USER ='username' AND HOST ='localhost';

在早期版本的MySQL中,还可以用以下方法修改密码,这种方法现在不再推荐使用,因为它可能会绕过一些内置的安全机制,而且在新版本的MySQL中可能不起作用。

UPDATA mysql.user SET PASSWORD=PASSWORD('123456') WHERE USER ='username' AND HOST='localhost';

方法5:使用 GRANT 语句

除了前面介绍的方法,还可以在全局级别使用 GRANT USAGE 语句指定某个账户的密码而不影响账户当前的权限。需要注意的是,使用 GRANT 语句修改密码,必须拥有 GRANT 权限。语法格式如下:

GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY '123456';

然而,需要注意的是,从MySQL 5.7开始,使用 GRANT 语句来设置或修改用户密码已经被废弃,到了MySQL 8.0 就完全不再支持使用 GRANT 来设置密码了。

重要说明:

  • 在MySQL 5.7.6及更高版本中,不应该直接操作mysql.user表来修改密码,因为密码字段已经从Password变更为authentication_string,并且密码的哈希算法也发生了改变。直接操作系统表可能导致不可预测的行为,甚至可能损坏权限数据。

  • 从MySQL 5.7开始,建议使用ALTER USERSET PASSWORD,因为它们提供了更安全和一致的方式来管理用户密码。

总之,直接使用UPDATE语句修改用户密码虽然在某些情况下是可能的,但并不推荐这样做。始终使用官方推荐的方法来确保安全性和兼容性。如果你正在使用MySQL的较新版本,请避免直接操作系统表,并且始终遵循最佳实践,最好使用ALTER