假设你要为用户名为’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 USER
或SET PASSWORD
,因为它们提供了更安全和一致的方式来管理用户密码。
总之,直接使用UPDATE
语句修改用户密码虽然在某些情况下是可能的,但并不推荐这样做。始终使用官方推荐的方法来确保安全性和兼容性。如果你正在使用MySQL的较新版本,请避免直接操作系统表,并且始终遵循最佳实践,最好使用ALTER
。